diff options
Diffstat (limited to 'test/perf-instancing.cpp')
| -rw-r--r-- | test/perf-instancing.cpp | 38 |
1 files changed, 23 insertions, 15 deletions
diff --git a/test/perf-instancing.cpp b/test/perf-instancing.cpp index f3d16a8..4373e5a 100644 --- a/test/perf-instancing.cpp +++ b/test/perf-instancing.cpp @@ -9,30 +9,41 @@ namespace { glm::mat3 rot; }; - struct Data { - explicit Data(size_t n) + const TestMainWindowAppBase _; + + class Data : public benchmark::Fixture { + public: + void + SetUp(::benchmark::State & state) override { + auto count = static_cast<size_t>(state.range()); std::mt19937 gen(std::random_device {}()); std::uniform_int_distribution<GlobalDistance> xyDistrib(0, 1000000); std::uniform_int_distribution<GlobalDistance> zDistrib(0, 10000); - while (n--) { + proxies.reserve(count); + instances.reserve(count); + + while (count--) { proxies.emplace_back(instances.acquire( GlobalPosition3D {xyDistrib(gen), xyDistrib(gen), zDistrib(gen)}, glm::mat3 {})); } } + void + TearDown(::benchmark::State &) override + { + proxies.clear(); + } + InstanceVertices<Instance> instances; std::vector<InstanceVertices<Instance>::InstanceProxy> proxies; }; - void - partition1(benchmark::State & state) + BENCHMARK_DEFINE_F(Data, partition1)(benchmark::State & state) { - TestMainWindowAppBase window; - Data data(static_cast<size_t>(state.range())); GlobalPosition2D pos {}; for (auto loop : state) { - data.instances.partition([&pos](const auto & instance) { + instances.partition([&pos](const auto & instance) { return std::abs(instance.pos.x - pos.x) < 5 && std::abs(instance.pos.y - pos.y) < 5; }); pos += GlobalPosition2D {33, 17}; @@ -40,14 +51,11 @@ namespace { } } - void - partition2(benchmark::State & state) + BENCHMARK_DEFINE_F(Data, partition2)(benchmark::State & state) { - TestMainWindowAppBase window; - Data data(static_cast<size_t>(state.range())); GlobalPosition2D pos {}; for (auto loop : state) { - data.instances.partition( + instances.partition( [&pos](const auto & instance) { return std::abs(instance.pos.x - pos.x) < 5; }, @@ -60,7 +68,7 @@ namespace { } } -BENCHMARK(partition1)->Range(0, 1 << 20); -BENCHMARK(partition2)->Range(0, 1 << 20); +BENCHMARK_REGISTER_F(Data, partition1)->Range(0, 1 << 20); +BENCHMARK_REGISTER_F(Data, partition2)->Range(0, 1 << 20); BENCHMARK_MAIN(); |
