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

Side by Side Diff: media/audio/audio_output_controller_unittest.cc

Issue 4661001: Simplified AudioOutputStream interface. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: - Created 10 years, 1 month 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 | Annotate | Revision Log
« no previous file with comments | « media/audio/audio_output_controller.cc ('k') | media/audio/audio_parameters.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/environment.h" 5 #include "base/environment.h"
6 #include "base/basictypes.h" 6 #include "base/basictypes.h"
7 #include "base/logging.h" 7 #include "base/logging.h"
8 #include "base/task.h" 8 #include "base/task.h"
9 #include "base/waitable_event.h" 9 #include "base/waitable_event.h"
10 #include "media/audio/audio_output_controller.h" 10 #include "media/audio/audio_output_controller.h"
11 #include "testing/gmock/include/gmock/gmock.h" 11 #include "testing/gmock/include/gmock/gmock.h"
12 #include "testing/gtest/include/gtest/gtest.h" 12 #include "testing/gtest/include/gtest/gtest.h"
13 13
14 using ::testing::_; 14 using ::testing::_;
15 using ::testing::AtLeast; 15 using ::testing::AtLeast;
16 using ::testing::Exactly; 16 using ::testing::Exactly;
17 using ::testing::InvokeWithoutArgs; 17 using ::testing::InvokeWithoutArgs;
18 using ::testing::NotNull; 18 using ::testing::NotNull;
19 using ::testing::Return; 19 using ::testing::Return;
20 20
21 static const int kSampleRate = AudioParameters::kAudioCDSampleRate; 21 static const int kSampleRate = AudioParameters::kAudioCDSampleRate;
22 static const int kBitsPerSample = 16; 22 static const int kBitsPerSample = 16;
23 static const int kChannels = 2; 23 static const int kChannels = 2;
24 static const int kHardwareBufferSize = kSampleRate * kBitsPerSample * 24 static const int kSamplesPerPacket = kSampleRate / 10;
25 kChannels / 8; 25 static const int kHardwareBufferSize = kSamplesPerPacket * kChannels *
26 kBitsPerSample / 8;
26 static const int kBufferCapacity = 3 * kHardwareBufferSize; 27 static const int kBufferCapacity = 3 * kHardwareBufferSize;
27 28
28 namespace media { 29 namespace media {
29 30
30 class MockAudioOutputControllerEventHandler 31 class MockAudioOutputControllerEventHandler
31 : public AudioOutputController::EventHandler { 32 : public AudioOutputController::EventHandler {
32 public: 33 public:
33 MockAudioOutputControllerEventHandler() {} 34 MockAudioOutputControllerEventHandler() {}
34 35
35 MOCK_METHOD1(OnCreated, void(AudioOutputController* controller)); 36 MOCK_METHOD1(OnCreated, void(AudioOutputController* controller));
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
90 if (!HasAudioOutputDevices() || IsRunningHeadless()) 91 if (!HasAudioOutputDevices() || IsRunningHeadless())
91 return; 92 return;
92 93
93 MockAudioOutputControllerEventHandler event_handler; 94 MockAudioOutputControllerEventHandler event_handler;
94 95
95 EXPECT_CALL(event_handler, OnCreated(NotNull())) 96 EXPECT_CALL(event_handler, OnCreated(NotNull()))
96 .Times(1); 97 .Times(1);
97 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _)); 98 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _));
98 99
99 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels, 100 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels,
100 kSampleRate, kBitsPerSample); 101 kSampleRate, kBitsPerSample, kSamplesPerPacket);
101 scoped_refptr<AudioOutputController> controller = 102 scoped_refptr<AudioOutputController> controller =
102 AudioOutputController::Create(&event_handler, params, 103 AudioOutputController::Create(&event_handler, params, kBufferCapacity);
103 kHardwareBufferSize, kBufferCapacity);
104 ASSERT_TRUE(controller.get()); 104 ASSERT_TRUE(controller.get());
105 105
106 // Close the controller immediately. 106 // Close the controller immediately.
107 CloseAudioController(controller); 107 CloseAudioController(controller);
108 } 108 }
109 109
110 TEST(AudioOutputControllerTest, PlayAndClose) { 110 TEST(AudioOutputControllerTest, PlayAndClose) {
111 if (!HasAudioOutputDevices() || IsRunningHeadless()) 111 if (!HasAudioOutputDevices() || IsRunningHeadless())
112 return; 112 return;
113 113
114 MockAudioOutputControllerEventHandler event_handler; 114 MockAudioOutputControllerEventHandler event_handler;
115 base::WaitableEvent event(false, false); 115 base::WaitableEvent event(false, false);
116 116
117 // If OnCreated is called then signal the event. 117 // If OnCreated is called then signal the event.
118 EXPECT_CALL(event_handler, OnCreated(NotNull())) 118 EXPECT_CALL(event_handler, OnCreated(NotNull()))
119 .WillOnce(SignalEvent(&event)); 119 .WillOnce(SignalEvent(&event));
120 120
121 // OnPlaying() will be called only once. 121 // OnPlaying() will be called only once.
122 EXPECT_CALL(event_handler, OnPlaying(NotNull())) 122 EXPECT_CALL(event_handler, OnPlaying(NotNull()))
123 .Times(Exactly(1)); 123 .Times(Exactly(1));
124 124
125 // If OnMoreData is called enough then signal the event. 125 // If OnMoreData is called enough then signal the event.
126 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _)) 126 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _))
127 .Times(AtLeast(10)) 127 .Times(AtLeast(10))
128 .WillRepeatedly(SignalEvent(&event)); 128 .WillRepeatedly(SignalEvent(&event));
129 129
130 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels, 130 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels,
131 kSampleRate, kBitsPerSample); 131 kSampleRate, kBitsPerSample, kSamplesPerPacket);
132 scoped_refptr<AudioOutputController> controller = 132 scoped_refptr<AudioOutputController> controller =
133 AudioOutputController::Create(&event_handler, params, 133 AudioOutputController::Create(&event_handler, params, kBufferCapacity);
134 kHardwareBufferSize, kBufferCapacity);
135 ASSERT_TRUE(controller.get()); 134 ASSERT_TRUE(controller.get());
136 135
137 // Wait for OnCreated() to be called. 136 // Wait for OnCreated() to be called.
138 event.Wait(); 137 event.Wait();
139 138
140 controller->Play(); 139 controller->Play();
141 140
142 // Wait until the date is requested at least 10 times. 141 // Wait until the date is requested at least 10 times.
143 for (int i = 0; i < 10; i++) { 142 for (int i = 0; i < 10; i++) {
144 event.Wait(); 143 event.Wait();
(...skipping 26 matching lines...) Expand all
171 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _)) 170 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _))
172 .Times(AtLeast(10)) 171 .Times(AtLeast(10))
173 .WillRepeatedly(SignalEvent(&event)); 172 .WillRepeatedly(SignalEvent(&event));
174 173
175 // And then OnPaused() will be called. 174 // And then OnPaused() will be called.
176 EXPECT_CALL(event_handler, OnPaused(NotNull())) 175 EXPECT_CALL(event_handler, OnPaused(NotNull()))
177 .Times(Exactly(1)) 176 .Times(Exactly(1))
178 .WillOnce(InvokeWithoutArgs(&pause_event, &base::WaitableEvent::Signal)); 177 .WillOnce(InvokeWithoutArgs(&pause_event, &base::WaitableEvent::Signal));
179 178
180 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels, 179 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels,
181 kSampleRate, kBitsPerSample); 180 kSampleRate, kBitsPerSample, kSamplesPerPacket);
182 scoped_refptr<AudioOutputController> controller = 181 scoped_refptr<AudioOutputController> controller =
183 AudioOutputController::Create(&event_handler, params, 182 AudioOutputController::Create(&event_handler, params, kBufferCapacity);
184 kHardwareBufferSize, kBufferCapacity);
185 ASSERT_TRUE(controller.get()); 183 ASSERT_TRUE(controller.get());
186 184
187 // Wait for OnCreated() to be called. 185 // Wait for OnCreated() to be called.
188 event.Wait(); 186 event.Wait();
189 187
190 controller->Play(); 188 controller->Play();
191 189
192 // Wait until the date is requested at least 10 times. 190 // Wait until the date is requested at least 10 times.
193 for (int i = 0; i < 10; i++) { 191 for (int i = 0; i < 10; i++) {
194 event.Wait(); 192 event.Wait();
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
232 EXPECT_CALL(event_handler, OnPaused(NotNull())) 230 EXPECT_CALL(event_handler, OnPaused(NotNull()))
233 .Times(Exactly(1)) 231 .Times(Exactly(1))
234 .WillOnce(InvokeWithoutArgs(&pause_event, &base::WaitableEvent::Signal)); 232 .WillOnce(InvokeWithoutArgs(&pause_event, &base::WaitableEvent::Signal));
235 233
236 // OnPlaying() will be called only once. 234 // OnPlaying() will be called only once.
237 EXPECT_CALL(event_handler, OnPlaying(NotNull())) 235 EXPECT_CALL(event_handler, OnPlaying(NotNull()))
238 .Times(Exactly(1)) 236 .Times(Exactly(1))
239 .RetiresOnSaturation(); 237 .RetiresOnSaturation();
240 238
241 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels, 239 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels,
242 kSampleRate, kBitsPerSample); 240 kSampleRate, kBitsPerSample, kSamplesPerPacket);
243 scoped_refptr<AudioOutputController> controller = 241 scoped_refptr<AudioOutputController> controller =
244 AudioOutputController::Create(&event_handler, params, 242 AudioOutputController::Create(&event_handler, params, kBufferCapacity);
245 kHardwareBufferSize, kBufferCapacity);
246 ASSERT_TRUE(controller.get()); 243 ASSERT_TRUE(controller.get());
247 244
248 // Wait for OnCreated() to be called. 245 // Wait for OnCreated() to be called.
249 event.Wait(); 246 event.Wait();
250 247
251 controller->Play(); 248 controller->Play();
252 249
253 // Wait until the date is requested at least 10 times. 250 // Wait until the date is requested at least 10 times.
254 for (int i = 0; i < 10; i++) { 251 for (int i = 0; i < 10; i++) {
255 event.Wait(); 252 event.Wait();
(...skipping 20 matching lines...) Expand all
276 CloseAudioController(controller); 273 CloseAudioController(controller);
277 } 274 }
278 275
279 TEST(AudioOutputControllerTest, HardwareBufferTooLarge) { 276 TEST(AudioOutputControllerTest, HardwareBufferTooLarge) {
280 if (!HasAudioOutputDevices() || IsRunningHeadless()) 277 if (!HasAudioOutputDevices() || IsRunningHeadless())
281 return; 278 return;
282 279
283 // Create an audio device with a very large hardware buffer size. 280 // Create an audio device with a very large hardware buffer size.
284 MockAudioOutputControllerEventHandler event_handler; 281 MockAudioOutputControllerEventHandler event_handler;
285 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels, 282 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels,
286 kSampleRate, kBitsPerSample); 283 kSampleRate, kBitsPerSample,
284 kSamplesPerPacket * 1000);
287 scoped_refptr<AudioOutputController> controller = 285 scoped_refptr<AudioOutputController> controller =
288 AudioOutputController::Create(&event_handler, params, 286 AudioOutputController::Create(&event_handler, params,
289 kHardwareBufferSize * 1000,
290 kBufferCapacity); 287 kBufferCapacity);
291 288
292 // Use assert because we don't stop the device and assume we can't 289 // Use assert because we don't stop the device and assume we can't
293 // create one. 290 // create one.
294 ASSERT_FALSE(controller); 291 ASSERT_FALSE(controller);
295 } 292 }
296 293
297 TEST(AudioOutputControllerTest, CloseTwice) { 294 TEST(AudioOutputControllerTest, CloseTwice) {
298 if (!HasAudioOutputDevices() || IsRunningHeadless()) 295 if (!HasAudioOutputDevices() || IsRunningHeadless())
299 return; 296 return;
300 297
301 MockAudioOutputControllerEventHandler event_handler; 298 MockAudioOutputControllerEventHandler event_handler;
302 base::WaitableEvent event(false, false); 299 base::WaitableEvent event(false, false);
303 300
304 // If OnCreated is called then signal the event. 301 // If OnCreated is called then signal the event.
305 EXPECT_CALL(event_handler, OnCreated(NotNull())) 302 EXPECT_CALL(event_handler, OnCreated(NotNull()))
306 .WillOnce(SignalEvent(&event)); 303 .WillOnce(SignalEvent(&event));
307 304
308 // One OnMoreData() is expected. 305 // One OnMoreData() is expected.
309 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _)) 306 EXPECT_CALL(event_handler, OnMoreData(NotNull(), _))
310 .Times(AtLeast(1)) 307 .Times(AtLeast(1))
311 .WillRepeatedly(SignalEvent(&event)); 308 .WillRepeatedly(SignalEvent(&event));
312 309
313 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels, 310 AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR, kChannels,
314 kSampleRate, kBitsPerSample); 311 kSampleRate, kBitsPerSample, kSamplesPerPacket);
315 scoped_refptr<AudioOutputController> controller = 312 scoped_refptr<AudioOutputController> controller =
316 AudioOutputController::Create(&event_handler, params, 313 AudioOutputController::Create(&event_handler, params, kBufferCapacity);
317 kHardwareBufferSize, kBufferCapacity);
318 ASSERT_TRUE(controller.get()); 314 ASSERT_TRUE(controller.get());
319 315
320 // Wait for OnCreated() to be called. 316 // Wait for OnCreated() to be called.
321 event.Wait(); 317 event.Wait();
322 318
323 // Wait for OnMoreData() to be called. 319 // Wait for OnMoreData() to be called.
324 event.Wait(); 320 event.Wait();
325 321
326 base::WaitableEvent closed_event_1(true, false); 322 base::WaitableEvent closed_event_1(true, false);
327 controller->Close(NewRunnableFunction(&SignalClosedEvent, &closed_event_1)); 323 controller->Close(NewRunnableFunction(&SignalClosedEvent, &closed_event_1));
328 324
329 base::WaitableEvent closed_event_2(true, false); 325 base::WaitableEvent closed_event_2(true, false);
330 controller->Close(NewRunnableFunction(&SignalClosedEvent, &closed_event_2)); 326 controller->Close(NewRunnableFunction(&SignalClosedEvent, &closed_event_2));
331 327
332 closed_event_1.Wait(); 328 closed_event_1.Wait();
333 closed_event_2.Wait(); 329 closed_event_2.Wait();
334 } 330 }
335 331
336 } // namespace media 332 } // namespace media
OLDNEW
« no previous file with comments | « media/audio/audio_output_controller.cc ('k') | media/audio/audio_parameters.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698