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