benchmark 1.9.2
 
Loading...
Searching...
No Matches
timers.h
1#ifndef BENCHMARK_TIMERS_H
2#define BENCHMARK_TIMERS_H
3
4#include <chrono>
5#include <string>
6
7namespace benchmark {
8
9// Return the CPU usage of the current process
10double ProcessCPUUsage();
11
12// Return the CPU usage of the children of the current process
13double ChildrenCPUUsage();
14
15// Return the CPU usage of the current thread
16double ThreadCPUUsage();
17
18#if defined(BENCHMARK_OS_QURT)
19
20// std::chrono::now() can return 0 on some Hexagon devices;
21// this reads the value of a 56-bit, 19.2MHz hardware counter
22// and converts it to seconds. Unlike std::chrono, this doesn't
23// return an absolute time, but since ChronoClockNow() is only used
24// to compute elapsed time, this shouldn't matter.
25struct QuRTClock {
26 typedef uint64_t rep;
27 typedef std::ratio<1, 19200000> period;
28 typedef std::chrono::duration<rep, period> duration;
29 typedef std::chrono::time_point<QuRTClock> time_point;
30 static const bool is_steady = false;
31
32 static time_point now() {
33 unsigned long long count;
34 asm volatile(" %0 = c31:30 " : "=r"(count));
35 return time_point(static_cast<duration>(count));
36 }
37};
38
39#else
40
41#if defined(HAVE_STEADY_CLOCK)
42template <bool HighResIsSteady = std::chrono::high_resolution_clock::is_steady>
43struct ChooseSteadyClock {
44 typedef std::chrono::high_resolution_clock type;
45};
46
47template <>
48struct ChooseSteadyClock<false> {
49 typedef std::chrono::steady_clock type;
50};
51#endif // HAVE_STEADY_CLOCK
52
53#endif
54
56#if defined(BENCHMARK_OS_QURT)
57 typedef QuRTClock type;
58#elif defined(HAVE_STEADY_CLOCK)
59 typedef ChooseSteadyClock<>::type type;
60#else
61 typedef std::chrono::high_resolution_clock type;
62#endif
63};
64
65inline double ChronoClockNow() {
66 typedef ChooseClockType::type ClockType;
67 using FpSeconds = std::chrono::duration<double, std::chrono::seconds::period>;
68 return FpSeconds(ClockType::now().time_since_epoch()).count();
69}
70
71std::string LocalDateTimeString();
72
73} // end namespace benchmark
74
75#endif // BENCHMARK_TIMERS_H
Definition timers.h:55