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