diff --git a/benchmarks/BM_powerFollower.cpp b/benchmarks/BM_powerFollower.cpp new file mode 100644 index 00000000..4358f596 --- /dev/null +++ b/benchmarks/BM_powerFollower.cpp @@ -0,0 +1,60 @@ +// SPDX-License-Identifier: BSD-2-Clause + +// This code is part of the sfizz library and is licensed under a BSD 2-clause +// license. You should have receive a LICENSE.md file along with the code. +// If not, contact the sfizz maintainers at https://github.com/sfztools/sfizz + +#include "PowerFollower.h" +#include "AudioBuffer.h" +#include "Config.h" +#include +#include + +class PowerFollowerFixture : public benchmark::Fixture { +public: + PowerFollowerFixture() + { + inputSignal_ = sfz::AudioBuffer(2, numFrames); + auto leftSignal = inputSignal_.getSpan(0); + auto rightSignal = inputSignal_.getSpan(1); + float phase = 0; + for (size_t i = 0; i < numFrames; ++i) { + constexpr float k2pi = 2.0 * M_PI; + leftSignal[i] = std::sin(k2pi * phase); + rightSignal[i] = std::cos(k2pi * phase); + phase += 440.0f / sfz::config::defaultSampleRate; + phase -= static_cast(phase); + } + } + + void SetUp(const ::benchmark::State& state) + { + auto blockSize = static_cast(state.range(0)); + follower_.setSampleRate(sfz::config::defaultSampleRate); + follower_.setSamplesPerBlock(blockSize); + follower_.clear(); + } + + void TearDown(const ::benchmark::State& /* state */) + { + } + + static constexpr size_t numFrames = 65536; + sfz::PowerFollower follower_; + sfz::AudioBuffer inputSignal_; +}; + +constexpr size_t PowerFollowerFixture::numFrames; + +BENCHMARK_DEFINE_F(PowerFollowerFixture, Follower) (benchmark::State& state) +{ + sfz::AudioSpan inputSignal(inputSignal_); + for (auto _ : state) { + auto& follower = follower_; + auto blockSize = static_cast(state.range(0)); + for (size_t i = 0; i < numFrames; i += blockSize) + follower.process(inputSignal.subspan(i, blockSize)); + } +} + +BENCHMARK_REGISTER_F(PowerFollowerFixture, Follower)->RangeMultiplier(2)->Range(1 << 5, 1 << 12); diff --git a/benchmarks/CMakeLists.txt b/benchmarks/CMakeLists.txt index 71fd0b14..4efb3d82 100644 --- a/benchmarks/CMakeLists.txt +++ b/benchmarks/CMakeLists.txt @@ -66,6 +66,8 @@ sfizz_add_benchmark(bm_logger BM_logger.cpp) target_link_libraries(bm_logger PRIVATE sfizz::sfizz) sfizz_add_benchmark(bm_smoothers BM_smoothers.cpp) target_link_libraries(bm_smoothers PRIVATE sfizz::sfizz) +sfizz_add_benchmark(bm_powerFollower BM_powerFollower.cpp) +target_link_libraries(bm_powerFollower PRIVATE sfizz::sfizz) if (TARGET sfizz-samplerate) sfizz_add_benchmark(bm_resample BM_resample.cpp ${BENCHMARK_SIMD_SOURCES})