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)7void 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)15void 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)25void 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)39void 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)54void 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)65void 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)79void 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)96void 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