1*58b9f456SAndroid Build Coastguard Worker #include "benchmark/benchmark.h" 2*58b9f456SAndroid Build Coastguard Worker #include <chrono> 3*58b9f456SAndroid Build Coastguard Worker #include <thread> 4*58b9f456SAndroid Build Coastguard Worker 5*58b9f456SAndroid Build Coastguard Worker #if defined(NDEBUG) 6*58b9f456SAndroid Build Coastguard Worker #undef NDEBUG 7*58b9f456SAndroid Build Coastguard Worker #endif 8*58b9f456SAndroid Build Coastguard Worker #include <cassert> 9*58b9f456SAndroid Build Coastguard Worker BM_basic(benchmark::State & state)10*58b9f456SAndroid Build Coastguard Workervoid BM_basic(benchmark::State& state) { 11*58b9f456SAndroid Build Coastguard Worker for (auto _ : state) { 12*58b9f456SAndroid Build Coastguard Worker } 13*58b9f456SAndroid Build Coastguard Worker } 14*58b9f456SAndroid Build Coastguard Worker BM_basic_slow(benchmark::State & state)15*58b9f456SAndroid Build Coastguard Workervoid BM_basic_slow(benchmark::State& state) { 16*58b9f456SAndroid Build Coastguard Worker std::chrono::milliseconds sleep_duration(state.range(0)); 17*58b9f456SAndroid Build Coastguard Worker for (auto _ : state) { 18*58b9f456SAndroid Build Coastguard Worker std::this_thread::sleep_for( 19*58b9f456SAndroid Build Coastguard Worker std::chrono::duration_cast<std::chrono::nanoseconds>(sleep_duration)); 20*58b9f456SAndroid Build Coastguard Worker } 21*58b9f456SAndroid Build Coastguard Worker } 22*58b9f456SAndroid Build Coastguard Worker 23*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic); 24*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->Arg(42); 25*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic_slow)->Arg(10)->Unit(benchmark::kNanosecond); 26*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic_slow)->Arg(100)->Unit(benchmark::kMicrosecond); 27*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic_slow)->Arg(1000)->Unit(benchmark::kMillisecond); 28*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->Range(1, 8); 29*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->RangeMultiplier(2)->Range(1, 8); 30*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->DenseRange(10, 15); 31*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->Args({42, 42}); 32*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->Ranges({{64, 512}, {64, 512}}); 33*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->MinTime(0.7); 34*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->UseRealTime(); 35*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->ThreadRange(2, 4); 36*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->ThreadPerCpu(); 37*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->Repetitions(3); 38*58b9f456SAndroid Build Coastguard Worker CustomArgs(benchmark::internal::Benchmark * b)39*58b9f456SAndroid Build Coastguard Workervoid CustomArgs(benchmark::internal::Benchmark* b) { 40*58b9f456SAndroid Build Coastguard Worker for (int i = 0; i < 10; ++i) { 41*58b9f456SAndroid Build Coastguard Worker b->Arg(i); 42*58b9f456SAndroid Build Coastguard Worker } 43*58b9f456SAndroid Build Coastguard Worker } 44*58b9f456SAndroid Build Coastguard Worker 45*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_basic)->Apply(CustomArgs); 46*58b9f456SAndroid Build Coastguard Worker BM_explicit_iteration_count(benchmark::State & state)47*58b9f456SAndroid Build Coastguard Workervoid BM_explicit_iteration_count(benchmark::State& state) { 48*58b9f456SAndroid Build Coastguard Worker // Test that benchmarks specified with an explicit iteration count are 49*58b9f456SAndroid Build Coastguard Worker // only run once. 50*58b9f456SAndroid Build Coastguard Worker static bool invoked_before = false; 51*58b9f456SAndroid Build Coastguard Worker assert(!invoked_before); 52*58b9f456SAndroid Build Coastguard Worker invoked_before = true; 53*58b9f456SAndroid Build Coastguard Worker 54*58b9f456SAndroid Build Coastguard Worker // Test that the requested iteration count is respected. 55*58b9f456SAndroid Build Coastguard Worker assert(state.max_iterations == 42); 56*58b9f456SAndroid Build Coastguard Worker size_t actual_iterations = 0; 57*58b9f456SAndroid Build Coastguard Worker for (auto _ : state) 58*58b9f456SAndroid Build Coastguard Worker ++actual_iterations; 59*58b9f456SAndroid Build Coastguard Worker assert(state.iterations() == state.max_iterations); 60*58b9f456SAndroid Build Coastguard Worker assert(state.iterations() == 42); 61*58b9f456SAndroid Build Coastguard Worker 62*58b9f456SAndroid Build Coastguard Worker } 63*58b9f456SAndroid Build Coastguard Worker BENCHMARK(BM_explicit_iteration_count)->Iterations(42); 64*58b9f456SAndroid Build Coastguard Worker 65*58b9f456SAndroid Build Coastguard Worker BENCHMARK_MAIN(); 66