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