summaryrefslogtreecommitdiff
path: root/chromium/media/base/audio_converter_perftest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/media/base/audio_converter_perftest.cc')
-rw-r--r--chromium/media/base/audio_converter_perftest.cc79
1 files changed, 79 insertions, 0 deletions
diff --git a/chromium/media/base/audio_converter_perftest.cc b/chromium/media/base/audio_converter_perftest.cc
new file mode 100644
index 00000000000..83f715e1100
--- /dev/null
+++ b/chromium/media/base/audio_converter_perftest.cc
@@ -0,0 +1,79 @@
+// Copyright 2013 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/time/time.h"
+#include "media/base/audio_converter.h"
+#include "media/base/fake_audio_render_callback.h"
+#include "testing/gtest/include/gtest/gtest.h"
+#include "testing/perf/perf_test.h"
+
+namespace media {
+
+static const int kBenchmarkIterations = 200000;
+
+// InputCallback that zero's out the provided AudioBus.
+class NullInputProvider : public AudioConverter::InputCallback {
+ public:
+ NullInputProvider() {}
+ virtual ~NullInputProvider() {}
+
+ virtual double ProvideInput(AudioBus* audio_bus,
+ base::TimeDelta buffer_delay) OVERRIDE {
+ audio_bus->Zero();
+ return 1;
+ }
+};
+
+void RunConvertBenchmark(const AudioParameters& in_params,
+ const AudioParameters& out_params,
+ bool fifo,
+ const std::string& trace_name) {
+ NullInputProvider fake_input1;
+ NullInputProvider fake_input2;
+ NullInputProvider fake_input3;
+ scoped_ptr<AudioBus> output_bus = AudioBus::Create(out_params);
+
+ AudioConverter converter(in_params, out_params, !fifo);
+ converter.AddInput(&fake_input1);
+ converter.AddInput(&fake_input2);
+ converter.AddInput(&fake_input3);
+
+ base::TimeTicks start = base::TimeTicks::HighResNow();
+ for (int i = 0; i < kBenchmarkIterations; ++i) {
+ converter.Convert(output_bus.get());
+ }
+ double runs_per_second = kBenchmarkIterations /
+ (base::TimeTicks::HighResNow() - start).InSecondsF();
+ perf_test::PrintResult(
+ "audio_converter", "", trace_name, runs_per_second, "runs/s", true);
+}
+
+TEST(AudioConverterPerfTest, ConvertBenchmark) {
+ // Create input and output parameters to convert between the two most common
+ // sets of parameters (as indicated via UMA data).
+ AudioParameters input_params(
+ AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, 48000, 16, 2048);
+ AudioParameters output_params(
+ AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, 44100, 16, 440);
+
+ RunConvertBenchmark(input_params, output_params, false, "convert");
+}
+
+TEST(AudioConverterPerfTest, ConvertBenchmarkFIFO) {
+ // Create input and output parameters to convert between common buffer sizes
+ // without any resampling for the FIFO vs no FIFO benchmarks.
+ AudioParameters input_params(AudioParameters::AUDIO_PCM_LINEAR,
+ CHANNEL_LAYOUT_STEREO,
+ 44100,
+ 16,
+ 2048);
+ AudioParameters output_params(
+ AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, 44100, 16, 440);
+
+ RunConvertBenchmark(input_params, output_params, true, "convert_fifo_only");
+ RunConvertBenchmark(input_params, output_params, false,
+ "convert_pass_through");
+}
+
+} // namespace media