blob: 3348781ce726c5d3eb06505a40b9563cca0b3da8 [file] [log] [blame]
Eric Fiselierb08d8b12016-07-19 23:07:03 +00001
Eric Fiselier19039762018-01-18 04:23:01 +00002#include "benchmark/benchmark.h"
Eric Fiselierb08d8b12016-07-19 23:07:03 +00003
Eric Fiselierfbc9ff22016-11-05 00:30:27 +00004#define BASIC_BENCHMARK_TEST(x) BENCHMARK(x)->Arg(8)->Arg(512)->Arg(8192)
Eric Fiselierb08d8b12016-07-19 23:07:03 +00005
6void BM_empty(benchmark::State& state) {
Eric Fiselier19039762018-01-18 04:23:01 +00007 for (auto _ : state) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +00008 benchmark::DoNotOptimize(state.iterations());
9 }
10}
11BENCHMARK(BM_empty);
12BENCHMARK(BM_empty)->ThreadPerCpu();
13
14void BM_spin_empty(benchmark::State& state) {
Eric Fiselier19039762018-01-18 04:23:01 +000015 for (auto _ : state) {
Eric Fiselierf6e09e52016-08-09 18:56:48 +000016 for (int x = 0; x < state.range(0); ++x) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000017 benchmark::DoNotOptimize(x);
18 }
19 }
20}
21BASIC_BENCHMARK_TEST(BM_spin_empty);
22BASIC_BENCHMARK_TEST(BM_spin_empty)->ThreadPerCpu();
23
24void BM_spin_pause_before(benchmark::State& state) {
Eric Fiselierf6e09e52016-08-09 18:56:48 +000025 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000026 benchmark::DoNotOptimize(i);
27 }
Eric Fiselier19039762018-01-18 04:23:01 +000028 for (auto _ : state) {
Eric Fiselierf6e09e52016-08-09 18:56:48 +000029 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000030 benchmark::DoNotOptimize(i);
31 }
32 }
33}
34BASIC_BENCHMARK_TEST(BM_spin_pause_before);
35BASIC_BENCHMARK_TEST(BM_spin_pause_before)->ThreadPerCpu();
36
Eric Fiselierb08d8b12016-07-19 23:07:03 +000037void BM_spin_pause_during(benchmark::State& state) {
Eric Fiselier19039762018-01-18 04:23:01 +000038 for (auto _ : state) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000039 state.PauseTiming();
Eric Fiselierf6e09e52016-08-09 18:56:48 +000040 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000041 benchmark::DoNotOptimize(i);
42 }
43 state.ResumeTiming();
Eric Fiselierf6e09e52016-08-09 18:56:48 +000044 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000045 benchmark::DoNotOptimize(i);
46 }
47 }
48}
49BASIC_BENCHMARK_TEST(BM_spin_pause_during);
50BASIC_BENCHMARK_TEST(BM_spin_pause_during)->ThreadPerCpu();
51
52void BM_pause_during(benchmark::State& state) {
Eric Fiselier19039762018-01-18 04:23:01 +000053 for (auto _ : state) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000054 state.PauseTiming();
55 state.ResumeTiming();
56 }
57}
58BENCHMARK(BM_pause_during);
59BENCHMARK(BM_pause_during)->ThreadPerCpu();
60BENCHMARK(BM_pause_during)->UseRealTime();
61BENCHMARK(BM_pause_during)->UseRealTime()->ThreadPerCpu();
62
63void BM_spin_pause_after(benchmark::State& state) {
Eric Fiselier19039762018-01-18 04:23:01 +000064 for (auto _ : state) {
Eric Fiselierf6e09e52016-08-09 18:56:48 +000065 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000066 benchmark::DoNotOptimize(i);
67 }
68 }
Eric Fiselierf6e09e52016-08-09 18:56:48 +000069 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000070 benchmark::DoNotOptimize(i);
71 }
72}
73BASIC_BENCHMARK_TEST(BM_spin_pause_after);
74BASIC_BENCHMARK_TEST(BM_spin_pause_after)->ThreadPerCpu();
75
Eric Fiselierb08d8b12016-07-19 23:07:03 +000076void BM_spin_pause_before_and_after(benchmark::State& state) {
Eric Fiselierf6e09e52016-08-09 18:56:48 +000077 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000078 benchmark::DoNotOptimize(i);
79 }
Eric Fiselier19039762018-01-18 04:23:01 +000080 for (auto _ : state) {
Eric Fiselierf6e09e52016-08-09 18:56:48 +000081 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000082 benchmark::DoNotOptimize(i);
83 }
84 }
Eric Fiselierf6e09e52016-08-09 18:56:48 +000085 for (int i = 0; i < state.range(0); ++i) {
Eric Fiselierb08d8b12016-07-19 23:07:03 +000086 benchmark::DoNotOptimize(i);
87 }
88}
89BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after);
90BASIC_BENCHMARK_TEST(BM_spin_pause_before_and_after)->ThreadPerCpu();
91
Eric Fiselierb08d8b12016-07-19 23:07:03 +000092void BM_empty_stop_start(benchmark::State& state) {
Eric Fiselier19039762018-01-18 04:23:01 +000093 for (auto _ : state) {
Eric Fiselierfbc9ff22016-11-05 00:30:27 +000094 }
Eric Fiselierb08d8b12016-07-19 23:07:03 +000095}
96BENCHMARK(BM_empty_stop_start);
97BENCHMARK(BM_empty_stop_start)->ThreadPerCpu();
98
Eric Fiselier19039762018-01-18 04:23:01 +000099
100void BM_KeepRunning(benchmark::State& state) {
101 size_t iter_count = 0;
102 while (state.KeepRunning()) {
103 ++iter_count;
104 }
105 assert(iter_count == state.max_iterations);
106}
107BENCHMARK(BM_KeepRunning);
108
109void BM_RangedFor(benchmark::State& state) {
110 size_t iter_count = 0;
111 for (auto _ : state) {
112 ++iter_count;
113 }
114 assert(iter_count == state.max_iterations);
115}
116BENCHMARK(BM_RangedFor);
117
118BENCHMARK_MAIN();