buffer_benchmark.cpp (1191B)
1 2 #include <benchmark/benchmark.h> 3 4 #include "dsp/buffer.hpp" 5 6 using namespace bogaudio::dsp; 7 8 struct BMOverlappingBuffer : OverlappingBuffer<float> { 9 BMOverlappingBuffer(int size, int o) : OverlappingBuffer(size, o) {} 10 void processBuffer(float* samples) override {} 11 }; 12 13 static void BM_Buffer_OverlappingBuffer(benchmark::State& state) { 14 BMOverlappingBuffer b(1024, 2); 15 int i = 0; 16 for (auto _ : state) { 17 b.step(i++); 18 } 19 } 20 BENCHMARK(BM_Buffer_OverlappingBuffer); 21 22 23 static void _averagingBuffer(benchmark::State& state, int n, int m) { 24 AveragingBuffer<float> b(n, m); 25 for (int i = 0; i < m; ++i) { 26 float* frame = b.getInputFrame(); 27 std::fill_n(frame, n, M_PI); 28 b.commitInputFrame(); 29 } 30 float pi = 0.0; 31 for (auto _ : state) { 32 b.getInputFrame(); 33 b.commitInputFrame(); 34 pi = b.getAverages()[0]; 35 } 36 const float e = 0.00001; 37 assert(pi > M_PI - e && pi < M_PI + e); 38 } 39 40 static void BM_Buffer_AveragingBufferSmallN(benchmark::State& state) { 41 _averagingBuffer(state, 1024, 3); 42 } 43 BENCHMARK(BM_Buffer_AveragingBufferSmallN); 44 45 static void BM_Buffer_AveragingBufferLargeN(benchmark::State& state) { 46 _averagingBuffer(state, 1024, 100); 47 } 48 BENCHMARK(BM_Buffer_AveragingBufferLargeN);