Commit 0b8144a4 authored by Daniel Black's avatar Daniel Black

MDEV-8981: Analyze stmt - cycles can overflow

A 64bit counter can overflow within the time of a query
so lets take it that the measurement is the small value
rather than an order 1e12 millisecond query.

tested with:

int main()
{
  ulonglong start = ULONGLONG_MAX - 30;
  ulonglong end = 600;
  ulonglong cycles = 10000;

  cycles += end - start;
  if (unlikely(end < start))
     cycles += ULONGLONG_MAX;

  printf("cycles %llu\n", cycles);
}
parent 8a09280d
...@@ -47,6 +47,14 @@ class Exec_time_tracker ...@@ -47,6 +47,14 @@ class Exec_time_tracker
ulonglong count; ulonglong count;
ulonglong cycles; ulonglong cycles;
ulonglong last_start; ulonglong last_start;
void cycles_stop_tracking()
{
ulonglong end= my_timer_cycles();
cycles += end - last_start;
if (unlikely(end < last_start))
cycles += ULONGLONG_MAX;
}
public: public:
Exec_time_tracker() : count(0), cycles(0) {} Exec_time_tracker() : count(0), cycles(0) {}
...@@ -59,7 +67,7 @@ class Exec_time_tracker ...@@ -59,7 +67,7 @@ class Exec_time_tracker
void stop_tracking() void stop_tracking()
{ {
count++; count++;
cycles += my_timer_cycles()- last_start; cycles_stop_tracking();
} }
// interface for getting the time // interface for getting the time
...@@ -93,7 +101,7 @@ class Time_and_counter_tracker: public Exec_time_tracker ...@@ -93,7 +101,7 @@ class Time_and_counter_tracker: public Exec_time_tracker
*/ */
void stop_tracking() void stop_tracking()
{ {
cycles += my_timer_cycles()- last_start; cycles_stop_tracking();
} }
}; };
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment