0

基本上我想在遍历数据包转储文件时测量时间。查看谷歌基准文档,我附带了:

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

以上是一个伪代码,它使用手动时间来测量和设置迭代时间。问题基本上是:

  1. 我可以break从谷歌基准的 for 循环中了解状态吗?
  2. 我可以continue在不设置迭代时间的情况下对状态进行谷歌基准测试吗?
4

1 回答 1

1

我建议尝试黑盒测试。这里的微型基准测试可能无济于事。

我会把它分成几个步骤。

  1. 生成或记录大量数据包数据。
  2. 将此数据包数据输入您的解析器并测量完全处理它所需的时间。这可能是您的代码或整个应用程序中的功能。
  3. 进行更改,重新运行基准测试,比较结果

我从事开源项目,该项目使用该方案对游戏服务器进行基准测试。首先,sendto钩住recv函数并记录所有数据包。然后sleep被钩住了,所以服务器在游戏循环迭代之间没有休眠。sendto只是recv从文件中返回并读取数据包数据。

详细说明。

黑盒测试

于 2019-12-26T11:21:14.573 回答