基本上,我想在遍历数据包转储文件时测量时间。看着谷歌基准文档,我来了:
BENCHMARK_DEFINE_F(MyFixture, FooTest)(benchmark::State& state) {
for (auto _ : state) {
// read
if (readPacket() == NO_MORE_PACKET) {
break;
}
if (!isPacketOfConsideration()) {
continue;
}
// some extra bookkeeping code if required
time t1{};
processPacket();
time t2{};
state.SetIterationTime(t2 - t1);
}
}
BENCHMARK_REGISTER_F(MyFixture, Footest)->UseManualTime();
上面是一个伪代码,它使用手动时间来测量和设置迭代时间。问题基本上是:
break
吗?continue
谷歌基准测试的for循环吗?我建议尝试黑盒测试。此处的微基准测试可能无济于事。
我将其分为几个步骤。
我从事开源项目,该项目使用此方案对游戏服务器进行基准测试。首先,挂钩sendto
和recv
功能,并记录所有数据包。然后sleep
被钩住,因此服务器在两次游戏循环之间没有处于休眠状态。 sendto
刚刚返回,recv
从文件中读取包数据。