summaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/perf-instancing.cpp38
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();