1*58b9f456SAndroid Build Coastguard Worker 2*58b9f456SAndroid Build Coastguard Worker #include "benchmark/benchmark.h" 3*58b9f456SAndroid Build Coastguard Worker 4*58b9f456SAndroid Build Coastguard Worker #include <cassert> 5*58b9f456SAndroid Build Coastguard Worker #include <memory> 6*58b9f456SAndroid Build Coastguard Worker 7*58b9f456SAndroid Build Coastguard Worker class MyFixture : public ::benchmark::Fixture { 8*58b9f456SAndroid Build Coastguard Worker public: SetUp(const::benchmark::State & state)9*58b9f456SAndroid Build Coastguard Worker void SetUp(const ::benchmark::State& state) { 10*58b9f456SAndroid Build Coastguard Worker if (state.thread_index == 0) { 11*58b9f456SAndroid Build Coastguard Worker assert(data.get() == nullptr); 12*58b9f456SAndroid Build Coastguard Worker data.reset(new int(42)); 13*58b9f456SAndroid Build Coastguard Worker } 14*58b9f456SAndroid Build Coastguard Worker } 15*58b9f456SAndroid Build Coastguard Worker TearDown(const::benchmark::State & state)16*58b9f456SAndroid Build Coastguard Worker void TearDown(const ::benchmark::State& state) { 17*58b9f456SAndroid Build Coastguard Worker if (state.thread_index == 0) { 18*58b9f456SAndroid Build Coastguard Worker assert(data.get() != nullptr); 19*58b9f456SAndroid Build Coastguard Worker data.reset(); 20*58b9f456SAndroid Build Coastguard Worker } 21*58b9f456SAndroid Build Coastguard Worker } 22*58b9f456SAndroid Build Coastguard Worker ~MyFixture()23*58b9f456SAndroid Build Coastguard Worker ~MyFixture() { assert(data == nullptr); } 24*58b9f456SAndroid Build Coastguard Worker 25*58b9f456SAndroid Build Coastguard Worker std::unique_ptr<int> data; 26*58b9f456SAndroid Build Coastguard Worker }; 27*58b9f456SAndroid Build Coastguard Worker BENCHMARK_F(MyFixture,Foo)28*58b9f456SAndroid Build Coastguard WorkerBENCHMARK_F(MyFixture, Foo)(benchmark::State &st) { 29*58b9f456SAndroid Build Coastguard Worker assert(data.get() != nullptr); 30*58b9f456SAndroid Build Coastguard Worker assert(*data == 42); 31*58b9f456SAndroid Build Coastguard Worker for (auto _ : st) { 32*58b9f456SAndroid Build Coastguard Worker } 33*58b9f456SAndroid Build Coastguard Worker } 34*58b9f456SAndroid Build Coastguard Worker BENCHMARK_DEFINE_F(MyFixture,Bar)35*58b9f456SAndroid Build Coastguard WorkerBENCHMARK_DEFINE_F(MyFixture, Bar)(benchmark::State& st) { 36*58b9f456SAndroid Build Coastguard Worker if (st.thread_index == 0) { 37*58b9f456SAndroid Build Coastguard Worker assert(data.get() != nullptr); 38*58b9f456SAndroid Build Coastguard Worker assert(*data == 42); 39*58b9f456SAndroid Build Coastguard Worker } 40*58b9f456SAndroid Build Coastguard Worker for (auto _ : st) { 41*58b9f456SAndroid Build Coastguard Worker assert(data.get() != nullptr); 42*58b9f456SAndroid Build Coastguard Worker assert(*data == 42); 43*58b9f456SAndroid Build Coastguard Worker } 44*58b9f456SAndroid Build Coastguard Worker st.SetItemsProcessed(st.range(0)); 45*58b9f456SAndroid Build Coastguard Worker } 46*58b9f456SAndroid Build Coastguard Worker BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42); 47*58b9f456SAndroid Build Coastguard Worker BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42)->ThreadPerCpu(); 48*58b9f456SAndroid Build Coastguard Worker 49*58b9f456SAndroid Build Coastguard Worker BENCHMARK_MAIN(); 50