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