| | #ifndef BENCHMARK_THREAD_TIMER_H |
| | #define BENCHMARK_THREAD_TIMER_H |
| |
|
| | #include "check.h" |
| | #include "timers.h" |
| |
|
| | namespace benchmark { |
| | namespace internal { |
| |
|
| | class ThreadTimer { |
| | public: |
| | ThreadTimer() = default; |
| |
|
| | |
| | void StartTimer() { |
| | running_ = true; |
| | start_real_time_ = ChronoClockNow(); |
| | start_cpu_time_ = ThreadCPUUsage(); |
| | } |
| |
|
| | |
| | void StopTimer() { |
| | CHECK(running_); |
| | running_ = false; |
| | real_time_used_ += ChronoClockNow() - start_real_time_; |
| | |
| | |
| | cpu_time_used_ += std::max<double>(ThreadCPUUsage() - start_cpu_time_, 0); |
| | } |
| |
|
| | |
| | void SetIterationTime(double seconds) { manual_time_used_ += seconds; } |
| |
|
| | bool running() const { return running_; } |
| |
|
| | |
| | double real_time_used() { |
| | CHECK(!running_); |
| | return real_time_used_; |
| | } |
| |
|
| | |
| | double cpu_time_used() { |
| | CHECK(!running_); |
| | return cpu_time_used_; |
| | } |
| |
|
| | |
| | double manual_time_used() { |
| | CHECK(!running_); |
| | return manual_time_used_; |
| | } |
| |
|
| | private: |
| | bool running_ = false; |
| | double start_real_time_ = 0; |
| | double start_cpu_time_ = 0; |
| |
|
| | |
| | double real_time_used_ = 0; |
| | double cpu_time_used_ = 0; |
| | |
| | double manual_time_used_ = 0; |
| | }; |
| |
|
| | } |
| | } |
| |
|
| | #endif |
| |
|