You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2KB

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