diff --git a/test/palette_blending_benchmark.cpp b/test/palette_blending_benchmark.cpp index 8e36c32b7..9ff1624f2 100644 --- a/test/palette_blending_benchmark.cpp +++ b/test/palette_blending_benchmark.cpp @@ -1,10 +1,13 @@ #include "utils/palette_blending.hpp" #include +#include #include #include +#include "utils/palette_kd_tree.hpp" + namespace devilution { std::array logical_palette; @@ -36,7 +39,42 @@ void BM_GenerateBlendedLookupTable(benchmark::State &state) } } +void BM_BuildTree(benchmark::State &state) +{ + SDL_Color *palette = logical_palette.data(); + GeneratePalette(palette); + + for (auto _ : state) { + PaletteKdTree tree(palette, -1, -1); + benchmark::DoNotOptimize(tree); + } +} + +void BM_FindNearestNeighbor(benchmark::State &state) +{ + SDL_Color *palette = logical_palette.data(); + GeneratePalette(palette); + PaletteKdTree tree(palette, -1, -1); + + std::vector> queries; + int64_t itemsProcessed = 0; + for (auto _ : state) { + for (int r = 0; r < 256; ++r) { + for (int g = 0; g < 256; ++g) { + for (int b = 0; b < 256; ++b) { + uint8_t result = tree.findNearestNeighbor({ static_cast(r), static_cast(g), static_cast(b) }); + benchmark::DoNotOptimize(result); + } + } + } + itemsProcessed += 256 * 256 * 256; + } + state.SetItemsProcessed(itemsProcessed); +} + BENCHMARK(BM_GenerateBlendedLookupTable); +BENCHMARK(BM_BuildTree); +BENCHMARK(BM_FindNearestNeighbor); } // namespace } // namespace devilution