| 1 | #ifndef BENCHMARK_TIMERS_H | 
|---|
| 2 | #define BENCHMARK_TIMERS_H | 
|---|
| 3 |  | 
|---|
| 4 | #include <chrono> | 
|---|
| 5 | #include <string> | 
|---|
| 6 |  | 
|---|
| 7 | namespace benchmark { | 
|---|
| 8 |  | 
|---|
| 9 | // Return the CPU usage of the current process | 
|---|
| 10 | double ProcessCPUUsage(); | 
|---|
| 11 |  | 
|---|
| 12 | // Return the CPU usage of the children of the current process | 
|---|
| 13 | double ChildrenCPUUsage(); | 
|---|
| 14 |  | 
|---|
| 15 | // Return the CPU usage of the current thread | 
|---|
| 16 | double ThreadCPUUsage(); | 
|---|
| 17 |  | 
|---|
| 18 | #if defined(HAVE_STEADY_CLOCK) | 
|---|
| 19 | template <bool HighResIsSteady = std::chrono::high_resolution_clock::is_steady> | 
|---|
| 20 | struct ChooseSteadyClock { | 
|---|
| 21 | typedef std::chrono::high_resolution_clock type; | 
|---|
| 22 | }; | 
|---|
| 23 |  | 
|---|
| 24 | template <> | 
|---|
| 25 | struct ChooseSteadyClock<false> { | 
|---|
| 26 | typedef std::chrono::steady_clock type; | 
|---|
| 27 | }; | 
|---|
| 28 | #endif | 
|---|
| 29 |  | 
|---|
| 30 | struct ChooseClockType { | 
|---|
| 31 | #if defined(HAVE_STEADY_CLOCK) | 
|---|
| 32 | typedef ChooseSteadyClock<>::type type; | 
|---|
| 33 | #else | 
|---|
| 34 | typedef std::chrono::high_resolution_clock type; | 
|---|
| 35 | #endif | 
|---|
| 36 | }; | 
|---|
| 37 |  | 
|---|
| 38 | inline double ChronoClockNow() { | 
|---|
| 39 | typedef ChooseClockType::type ClockType; | 
|---|
| 40 | using FpSeconds = std::chrono::duration<double, std::chrono::seconds::period>; | 
|---|
| 41 | return FpSeconds(ClockType::now().time_since_epoch()).count(); | 
|---|
| 42 | } | 
|---|
| 43 |  | 
|---|
| 44 | std::string LocalDateTimeString(); | 
|---|
| 45 |  | 
|---|
| 46 | }  // end namespace benchmark | 
|---|
| 47 |  | 
|---|
| 48 | #endif  // BENCHMARK_TIMERS_H | 
|---|
| 49 |  | 
|---|