xref: /aosp_15_r20/external/libcxx/utils/google-benchmark/test/basic_test.cc (revision 58b9f456b02922dfdb1fad8a988d5fd8765ecb80)
1*58b9f456SAndroid Build Coastguard Worker 
2*58b9f456SAndroid Build Coastguard Worker #include "benchmark/benchmark.h"
3*58b9f456SAndroid Build Coastguard Worker 
4*58b9f456SAndroid Build Coastguard Worker #define BASIC_BENCHMARK_TEST(x) BENCHMARK(x)->Arg(8)->Arg(512)->Arg(8192)
5*58b9f456SAndroid Build Coastguard Worker 
BM_empty(benchmark::State & state)6*58b9f456SAndroid Build Coastguard Worker void BM_empty(benchmark::State& state) {
7*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
8*58b9f456SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(state.iterations());
9*58b9f456SAndroid Build Coastguard Worker   }
10*58b9f456SAndroid Build Coastguard Worker }
11*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_empty);
12*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_empty)->ThreadPerCpu();
13*58b9f456SAndroid Build Coastguard Worker 
BM_spin_empty(benchmark::State & state)14*58b9f456SAndroid Build Coastguard Worker void BM_spin_empty(benchmark::State& state) {
15*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
16*58b9f456SAndroid Build Coastguard Worker     for (int x = 0; x < state.range(0); ++x) {
17*58b9f456SAndroid Build Coastguard Worker       benchmark::DoNotOptimize(x);
18*58b9f456SAndroid Build Coastguard Worker     }
19*58b9f456SAndroid Build Coastguard Worker   }
20*58b9f456SAndroid Build Coastguard Worker }
21*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_empty);
22*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_empty)->ThreadPerCpu();
23*58b9f456SAndroid Build Coastguard Worker 
BM_spin_pause_before(benchmark::State & state)24*58b9f456SAndroid Build Coastguard Worker void BM_spin_pause_before(benchmark::State& state) {
25*58b9f456SAndroid Build Coastguard Worker   for (int i = 0; i < state.range(0); ++i) {
26*58b9f456SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(i);
27*58b9f456SAndroid Build Coastguard Worker   }
28*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
29*58b9f456SAndroid Build Coastguard Worker     for (int i = 0; i < state.range(0); ++i) {
30*58b9f456SAndroid Build Coastguard Worker       benchmark::DoNotOptimize(i);
31*58b9f456SAndroid Build Coastguard Worker     }
32*58b9f456SAndroid Build Coastguard Worker   }
33*58b9f456SAndroid Build Coastguard Worker }
34*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_before);
35*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_before)->ThreadPerCpu();
36*58b9f456SAndroid Build Coastguard Worker 
BM_spin_pause_during(benchmark::State & state)37*58b9f456SAndroid Build Coastguard Worker void BM_spin_pause_during(benchmark::State& state) {
38*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
39*58b9f456SAndroid Build Coastguard Worker     state.PauseTiming();
40*58b9f456SAndroid Build Coastguard Worker     for (int i = 0; i < state.range(0); ++i) {
41*58b9f456SAndroid Build Coastguard Worker       benchmark::DoNotOptimize(i);
42*58b9f456SAndroid Build Coastguard Worker     }
43*58b9f456SAndroid Build Coastguard Worker     state.ResumeTiming();
44*58b9f456SAndroid Build Coastguard Worker     for (int i = 0; i < state.range(0); ++i) {
45*58b9f456SAndroid Build Coastguard Worker       benchmark::DoNotOptimize(i);
46*58b9f456SAndroid Build Coastguard Worker     }
47*58b9f456SAndroid Build Coastguard Worker   }
48*58b9f456SAndroid Build Coastguard Worker }
49*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_during);
50*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_during)->ThreadPerCpu();
51*58b9f456SAndroid Build Coastguard Worker 
BM_pause_during(benchmark::State & state)52*58b9f456SAndroid Build Coastguard Worker void BM_pause_during(benchmark::State& state) {
53*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
54*58b9f456SAndroid Build Coastguard Worker     state.PauseTiming();
55*58b9f456SAndroid Build Coastguard Worker     state.ResumeTiming();
56*58b9f456SAndroid Build Coastguard Worker   }
57*58b9f456SAndroid Build Coastguard Worker }
58*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_pause_during);
59*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_pause_during)->ThreadPerCpu();
60*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_pause_during)->UseRealTime();
61*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_pause_during)->UseRealTime()->ThreadPerCpu();
62*58b9f456SAndroid Build Coastguard Worker 
BM_spin_pause_after(benchmark::State & state)63*58b9f456SAndroid Build Coastguard Worker void BM_spin_pause_after(benchmark::State& state) {
64*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
65*58b9f456SAndroid Build Coastguard Worker     for (int i = 0; i < state.range(0); ++i) {
66*58b9f456SAndroid Build Coastguard Worker       benchmark::DoNotOptimize(i);
67*58b9f456SAndroid Build Coastguard Worker     }
68*58b9f456SAndroid Build Coastguard Worker   }
69*58b9f456SAndroid Build Coastguard Worker   for (int i = 0; i < state.range(0); ++i) {
70*58b9f456SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(i);
71*58b9f456SAndroid Build Coastguard Worker   }
72*58b9f456SAndroid Build Coastguard Worker }
73*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_after);
74*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_after)->ThreadPerCpu();
75*58b9f456SAndroid Build Coastguard Worker 
BM_spin_pause_before_and_after(benchmark::State & state)76*58b9f456SAndroid Build Coastguard Worker void BM_spin_pause_before_and_after(benchmark::State& state) {
77*58b9f456SAndroid Build Coastguard Worker   for (int i = 0; i < state.range(0); ++i) {
78*58b9f456SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(i);
79*58b9f456SAndroid Build Coastguard Worker   }
80*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
81*58b9f456SAndroid Build Coastguard Worker     for (int i = 0; i < state.range(0); ++i) {
82*58b9f456SAndroid Build Coastguard Worker       benchmark::DoNotOptimize(i);
83*58b9f456SAndroid Build Coastguard Worker     }
84*58b9f456SAndroid Build Coastguard Worker   }
85*58b9f456SAndroid Build Coastguard Worker   for (int i = 0; i < state.range(0); ++i) {
86*58b9f456SAndroid Build Coastguard Worker     benchmark::DoNotOptimize(i);
87*58b9f456SAndroid Build Coastguard Worker   }
88*58b9f456SAndroid Build Coastguard Worker }
89*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after);
90*58b9f456SAndroid Build Coastguard Worker BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after)->ThreadPerCpu();
91*58b9f456SAndroid Build Coastguard Worker 
BM_empty_stop_start(benchmark::State & state)92*58b9f456SAndroid Build Coastguard Worker void BM_empty_stop_start(benchmark::State& state) {
93*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
94*58b9f456SAndroid Build Coastguard Worker   }
95*58b9f456SAndroid Build Coastguard Worker }
96*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_empty_stop_start);
97*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_empty_stop_start)->ThreadPerCpu();
98*58b9f456SAndroid Build Coastguard Worker 
99*58b9f456SAndroid Build Coastguard Worker 
BM_KeepRunning(benchmark::State & state)100*58b9f456SAndroid Build Coastguard Worker void BM_KeepRunning(benchmark::State& state) {
101*58b9f456SAndroid Build Coastguard Worker   size_t iter_count = 0;
102*58b9f456SAndroid Build Coastguard Worker   assert(iter_count == state.iterations());
103*58b9f456SAndroid Build Coastguard Worker   while (state.KeepRunning()) {
104*58b9f456SAndroid Build Coastguard Worker     ++iter_count;
105*58b9f456SAndroid Build Coastguard Worker   }
106*58b9f456SAndroid Build Coastguard Worker   assert(iter_count == state.iterations());
107*58b9f456SAndroid Build Coastguard Worker }
108*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_KeepRunning);
109*58b9f456SAndroid Build Coastguard Worker 
BM_KeepRunningBatch(benchmark::State & state)110*58b9f456SAndroid Build Coastguard Worker void BM_KeepRunningBatch(benchmark::State& state) {
111*58b9f456SAndroid Build Coastguard Worker   // Choose a prime batch size to avoid evenly dividing max_iterations.
112*58b9f456SAndroid Build Coastguard Worker   const size_t batch_size = 101;
113*58b9f456SAndroid Build Coastguard Worker   size_t iter_count = 0;
114*58b9f456SAndroid Build Coastguard Worker   while (state.KeepRunningBatch(batch_size)) {
115*58b9f456SAndroid Build Coastguard Worker     iter_count += batch_size;
116*58b9f456SAndroid Build Coastguard Worker   }
117*58b9f456SAndroid Build Coastguard Worker   assert(state.iterations() == iter_count);
118*58b9f456SAndroid Build Coastguard Worker }
119*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_KeepRunningBatch);
120*58b9f456SAndroid Build Coastguard Worker 
BM_RangedFor(benchmark::State & state)121*58b9f456SAndroid Build Coastguard Worker void BM_RangedFor(benchmark::State& state) {
122*58b9f456SAndroid Build Coastguard Worker   size_t iter_count = 0;
123*58b9f456SAndroid Build Coastguard Worker   for (auto _ : state) {
124*58b9f456SAndroid Build Coastguard Worker     ++iter_count;
125*58b9f456SAndroid Build Coastguard Worker   }
126*58b9f456SAndroid Build Coastguard Worker   assert(iter_count == state.max_iterations);
127*58b9f456SAndroid Build Coastguard Worker }
128*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_RangedFor);
129*58b9f456SAndroid Build Coastguard Worker 
130*58b9f456SAndroid Build Coastguard Worker // Ensure that StateIterator provides all the necessary typedefs required to
131*58b9f456SAndroid Build Coastguard Worker // instantiate std::iterator_traits.
132*58b9f456SAndroid Build Coastguard Worker static_assert(std::is_same<
133*58b9f456SAndroid Build Coastguard Worker   typename std::iterator_traits<benchmark::State::StateIterator>::value_type,
134*58b9f456SAndroid Build Coastguard Worker   typename benchmark::State::StateIterator::value_type>::value, "");
135*58b9f456SAndroid Build Coastguard Worker 
136*58b9f456SAndroid Build Coastguard Worker BENCHMARK_MAIN();
137