1 
2 #include "benchmark/benchmark_api.h"
3 
4 #define BASIC_BENCHMARK_TEST(x) \
5     BENCHMARK(x)->Arg(8)->Arg(512)->Arg(8192)
6 
BM_empty(benchmark::State & state)7 void BM_empty(benchmark::State& state) {
8   while (state.KeepRunning()) {
9     benchmark::DoNotOptimize(state.iterations());
10   }
11 }
12 BENCHMARK(BM_empty);
13 BENCHMARK(BM_empty)->ThreadPerCpu();
14 
BM_spin_empty(benchmark::State & state)15 void BM_spin_empty(benchmark::State& state) {
16   while (state.KeepRunning()) {
17     for (int x = 0; x < state.range(0); ++x) {
18       benchmark::DoNotOptimize(x);
19     }
20   }
21 }
22 BASIC_BENCHMARK_TEST(BM_spin_empty);
23 BASIC_BENCHMARK_TEST(BM_spin_empty)->ThreadPerCpu();
24 
BM_spin_pause_before(benchmark::State & state)25 void BM_spin_pause_before(benchmark::State& state) {
26   for (int i = 0; i < state.range(0); ++i) {
27     benchmark::DoNotOptimize(i);
28   }
29   while(state.KeepRunning()) {
30     for (int i = 0; i < state.range(0); ++i) {
31       benchmark::DoNotOptimize(i);
32     }
33   }
34 }
35 BASIC_BENCHMARK_TEST(BM_spin_pause_before);
36 BASIC_BENCHMARK_TEST(BM_spin_pause_before)->ThreadPerCpu();
37 
38 
BM_spin_pause_during(benchmark::State & state)39 void BM_spin_pause_during(benchmark::State& state) {
40   while(state.KeepRunning()) {
41     state.PauseTiming();
42     for (int i = 0; i < state.range(0); ++i) {
43       benchmark::DoNotOptimize(i);
44     }
45     state.ResumeTiming();
46     for (int i = 0; i < state.range(0); ++i) {
47       benchmark::DoNotOptimize(i);
48     }
49   }
50 }
51 BASIC_BENCHMARK_TEST(BM_spin_pause_during);
52 BASIC_BENCHMARK_TEST(BM_spin_pause_during)->ThreadPerCpu();
53 
BM_pause_during(benchmark::State & state)54 void BM_pause_during(benchmark::State& state) {
55   while(state.KeepRunning()) {
56     state.PauseTiming();
57     state.ResumeTiming();
58   }
59 }
60 BENCHMARK(BM_pause_during);
61 BENCHMARK(BM_pause_during)->ThreadPerCpu();
62 BENCHMARK(BM_pause_during)->UseRealTime();
63 BENCHMARK(BM_pause_during)->UseRealTime()->ThreadPerCpu();
64 
BM_spin_pause_after(benchmark::State & state)65 void BM_spin_pause_after(benchmark::State& state) {
66   while(state.KeepRunning()) {
67     for (int i = 0; i < state.range(0); ++i) {
68       benchmark::DoNotOptimize(i);
69     }
70   }
71   for (int i = 0; i < state.range(0); ++i) {
72     benchmark::DoNotOptimize(i);
73   }
74 }
75 BASIC_BENCHMARK_TEST(BM_spin_pause_after);
76 BASIC_BENCHMARK_TEST(BM_spin_pause_after)->ThreadPerCpu();
77 
78 
BM_spin_pause_before_and_after(benchmark::State & state)79 void BM_spin_pause_before_and_after(benchmark::State& state) {
80   for (int i = 0; i < state.range(0); ++i) {
81     benchmark::DoNotOptimize(i);
82   }
83   while(state.KeepRunning()) {
84     for (int i = 0; i < state.range(0); ++i) {
85       benchmark::DoNotOptimize(i);
86     }
87   }
88   for (int i = 0; i < state.range(0); ++i) {
89     benchmark::DoNotOptimize(i);
90   }
91 }
92 BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after);
93 BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after)->ThreadPerCpu();
94 
95 
BM_empty_stop_start(benchmark::State & state)96 void BM_empty_stop_start(benchmark::State& state) {
97   while (state.KeepRunning()) { }
98 }
99 BENCHMARK(BM_empty_stop_start);
100 BENCHMARK(BM_empty_stop_start)->ThreadPerCpu();
101 
102 BENCHMARK_MAIN()
103