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 | |