diff options
author | Torne (Richard Coles) <torne@google.com> | 2013-05-13 16:52:09 +0100 |
---|---|---|
committer | Torne (Richard Coles) <torne@google.com> | 2013-05-13 16:52:09 +0100 |
commit | b2df76ea8fec9e32f6f3718986dba0d95315b29c (patch) | |
tree | 0182623e854b794f7307829abf4be16435a0193a /media/base/audio_converter_unittest.cc | |
parent | 121d6d4bf5931d9b1dbc0b9a262f6c609440f6c7 (diff) | |
download | chromium_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.cc | 118 |
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) { |