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