Merge pull request #186 from amin-jabri/multithreaded_Fixture_TearDown

Pass const State to Fixture::TearDown. Fix memory leak in fixture_test
This commit is contained in:
Dominic Hamon 2016-02-24 16:46:44 +01:00
commit e4ad1afa1f
3 changed files with 20 additions and 9 deletions

View File

@ -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;

View File

@ -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()

View File

@ -36,7 +36,7 @@ class MapFixture : public ::benchmark::Fixture {
m = ConstructRandomMap(st.range_x());
}
void TearDown() {
void TearDown(const ::benchmark::State&) {
m.clear();
}