diff options
Diffstat (limited to 'chromium/media/base/audio_converter_perftest.cc')
-rw-r--r-- | chromium/media/base/audio_converter_perftest.cc | 79 |
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 |