Details
-
Bug
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
Impala 2.2.4
-
None
Description
Both MonotonicStopWatch and StopWatch underestimate the total time if the stopwatch is running while ElapsedTime() is called. For example:
uint64_t ElapsedTime() const { if (!running_) return total_time_; timespec end; clock_gettime(CLOCK_MONOTONIC, &end); // Should include total_time_, but does not return (end.tv_sec - start_.tv_sec) * 1000L * 1000L * 1000L + (end.tv_nsec - start_.tv_nsec); }
The effect is that we could have:
MonotonicStopWatch sw;
sw.Start();
sw.Stop();
uint64_t total = sw.ElapsedTime();
sw.Start();
// With the bug, this could fail.
ASSERT_GE(sw.ElapsedTime(), total);