BogaudioModules

BogaudioModules for VCV Rack
Log | Files | Refs | README | LICENSE

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);