Google Benchmark,如何只调用一次代码?
Google Benchmark, how to call code only once?
我有一个代码片段需要由两部分组成,首先状态需要设置一次,接下来我需要实际对一个函数进行基准测试。
我的代码如下所示:
static void BM_LoopTime(benchmark::State& state)
{
MasterEngine engine;
for (auto _ : state)
{
engine.LoopOnce();
}
}
BENCHMARK(BM_LoopTime);
在我的输出中我得到:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Pointer already set
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
多次,这是一条自定义错误消息,表示试图覆盖一个非常重要的指针,该指针只能被触摸一次。
多次调用该代码在我的实现中是未定义的行为。我怎样才能只调用对象初始化一次,然后告诉它调用循环?
我发现这是一个解决方法,它对我的用例来说已经足够好了,但我仍在寻找更好的解决方案:
class MyFixture : public benchmark::Fixture
{
public:
std::unique_ptr<MasterEngine> engine;
void SetUp(const ::benchmark::State& state)
{
if(engine.get() == nullptr)
engine = std::make_unique<MasterEngine>();
}
void TearDown(const ::benchmark::State& state)
{
}
};
我有一个代码片段需要由两部分组成,首先状态需要设置一次,接下来我需要实际对一个函数进行基准测试。
我的代码如下所示:
static void BM_LoopTime(benchmark::State& state)
{
MasterEngine engine;
for (auto _ : state)
{
engine.LoopOnce();
}
}
BENCHMARK(BM_LoopTime);
在我的输出中我得到:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Pointer already set
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
多次,这是一条自定义错误消息,表示试图覆盖一个非常重要的指针,该指针只能被触摸一次。
多次调用该代码在我的实现中是未定义的行为。我怎样才能只调用对象初始化一次,然后告诉它调用循环?
我发现这是一个解决方法,它对我的用例来说已经足够好了,但我仍在寻找更好的解决方案:
class MyFixture : public benchmark::Fixture
{
public:
std::unique_ptr<MasterEngine> engine;
void SetUp(const ::benchmark::State& state)
{
if(engine.get() == nullptr)
engine = std::make_unique<MasterEngine>();
}
void TearDown(const ::benchmark::State& state)
{
}
};