summaryrefslogtreecommitdiff
path: root/media/base/audio_converter_unittest.cc
diff options
context:
space:
mode:
authorTorne (Richard Coles) <torne@google.com>2013-05-13 16:52:09 +0100
committerTorne (Richard Coles) <torne@google.com>2013-05-13 16:52:09 +0100
commitb2df76ea8fec9e32f6f3718986dba0d95315b29c (patch)
tree0182623e854b794f7307829abf4be16435a0193a /media/base/audio_converter_unittest.cc
parent121d6d4bf5931d9b1dbc0b9a262f6c609440f6c7 (diff)
downloadchromium_org-b2df76ea8fec9e32f6f3718986dba0d95315b29c.tar.gz
Merge from Chromium at DEPS revision r199464
This commit was generated by merge_to_master.py. Change-Id: Ic3d1f97a4fb4edd1e6ed66a70b5040da1622b5a9
Diffstat (limited to 'media/base/audio_converter_unittest.cc')
-rw-r--r--media/base/audio_converter_unittest.cc118
1 files changed, 83 insertions, 35 deletions
diff --git a/media/base/audio_converter_unittest.cc b/media/base/audio_converter_unittest.cc
index 95622c9c2b..f693a6d03f 100644
--- a/media/base/audio_converter_unittest.cc
+++ b/media/base/audio_converter_unittest.cc
@@ -234,6 +234,19 @@ TEST(AudioConverterTest, AudioDelay) {
callback.last_audio_delay_milliseconds());
}
+// InputCallback that zero's out the provided AudioBus. Used for benchmarking.
+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;
+ }
+};
+
// Benchmark for audio conversion. Original benchmarks were run with
// --audio-converter-iterations=50000.
TEST(AudioConverterTest, ConvertBenchmark) {
@@ -244,47 +257,82 @@ TEST(AudioConverterTest, ConvertBenchmark) {
if (benchmark_iterations < kDefaultIterations)
benchmark_iterations = kDefaultIterations;
- // Create input and output parameters to convert between the two most common
- // sets of parameters (as indicated via UMA data).
+ NullInputProvider fake_input1;
+ NullInputProvider fake_input2;
+ NullInputProvider fake_input3;
+
+ printf("Benchmarking %d iterations:\n", benchmark_iterations);
+
+ {
+ // 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);
+ scoped_ptr<AudioBus> output_bus = AudioBus::Create(output_params);
+
+ scoped_ptr<AudioConverter> converter(
+ new AudioConverter(input_params, output_params, true));
+ converter->AddInput(&fake_input1);
+ converter->AddInput(&fake_input2);
+ converter->AddInput(&fake_input3);
+
+ // Benchmark Convert() w/ FIFO.
+ base::TimeTicks start = base::TimeTicks::HighResNow();
+ for (int i = 0; i < benchmark_iterations; ++i) {
+ converter->Convert(output_bus.get());
+ }
+ double total_time_ms =
+ (base::TimeTicks::HighResNow() - start).InMillisecondsF();
+ printf("Convert() w/ Resampling took %.2fms.\n", total_time_ms);
+ }
+
+ // 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_MONO, 48000, 16, 2048);
+ AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO,
+ 44100, 16, 2048);
AudioParameters output_params(
- AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, 44100, 16, 440);
- scoped_ptr<AudioConverter> converter(
- new AudioConverter(input_params, output_params, false));
-
+ AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO,
+ 44100, 16, 440);
scoped_ptr<AudioBus> output_bus = AudioBus::Create(output_params);
- FakeAudioRenderCallback fake_input1(0.2);
- FakeAudioRenderCallback fake_input2(0.4);
- FakeAudioRenderCallback fake_input3(0.6);
- converter->AddInput(&fake_input1);
- converter->AddInput(&fake_input2);
- converter->AddInput(&fake_input3);
-
- printf("Benchmarking %d iterations:\n", benchmark_iterations);
- // Benchmark Convert() w/ FIFO.
- base::TimeTicks start = base::TimeTicks::HighResNow();
- for (int i = 0; i < benchmark_iterations; ++i) {
- converter->Convert(output_bus.get());
+ {
+ scoped_ptr<AudioConverter> converter(
+ new AudioConverter(input_params, output_params, false));
+ converter->AddInput(&fake_input1);
+ converter->AddInput(&fake_input2);
+ converter->AddInput(&fake_input3);
+
+ // Benchmark Convert() w/ FIFO.
+ base::TimeTicks start = base::TimeTicks::HighResNow();
+ for (int i = 0; i < benchmark_iterations; ++i) {
+ converter->Convert(output_bus.get());
+ }
+ double total_time_ms =
+ (base::TimeTicks::HighResNow() - start).InMillisecondsF();
+ printf("Convert() w/ FIFO took %.2fms.\n", total_time_ms);
}
- double total_time_ms =
- (base::TimeTicks::HighResNow() - start).InMillisecondsF();
- printf("Convert() w/ FIFO took %.2fms.\n", total_time_ms);
-
- converter.reset(new AudioConverter(input_params, output_params, true));
- converter->AddInput(&fake_input1);
- converter->AddInput(&fake_input2);
- converter->AddInput(&fake_input3);
-
- // Benchmark Convert() w/o FIFO.
- start = base::TimeTicks::HighResNow();
- for (int i = 0; i < benchmark_iterations; ++i) {
- converter->Convert(output_bus.get());
+
+ {
+ scoped_ptr<AudioConverter> converter(
+ new AudioConverter(input_params, output_params, true));
+ converter->AddInput(&fake_input1);
+ converter->AddInput(&fake_input2);
+ converter->AddInput(&fake_input3);
+
+ // Benchmark Convert() w/o FIFO.
+ base::TimeTicks start = base::TimeTicks::HighResNow();
+ for (int i = 0; i < benchmark_iterations; ++i) {
+ converter->Convert(output_bus.get());
+ }
+ double total_time_ms =
+ (base::TimeTicks::HighResNow() - start).InMillisecondsF();
+ printf("Convert() w/o FIFO took %.2fms.\n", total_time_ms);
}
- total_time_ms =
- (base::TimeTicks::HighResNow() - start).InMillisecondsF();
- printf("Convert() w/o FIFO took %.2fms.\n", total_time_ms);
}
TEST_P(AudioConverterTest, NoInputs) {