benchmark
1.10.0
Toggle main menu visibility
Loading...
Searching...
No Matches
timers.h
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(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.
25
struct
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)
42
template
<
bool
HighResIsSteady = std::chrono::high_resolution_clock::is_steady>
43
struct
ChooseSteadyClock {
44
typedef
std::chrono::high_resolution_clock type;
45
};
46
47
template
<>
48
struct
ChooseSteadyClock<false> {
49
typedef
std::chrono::steady_clock type;
50
};
51
#endif
// HAVE_STEADY_CLOCK
52
53
#endif
54
55
struct
ChooseClockType
{
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
65
inline
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
71
std::string LocalDateTimeString();
72
73
}
// end namespace benchmark
74
75
#endif
// BENCHMARK_TIMERS_H
benchmark::ChooseClockType
Definition
timers.h:55
src
timers.h
Generated by
1.18.0