blob: 22de007cb6dd274cf7eab21517c9d3c69a1499d2 [file] [log] [blame]
Eric Fiselierb08d8b12016-07-19 23:07:03 +00001
2#include "benchmark/benchmark_api.h"
3
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) {
7 while (state.KeepRunning()) {
8 benchmark::DoNotOptimize(state.iterations());
9 }
10}
11BENCHMARK(BM_empty);
12BENCHMARK(BM_empty)->ThreadPerCpu();
13
14void BM_spin_empty(benchmark::State& state) {
15 while (state.KeepRunning()) {
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 Fiselierfbc9ff22016-11-05 00:30:27 +000028 while (state.KeepRunning()) {
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 Fiselierfbc9ff22016-11-05 00:30:27 +000038 while (state.KeepRunning()) {
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 Fiselierfbc9ff22016-11-05 00:30:27 +000053 while (state.KeepRunning()) {
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 Fiselierfbc9ff22016-11-05 00:30:27 +000064 while (state.KeepRunning()) {
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 Fiselierfbc9ff22016-11-05 00:30:27 +000080 while (state.KeepRunning()) {
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 Fiselierfbc9ff22016-11-05 00:30:27 +000093 while (state.KeepRunning()) {
94 }
Eric Fiselierb08d8b12016-07-19 23:07:03 +000095}
96BENCHMARK(BM_empty_stop_start);
97BENCHMARK(BM_empty_stop_start)->ThreadPerCpu();
98
99BENCHMARK_MAIN()