Add a benchmark for calculate_scaling_weights().
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 26 Nov 2017 12:56:19 +0000 (13:56 +0100)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sun, 26 Nov 2017 13:04:09 +0000 (14:04 +0100)
resample_effect_test.cpp

index 7955c5b..b47bd57 100644 (file)
@@ -9,6 +9,7 @@
 #include "effect_chain.h"
 #include "flat_input.h"
 #include "image_format.h"
+#include "init.h"
 #include "resample_effect.h"
 #include "test_util.h"
 
@@ -471,6 +472,24 @@ BENCHMARK_CAPTURE(BM_ResampleEffectFloat, Float32Upscale, GAMMA_LINEAR, "fragmen
 BENCHMARK_CAPTURE(BM_ResampleEffectInt8, Int8Downscale, GAMMA_REC_709, "fragment")->Args({1280, 720, 640, 360})->Args({1280, 720, 320, 180})->Args({1280, 720, 321, 181})->UseRealTime()->Unit(benchmark::kMicrosecond);
 BENCHMARK_CAPTURE(BM_ResampleEffectFloat, Float32Downscale, GAMMA_LINEAR, "fragment")->Args({1280, 720, 640, 360})->Args({1280, 720, 320, 180})->Args({1280, 720, 321, 181})->UseRealTime()->Unit(benchmark::kMicrosecond);
 
+void BM_ComputeScalingWeights(benchmark::State &state)
+{
+       constexpr unsigned src_size = 1280;
+       constexpr unsigned dst_size = 35;
+       int old_precision = movit_texel_subpixel_precision;
+       movit_texel_subpixel_precision = 64;  // To get consistent results across GPUs; this is a CPU test.
+
+       // One iteration warmup to make sure the Lanczos table is computed.
+       calculate_scaling_weights(src_size, dst_size, 0.999f, 0.0f);
+
+       for (auto _ : state) {
+               ScalingWeights weights = calculate_scaling_weights(src_size, dst_size, 0.999f, 0.0f);
+       }
+
+       movit_texel_subpixel_precision = old_precision;
+}
+BENCHMARK(BM_ComputeScalingWeights)->Unit(benchmark::kMicrosecond);
+
 #endif
 
 }  // namespace movit