- add sources.
[platform/framework/web/crosswalk.git] / src / media / base / audio_converter_perftest.cc
1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/time/time.h"
6 #include "media/base/audio_converter.h"
7 #include "media/base/fake_audio_render_callback.h"
8 #include "testing/gtest/include/gtest/gtest.h"
9 #include "testing/perf/perf_test.h"
10
11 namespace media {
12
13 static const int kBenchmarkIterations = 500000;
14
15 // InputCallback that zero's out the provided AudioBus.
16 class NullInputProvider : public AudioConverter::InputCallback {
17  public:
18   NullInputProvider() {}
19   virtual ~NullInputProvider() {}
20
21   virtual double ProvideInput(AudioBus* audio_bus,
22                               base::TimeDelta buffer_delay) OVERRIDE {
23     audio_bus->Zero();
24     return 1;
25   }
26 };
27
28 void RunConvertBenchmark(const AudioParameters& in_params,
29                          const AudioParameters& out_params,
30                          bool fifo,
31                          const std::string& trace_name) {
32   NullInputProvider fake_input1;
33   NullInputProvider fake_input2;
34   NullInputProvider fake_input3;
35   scoped_ptr<AudioBus> output_bus = AudioBus::Create(out_params);
36
37   AudioConverter converter(in_params, out_params, !fifo);
38   converter.AddInput(&fake_input1);
39   converter.AddInput(&fake_input2);
40   converter.AddInput(&fake_input3);
41
42   base::TimeTicks start = base::TimeTicks::HighResNow();
43   for (int i = 0; i < kBenchmarkIterations; ++i) {
44     converter.Convert(output_bus.get());
45   }
46   double runs_per_second = kBenchmarkIterations /
47                            (base::TimeTicks::HighResNow() - start).InSecondsF();
48   perf_test::PrintResult(
49       "audio_converter", "", trace_name, runs_per_second, "runs/s", true);
50 }
51
52 TEST(AudioConverterPerfTest, ConvertBenchmark) {
53   // Create input and output parameters to convert between the two most common
54   // sets of parameters (as indicated via UMA data).
55   AudioParameters input_params(
56       AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, 48000, 16, 2048);
57   AudioParameters output_params(
58       AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, 44100, 16, 440);
59
60   RunConvertBenchmark(input_params, output_params, false, "convert");
61 }
62
63 TEST(AudioConverterPerfTest, ConvertBenchmarkFIFO) {
64   // Create input and output parameters to convert between common buffer sizes
65   // without any resampling for the FIFO vs no FIFO benchmarks.
66   AudioParameters input_params(AudioParameters::AUDIO_PCM_LINEAR,
67                                CHANNEL_LAYOUT_STEREO,
68                                44100,
69                                16,
70                                2048);
71   AudioParameters output_params(
72       AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_STEREO, 44100, 16, 440);
73
74   RunConvertBenchmark(input_params, output_params, true, "convert_fifo_only");
75   RunConvertBenchmark(input_params, output_params, false,
76                       "convert_pass_through");
77 }
78
79 } // namespace media