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

Side by Side Diff: content/renderer/media/renderer_webaudiodevice_impl_unittest.cc

Issue 2501863003: Support for AudioContextOptions latencyHint. (Closed)
Patch Set: Fixes to WebAudioDeviceImpl unit test. Created 3 years, 10 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 unified diff | Download patch
OLDNEW
(Empty)
1 // Copyright 2016 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 "content/renderer/media/renderer_webaudiodevice_impl.h"
6
7 #include "base/bind.h"
8 #include "base/message_loop/message_loop.h"
9 #include "build/build_config.h"
10 #include "content/renderer/media/audio_device_factory.h"
11 #include "media/base/audio_capturer_source.h"
12 #include "media/base/mock_audio_renderer_sink.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 using testing::_;
17
18 namespace content {
19
20 namespace {
21
22 const int kHardwareSampleRate = 44100;
23 const int kHardwareBufferSize = 128;
24 const int kRenderFrameId = 100;
25
26 int MockFrameIdFromCurrentContext() {
27 return kRenderFrameId;
28 }
29
30 media::AudioParameters MockGetOutputDeviceParameters(
31 int frame_id,
32 int session_id,
33 const std::string& device_id,
34 const url::Origin& security_origin) {
35 return media::AudioParameters(media::AudioParameters::AUDIO_PCM_LOW_LATENCY,
36 media::CHANNEL_LAYOUT_STEREO,
37 kHardwareSampleRate, 16, kHardwareBufferSize);
38 }
39
40 class RendererWebAudioDeviceImplUnderTest : public RendererWebAudioDeviceImpl {
41 public:
42 RendererWebAudioDeviceImplUnderTest(
43 media::ChannelLayout layout,
44 const blink::WebAudioLatencyHint& latency_hint,
45 blink::WebAudioDevice::RenderCallback* callback,
46 int session_id,
47 const url::Origin& security_origin)
48 : RendererWebAudioDeviceImpl(layout,
49 latency_hint,
50 callback,
51 session_id,
52 security_origin,
53 base::Bind(&MockGetOutputDeviceParameters),
54 base::Bind(&MockFrameIdFromCurrentContext)) {
55 }
56 };
57
58 } // namespace
59
60 class RendererWebAudioDeviceImplTest
61 : public blink::WebAudioDevice::RenderCallback,
62 public AudioDeviceFactory,
63 public testing::Test {
64 protected:
65 RendererWebAudioDeviceImplTest() {}
66
67 void SetupDevice(blink::WebAudioLatencyHint latencyHint) {
68 webaudio_device_.reset(new RendererWebAudioDeviceImplUnderTest(
69 media::CHANNEL_LAYOUT_MONO, latencyHint, this, 0, url::Origin()));
70 webaudio_device_->SetMediaTaskRunnerForTesting(message_loop_.task_runner());
71 }
72
73 MOCK_METHOD1(CreateAudioCapturerSource,
74 scoped_refptr<media::AudioCapturerSource>(int));
75 MOCK_METHOD4(CreateFinalAudioRendererSink,
76 scoped_refptr<media::AudioRendererSink>(int,
77 int,
78 const std::string&,
79 const url::Origin&));
80 MOCK_METHOD5(
81 CreateSwitchableAudioRendererSink,
82 scoped_refptr<media::SwitchableAudioRendererSink>(SourceType,
83 int,
84 int,
85 const std::string&,
86 const url::Origin&));
87
88 scoped_refptr<media::AudioRendererSink> CreateAudioRendererSink(
89 SourceType source_type,
90 int render_frame_id,
91 int session_id,
92 const std::string& device_id,
93 const url::Origin& security_origin) {
94 scoped_refptr<media::MockAudioRendererSink> mock_sink =
95 new media::MockAudioRendererSink(
96 device_id, media::OUTPUT_DEVICE_STATUS_OK,
97 MockGetOutputDeviceParameters(render_frame_id, session_id,
98 device_id, security_origin));
99
100 EXPECT_CALL(*mock_sink.get(), Start());
101 EXPECT_CALL(*mock_sink.get(), Play());
102 EXPECT_CALL(*mock_sink.get(), Stop());
103
104 return mock_sink;
105 }
106
107 void TearDown() override { webaudio_device_.reset(); }
108
109 std::unique_ptr<RendererWebAudioDeviceImpl> webaudio_device_;
110 base::MessageLoop message_loop_;
111 };
112
113 TEST_F(RendererWebAudioDeviceImplTest, TestLatencyHintValues) {
114 blink::WebAudioLatencyHint interactiveLatencyHint(
115 blink::WebAudioLatencyHint::kCategoryInteractive);
116 int interactiveBufferSize =
117 media::AudioLatency::GetInteractiveBufferSize(kHardwareBufferSize);
118 SetupDevice(interactiveLatencyHint);
119
120 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
121 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize);
122
123 webaudio_device_->start();
124 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
125 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize);
126
127 webaudio_device_->stop();
128 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
129 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize);
130
131 webaudio_device_->start();
132 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
133 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize);
134
135 webaudio_device_->stop();
136 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
137 EXPECT_EQ(webaudio_device_->framesPerBuffer(), interactiveBufferSize);
138
139 blink::WebAudioLatencyHint balancedLatencyHint(
140 blink::WebAudioLatencyHint::kCategoryBalanced);
141 int balancedBufferSize = media::AudioLatency::GetRtcBufferSize(
142 kHardwareSampleRate, kHardwareBufferSize);
143 SetupDevice(balancedLatencyHint);
144
145 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
146 EXPECT_EQ(webaudio_device_->framesPerBuffer(), balancedBufferSize);
147
148 webaudio_device_->start();
149 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
150 EXPECT_EQ(webaudio_device_->framesPerBuffer(), balancedBufferSize);
151
152 webaudio_device_->stop();
153 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
154 EXPECT_EQ(webaudio_device_->framesPerBuffer(), balancedBufferSize);
155
156 webaudio_device_->start();
157 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
158 EXPECT_EQ(webaudio_device_->framesPerBuffer(), balancedBufferSize);
159
160 webaudio_device_->stop();
161 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
162 EXPECT_EQ(webaudio_device_->framesPerBuffer(), balancedBufferSize);
163
164 blink::WebAudioLatencyHint playbackLatencyHint(
165 blink::WebAudioLatencyHint::kCategoryPlayback);
166 int playbackBufferSize =
167 media::AudioLatency::GetHighLatencyBufferSize(kHardwareSampleRate, 0);
168 SetupDevice(playbackLatencyHint);
169
170 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
171 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize);
172
173 webaudio_device_->start();
174 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
175 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize);
176
177 webaudio_device_->stop();
178 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
179 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize);
180
181 webaudio_device_->start();
182 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
183 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize);
184
185 webaudio_device_->stop();
186 EXPECT_EQ(webaudio_device_->sampleRate(), kHardwareSampleRate);
187 EXPECT_EQ(webaudio_device_->framesPerBuffer(), playbackBufferSize);
188
189 #if !defined(OS_ANDROID)
190 EXPECT_GE(playbackBufferSize, balancedBufferSize);
191 EXPECT_GE(balancedBufferSize, interactiveBufferSize);
192 #endif
193 }
194
195 } // namespace content
OLDNEW
« no previous file with comments | « content/renderer/media/renderer_webaudiodevice_impl.cc ('k') | content/renderer/renderer_blink_platform_impl.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698