diff --git a/include/benchmark/benchmark_api.h b/include/benchmark/benchmark_api.h index 0c5115dd..7a42025a 100644 --- a/include/benchmark/benchmark_api.h +++ b/include/benchmark/benchmark_api.h @@ -491,11 +491,11 @@ public: virtual void Run(State& st) { this->SetUp(st); this->BenchmarkCase(st); - this->TearDown(); + this->TearDown(st); } virtual void SetUp(const State&) {} - virtual void TearDown() {} + virtual void TearDown(const State&) {} protected: virtual void BenchmarkCase(State&) = 0; diff --git a/test/fixture_test.cc b/test/fixture_test.cc index 92fbc4cb..bf800fda 100644 --- a/test/fixture_test.cc +++ b/test/fixture_test.cc @@ -6,14 +6,18 @@ class MyFixture : public ::benchmark::Fixture { public: - void SetUp(const ::benchmark::State&) { - assert(data.get() == nullptr); - data.reset(new int(42)); + void SetUp(const ::benchmark::State& state) { + if (state.thread_index == 0) { + assert(data.get() == nullptr); + data.reset(new int(42)); + } } - void TearDown() { - assert(data.get() != nullptr); - data.release(); + void TearDown(const ::benchmark::State& state) { + if (state.thread_index == 0) { + assert(data.get() != nullptr); + data.reset(); + } } ~MyFixture() { @@ -32,10 +36,17 @@ BENCHMARK_F(MyFixture, Foo)(benchmark::State& st) { } BENCHMARK_DEFINE_F(MyFixture, Bar)(benchmark::State& st) { + if (st.thread_index == 0) { + assert(data.get() != nullptr); + assert(*data == 42); + } while (st.KeepRunning()) { + assert(data.get() != nullptr); + assert(*data == 42); } st.SetItemsProcessed(st.range_x()); } BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42); +BENCHMARK_REGISTER_F(MyFixture, Bar)->Arg(42)->ThreadPerCpu(); BENCHMARK_MAIN() diff --git a/test/map_test.cc b/test/map_test.cc index 8d5f6ecd..58399c1c 100644 --- a/test/map_test.cc +++ b/test/map_test.cc @@ -36,7 +36,7 @@ class MapFixture : public ::benchmark::Fixture { m = ConstructRandomMap(st.range_x()); } - void TearDown() { + void TearDown(const ::benchmark::State&) { m.clear(); }