Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(709)

Unified Diff: media/base/audio_converter_unittest.cc

Issue 14189035: Reduce jitter from uneven SincResampler buffer size requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Comments. Created 7 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/base/audio_converter.cc ('k') | media/base/fake_audio_render_callback.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/base/audio_converter_unittest.cc
diff --git a/media/base/audio_converter_unittest.cc b/media/base/audio_converter_unittest.cc
index 95622c9c2bfc300169e4cc19175438e4cad08588..f693a6d03f54f438cfb6934718a95e70af1d4121 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) {
« no previous file with comments | « media/base/audio_converter.cc ('k') | media/base/fake_audio_render_callback.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698