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

Side by Side Diff: media/audio/alsa/alsa_output_unittest.cc

Issue 1302233003: Replace gmock's deprecated SetArgumentPointee with SetArgPointee. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: 2017 Created 3 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 unified diff | Download patch
« no previous file with comments | « gpu/command_buffer/service/test_helper.cc ('k') | media/audio/cras/cras_unified_unittest.cc » ('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 2013 The Chromium Authors. All rights reserved. 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 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 <stdint.h> 5 #include <stdint.h>
6 6
7 #include "base/macros.h" 7 #include "base/macros.h"
8 #include "base/memory/ptr_util.h" 8 #include "base/memory/ptr_util.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/strings/stringprintf.h" 10 #include "base/strings/stringprintf.h"
(...skipping 16 matching lines...) Expand all
27 using testing::AllOf; 27 using testing::AllOf;
28 using testing::AtLeast; 28 using testing::AtLeast;
29 using testing::DoAll; 29 using testing::DoAll;
30 using testing::Field; 30 using testing::Field;
31 using testing::InSequence; 31 using testing::InSequence;
32 using testing::Invoke; 32 using testing::Invoke;
33 using testing::InvokeWithoutArgs; 33 using testing::InvokeWithoutArgs;
34 using testing::Mock; 34 using testing::Mock;
35 using testing::MockFunction; 35 using testing::MockFunction;
36 using testing::Return; 36 using testing::Return;
37 using testing::SetArgumentPointee; 37 using testing::SetArgPointee;
38 using testing::StrictMock; 38 using testing::StrictMock;
39 using testing::StrEq; 39 using testing::StrEq;
40 using testing::Unused; 40 using testing::Unused;
41 41
42 namespace media { 42 namespace media {
43 43
44 class MockAlsaWrapper : public AlsaWrapper { 44 class MockAlsaWrapper : public AlsaWrapper {
45 public: 45 public:
46 MOCK_METHOD3(DeviceNameHint, int(int card, 46 MOCK_METHOD3(DeviceNameHint, int(int card,
47 const char* iface, 47 const char* iface,
(...skipping 204 matching lines...) Expand 10 before | Expand all | Expand 10 after
252 TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) { 252 TEST_F(AlsaPcmOutputStreamTest, LatencyFloor) {
253 const double kMicrosPerFrame = 253 const double kMicrosPerFrame =
254 static_cast<double>(1000000) / kTestSampleRate; 254 static_cast<double>(1000000) / kTestSampleRate;
255 const double kPacketFramesInMinLatency = 255 const double kPacketFramesInMinLatency =
256 AlsaPcmOutputStream::kMinLatencyMicros / kMicrosPerFrame / 2.0; 256 AlsaPcmOutputStream::kMinLatencyMicros / kMicrosPerFrame / 2.0;
257 257
258 // Test that packets which would cause a latency under less than 258 // Test that packets which would cause a latency under less than
259 // AlsaPcmOutputStream::kMinLatencyMicros will get clipped to 259 // AlsaPcmOutputStream::kMinLatencyMicros will get clipped to
260 // AlsaPcmOutputStream::kMinLatencyMicros, 260 // AlsaPcmOutputStream::kMinLatencyMicros,
261 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _)) 261 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _))
262 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), 262 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
263 Return(0)));
264 EXPECT_CALL(mock_alsa_wrapper_, 263 EXPECT_CALL(mock_alsa_wrapper_,
265 PcmSetParams(_, _, _, _, _, _, 264 PcmSetParams(_, _, _, _, _, _,
266 AlsaPcmOutputStream::kMinLatencyMicros)) 265 AlsaPcmOutputStream::kMinLatencyMicros))
267 .WillOnce(Return(0)); 266 .WillOnce(Return(0));
268 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _)) 267 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _))
269 .WillOnce(DoAll(SetArgumentPointee<1>(kTestFramesPerPacket), 268 .WillOnce(DoAll(SetArgPointee<1>(kTestFramesPerPacket),
270 SetArgumentPointee<2>(kTestFramesPerPacket / 2), 269 SetArgPointee<2>(kTestFramesPerPacket / 2), Return(0)));
271 Return(0)));
272 270
273 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout, 271 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout,
274 kPacketFramesInMinLatency); 272 kPacketFramesInMinLatency);
275 ASSERT_TRUE(test_stream->Open()); 273 ASSERT_TRUE(test_stream->Open());
276 274
277 // Now close it and test that everything was released. 275 // Now close it and test that everything was released.
278 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)).WillOnce(Return(0)); 276 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)).WillOnce(Return(0));
279 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) 277 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
280 .WillOnce(Return(kTestDeviceName)); 278 .WillOnce(Return(kTestDeviceName));
281 test_stream->Close(); 279 test_stream->Close();
282 280
283 Mock::VerifyAndClear(&mock_alsa_wrapper_); 281 Mock::VerifyAndClear(&mock_alsa_wrapper_);
284 Mock::VerifyAndClear(mock_manager_.get()); 282 Mock::VerifyAndClear(mock_manager_.get());
285 283
286 // Test that having more packets ends up with a latency based on packet size. 284 // Test that having more packets ends up with a latency based on packet size.
287 const int kOverMinLatencyPacketSize = kPacketFramesInMinLatency + 1; 285 const int kOverMinLatencyPacketSize = kPacketFramesInMinLatency + 1;
288 int64_t expected_micros = AudioTimestampHelper::FramesToTime( 286 int64_t expected_micros = AudioTimestampHelper::FramesToTime(
289 kOverMinLatencyPacketSize * 2, kTestSampleRate) 287 kOverMinLatencyPacketSize * 2, kTestSampleRate)
290 .InMicroseconds(); 288 .InMicroseconds();
291 289
292 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _)) 290 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _))
293 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), Return(0))); 291 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
294 EXPECT_CALL(mock_alsa_wrapper_, 292 EXPECT_CALL(mock_alsa_wrapper_,
295 PcmSetParams(_, _, _, _, _, _, expected_micros)) 293 PcmSetParams(_, _, _, _, _, _, expected_micros))
296 .WillOnce(Return(0)); 294 .WillOnce(Return(0));
297 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _)) 295 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _))
298 .WillOnce(DoAll(SetArgumentPointee<1>(kTestFramesPerPacket), 296 .WillOnce(DoAll(SetArgPointee<1>(kTestFramesPerPacket),
299 SetArgumentPointee<2>(kTestFramesPerPacket / 2), 297 SetArgPointee<2>(kTestFramesPerPacket / 2), Return(0)));
300 Return(0)));
301 298
302 test_stream = CreateStream(kTestChannelLayout, 299 test_stream = CreateStream(kTestChannelLayout,
303 kOverMinLatencyPacketSize); 300 kOverMinLatencyPacketSize);
304 ASSERT_TRUE(test_stream->Open()); 301 ASSERT_TRUE(test_stream->Open());
305 302
306 // Now close it and test that everything was released. 303 // Now close it and test that everything was released.
307 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)) 304 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle))
308 .WillOnce(Return(0)); 305 .WillOnce(Return(0));
309 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) 306 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
310 .WillOnce(Return(kTestDeviceName)); 307 .WillOnce(Return(kTestDeviceName));
311 test_stream->Close(); 308 test_stream->Close();
312 309
313 Mock::VerifyAndClear(&mock_alsa_wrapper_); 310 Mock::VerifyAndClear(&mock_alsa_wrapper_);
314 Mock::VerifyAndClear(mock_manager_.get()); 311 Mock::VerifyAndClear(mock_manager_.get());
315 } 312 }
316 313
317 TEST_F(AlsaPcmOutputStreamTest, OpenClose) { 314 TEST_F(AlsaPcmOutputStreamTest, OpenClose) {
318 int64_t expected_micros = AudioTimestampHelper::FramesToTime( 315 int64_t expected_micros = AudioTimestampHelper::FramesToTime(
319 2 * kTestFramesPerPacket, kTestSampleRate) 316 2 * kTestFramesPerPacket, kTestSampleRate)
320 .InMicroseconds(); 317 .InMicroseconds();
321 318
322 // Open() call opens the playback device, sets the parameters, posts a task 319 // Open() call opens the playback device, sets the parameters, posts a task
323 // with the resulting configuration data, and transitions the object state to 320 // with the resulting configuration data, and transitions the object state to
324 // kIsOpened. 321 // kIsOpened.
325 EXPECT_CALL(mock_alsa_wrapper_, 322 EXPECT_CALL(mock_alsa_wrapper_,
326 PcmOpen(_, StrEq(kTestDeviceName), 323 PcmOpen(_, StrEq(kTestDeviceName), SND_PCM_STREAM_PLAYBACK,
327 SND_PCM_STREAM_PLAYBACK, SND_PCM_NONBLOCK)) 324 SND_PCM_NONBLOCK))
328 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), 325 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
329 Return(0)));
330 EXPECT_CALL(mock_alsa_wrapper_, 326 EXPECT_CALL(mock_alsa_wrapper_,
331 PcmSetParams(kFakeHandle, 327 PcmSetParams(kFakeHandle,
332 SND_PCM_FORMAT_U8, 328 SND_PCM_FORMAT_U8,
333 SND_PCM_ACCESS_RW_INTERLEAVED, 329 SND_PCM_ACCESS_RW_INTERLEAVED,
334 ChannelLayoutToChannelCount(kTestChannelLayout), 330 ChannelLayoutToChannelCount(kTestChannelLayout),
335 kTestSampleRate, 331 kTestSampleRate,
336 1, 332 1,
337 expected_micros)) 333 expected_micros))
338 .WillOnce(Return(0)); 334 .WillOnce(Return(0));
339 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(kFakeHandle, _, _)) 335 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(kFakeHandle, _, _))
340 .WillOnce(DoAll(SetArgumentPointee<1>(kTestFramesPerPacket), 336 .WillOnce(DoAll(SetArgPointee<1>(kTestFramesPerPacket),
341 SetArgumentPointee<2>(kTestFramesPerPacket / 2), 337 SetArgPointee<2>(kTestFramesPerPacket / 2), Return(0)));
342 Return(0)));
343 338
344 // Open the stream. 339 // Open the stream.
345 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); 340 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
346 ASSERT_TRUE(test_stream->Open()); 341 ASSERT_TRUE(test_stream->Open());
347 342
348 EXPECT_EQ(AlsaPcmOutputStream::kIsOpened, test_stream->state()); 343 EXPECT_EQ(AlsaPcmOutputStream::kIsOpened, test_stream->state());
349 EXPECT_EQ(kFakeHandle, test_stream->playback_handle_); 344 EXPECT_EQ(kFakeHandle, test_stream->playback_handle_);
350 EXPECT_EQ(kTestFramesPerPacket, test_stream->frames_per_packet_); 345 EXPECT_EQ(kTestFramesPerPacket, test_stream->frames_per_packet_);
351 EXPECT_TRUE(test_stream->buffer_.get()); 346 EXPECT_TRUE(test_stream->buffer_.get());
352 EXPECT_FALSE(test_stream->stop_stream_); 347 EXPECT_FALSE(test_stream->stop_stream_);
(...skipping 20 matching lines...) Expand all
373 EXPECT_TRUE(test_stream->stop_stream_); 368 EXPECT_TRUE(test_stream->stop_stream_);
374 EXPECT_TRUE(test_stream->playback_handle_ == NULL); 369 EXPECT_TRUE(test_stream->playback_handle_ == NULL);
375 EXPECT_FALSE(test_stream->buffer_.get()); 370 EXPECT_FALSE(test_stream->buffer_.get());
376 371
377 // Close the stream since we opened it to make destruction happy. 372 // Close the stream since we opened it to make destruction happy.
378 test_stream->Close(); 373 test_stream->Close();
379 } 374 }
380 375
381 TEST_F(AlsaPcmOutputStreamTest, PcmSetParamsFailed) { 376 TEST_F(AlsaPcmOutputStreamTest, PcmSetParamsFailed) {
382 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _)) 377 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _))
383 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), 378 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
384 Return(0)));
385 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _)) 379 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _))
386 .WillOnce(Return(kTestFailedErrno)); 380 .WillOnce(Return(kTestFailedErrno));
387 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)) 381 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle))
388 .WillOnce(Return(0)); 382 .WillOnce(Return(0));
389 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) 383 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
390 .WillOnce(Return(kTestDeviceName)); 384 .WillOnce(Return(kTestDeviceName));
391 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) 385 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
392 .WillOnce(Return(kDummyMessage)); 386 .WillOnce(Return(kDummyMessage));
393 387
394 // If open fails, the stream stays in kCreated because it has effectively had 388 // If open fails, the stream stays in kCreated because it has effectively had
395 // no changes. 389 // no changes.
396 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); 390 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
397 ASSERT_FALSE(test_stream->Open()); 391 ASSERT_FALSE(test_stream->Open());
398 EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state()); 392 EXPECT_EQ(AlsaPcmOutputStream::kInError, test_stream->state());
399 393
400 // Ensure internal state is set for a no-op stream if PcmSetParams() failes. 394 // Ensure internal state is set for a no-op stream if PcmSetParams() failes.
401 EXPECT_TRUE(test_stream->stop_stream_); 395 EXPECT_TRUE(test_stream->stop_stream_);
402 EXPECT_TRUE(test_stream->playback_handle_ == NULL); 396 EXPECT_TRUE(test_stream->playback_handle_ == NULL);
403 EXPECT_FALSE(test_stream->buffer_.get()); 397 EXPECT_FALSE(test_stream->buffer_.get());
404 398
405 // Close the stream since we opened it to make destruction happy. 399 // Close the stream since we opened it to make destruction happy.
406 test_stream->Close(); 400 test_stream->Close();
407 } 401 }
408 402
409 TEST_F(AlsaPcmOutputStreamTest, StartStop) { 403 TEST_F(AlsaPcmOutputStreamTest, StartStop) {
410 // Open() call opens the playback device, sets the parameters, posts a task 404 // Open() call opens the playback device, sets the parameters, posts a task
411 // with the resulting configuration data, and transitions the object state to 405 // with the resulting configuration data, and transitions the object state to
412 // kIsOpened. 406 // kIsOpened.
413 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _)) 407 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _))
414 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), 408 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
415 Return(0)));
416 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _)) 409 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _))
417 .WillOnce(Return(0)); 410 .WillOnce(Return(0));
418 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _)) 411 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _))
419 .WillOnce(DoAll(SetArgumentPointee<1>(kTestFramesPerPacket), 412 .WillOnce(DoAll(SetArgPointee<1>(kTestFramesPerPacket),
420 SetArgumentPointee<2>(kTestFramesPerPacket / 2), 413 SetArgPointee<2>(kTestFramesPerPacket / 2), Return(0)));
421 Return(0)));
422 414
423 // Open the stream. 415 // Open the stream.
424 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); 416 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
425 ASSERT_TRUE(test_stream->Open()); 417 ASSERT_TRUE(test_stream->Open());
426 base::SimpleTestTickClock* const tick_clock = new base::SimpleTestTickClock(); 418 base::SimpleTestTickClock* const tick_clock = new base::SimpleTestTickClock();
427 tick_clock->SetNowTicks(base::TimeTicks::Now()); 419 tick_clock->SetNowTicks(base::TimeTicks::Now());
428 test_stream->SetTickClockForTesting(base::WrapUnique(tick_clock)); 420 test_stream->SetTickClockForTesting(base::WrapUnique(tick_clock));
429 421
430 // Expect Device setup. 422 // Expect Device setup.
431 EXPECT_CALL(mock_alsa_wrapper_, PcmDrop(kFakeHandle)) 423 EXPECT_CALL(mock_alsa_wrapper_, PcmDrop(kFakeHandle))
432 .WillOnce(Return(0)); 424 .WillOnce(Return(0));
433 EXPECT_CALL(mock_alsa_wrapper_, PcmPrepare(kFakeHandle)) 425 EXPECT_CALL(mock_alsa_wrapper_, PcmPrepare(kFakeHandle))
434 .WillOnce(Return(0)); 426 .WillOnce(Return(0));
435 427
436 // Expect the pre-roll. 428 // Expect the pre-roll.
437 MockAudioSourceCallback mock_callback; 429 MockAudioSourceCallback mock_callback;
438 EXPECT_CALL(mock_alsa_wrapper_, PcmState(kFakeHandle)) 430 EXPECT_CALL(mock_alsa_wrapper_, PcmState(kFakeHandle))
439 .WillRepeatedly(Return(SND_PCM_STATE_RUNNING)); 431 .WillRepeatedly(Return(SND_PCM_STATE_RUNNING));
440 EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(kFakeHandle, _)) 432 EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(kFakeHandle, _))
441 .WillRepeatedly(DoAll(SetArgumentPointee<1>(0), Return(0))); 433 .WillRepeatedly(DoAll(SetArgPointee<1>(0), Return(0)));
442 EXPECT_CALL(mock_callback, 434 EXPECT_CALL(mock_callback,
443 OnMoreData(base::TimeDelta(), tick_clock->NowTicks(), 0, _)) 435 OnMoreData(base::TimeDelta(), tick_clock->NowTicks(), 0, _))
444 .WillRepeatedly(DoAll(ClearBuffer(), Return(kTestFramesPerPacket))); 436 .WillRepeatedly(DoAll(ClearBuffer(), Return(kTestFramesPerPacket)));
445 EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(kFakeHandle, _, _)) 437 EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(kFakeHandle, _, _))
446 .WillRepeatedly(Return(kTestFramesPerPacket)); 438 .WillRepeatedly(Return(kTestFramesPerPacket));
447 439
448 // Expect scheduling. 440 // Expect scheduling.
449 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(kFakeHandle)) 441 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(kFakeHandle))
450 .Times(AtLeast(2)) 442 .Times(AtLeast(2))
451 .WillRepeatedly(Return(kTestFramesPerPacket)); 443 .WillRepeatedly(Return(kTestFramesPerPacket));
(...skipping 23 matching lines...) Expand all
475 467
476 // Test empty buffer. 468 // Test empty buffer.
477 test_stream->buffer_->Clear(); 469 test_stream->buffer_->Clear();
478 test_stream->WritePacket(); 470 test_stream->WritePacket();
479 test_stream->Close(); 471 test_stream->Close();
480 } 472 }
481 473
482 TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) { 474 TEST_F(AlsaPcmOutputStreamTest, WritePacket_NormalPacket) {
483 // We need to open the stream before writing data to ALSA. 475 // We need to open the stream before writing data to ALSA.
484 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _)) 476 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _))
485 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), 477 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
486 Return(0)));
487 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _)) 478 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _))
488 .WillOnce(Return(0)); 479 .WillOnce(Return(0));
489 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _)) 480 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _))
490 .WillOnce(DoAll(SetArgumentPointee<1>(kTestFramesPerPacket), 481 .WillOnce(DoAll(SetArgPointee<1>(kTestFramesPerPacket),
491 SetArgumentPointee<2>(kTestFramesPerPacket / 2), 482 SetArgPointee<2>(kTestFramesPerPacket / 2), Return(0)));
492 Return(0)));
493 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); 483 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
494 ASSERT_TRUE(test_stream->Open()); 484 ASSERT_TRUE(test_stream->Open());
495 InitBuffer(test_stream); 485 InitBuffer(test_stream);
496 test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); 486 test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
497 487
498 // Write a little less than half the data. 488 // Write a little less than half the data.
499 int written = packet_->data_size() / kTestBytesPerFrame / 2 - 1; 489 int written = packet_->data_size() / kTestBytesPerFrame / 2 - 1;
500 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(kFakeHandle)) 490 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(kFakeHandle))
501 .WillOnce(Return(written)); 491 .WillOnce(Return(written));
502 EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(kFakeHandle, packet_->data(), _)) 492 EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(kFakeHandle, packet_->data(), _))
(...skipping 19 matching lines...) Expand all
522 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle)) 512 EXPECT_CALL(mock_alsa_wrapper_, PcmClose(kFakeHandle))
523 .WillOnce(Return(0)); 513 .WillOnce(Return(0));
524 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle)) 514 EXPECT_CALL(mock_alsa_wrapper_, PcmName(kFakeHandle))
525 .WillOnce(Return(kTestDeviceName)); 515 .WillOnce(Return(kTestDeviceName));
526 test_stream->Close(); 516 test_stream->Close();
527 } 517 }
528 518
529 TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) { 519 TEST_F(AlsaPcmOutputStreamTest, WritePacket_WriteFails) {
530 // We need to open the stream before writing data to ALSA. 520 // We need to open the stream before writing data to ALSA.
531 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _)) 521 EXPECT_CALL(mock_alsa_wrapper_, PcmOpen(_, _, _, _))
532 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), 522 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
533 Return(0)));
534 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _)) 523 EXPECT_CALL(mock_alsa_wrapper_, PcmSetParams(_, _, _, _, _, _, _))
535 .WillOnce(Return(0)); 524 .WillOnce(Return(0));
536 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _)) 525 EXPECT_CALL(mock_alsa_wrapper_, PcmGetParams(_, _, _))
537 .WillOnce(DoAll(SetArgumentPointee<1>(kTestFramesPerPacket), 526 .WillOnce(DoAll(SetArgPointee<1>(kTestFramesPerPacket),
538 SetArgumentPointee<2>(kTestFramesPerPacket / 2), 527 SetArgPointee<2>(kTestFramesPerPacket / 2), Return(0)));
539 Return(0)));
540 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout); 528 AlsaPcmOutputStream* test_stream = CreateStream(kTestChannelLayout);
541 ASSERT_TRUE(test_stream->Open()); 529 ASSERT_TRUE(test_stream->Open());
542 InitBuffer(test_stream); 530 InitBuffer(test_stream);
543 test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying); 531 test_stream->TransitionTo(AlsaPcmOutputStream::kIsPlaying);
544 532
545 // Fail due to a recoverable error and see that PcmRecover code path 533 // Fail due to a recoverable error and see that PcmRecover code path
546 // continues normally. 534 // continues normally.
547 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(kFakeHandle)) 535 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(kFakeHandle))
548 .WillOnce(Return(kTestFramesPerPacket)); 536 .WillOnce(Return(kTestFramesPerPacket));
549 EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(kFakeHandle, _, _)) 537 EXPECT_CALL(mock_alsa_wrapper_, PcmWritei(kFakeHandle, _, _))
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
594 base::SimpleTestTickClock* const tick_clock = new base::SimpleTestTickClock(); 582 base::SimpleTestTickClock* const tick_clock = new base::SimpleTestTickClock();
595 tick_clock->SetNowTicks(base::TimeTicks::Now()); 583 tick_clock->SetNowTicks(base::TimeTicks::Now());
596 test_stream->SetTickClockForTesting(base::WrapUnique(tick_clock)); 584 test_stream->SetTickClockForTesting(base::WrapUnique(tick_clock));
597 InitBuffer(test_stream); 585 InitBuffer(test_stream);
598 test_stream->buffer_->Clear(); 586 test_stream->buffer_->Clear();
599 587
600 MockAudioSourceCallback mock_callback; 588 MockAudioSourceCallback mock_callback;
601 EXPECT_CALL(mock_alsa_wrapper_, PcmState(_)) 589 EXPECT_CALL(mock_alsa_wrapper_, PcmState(_))
602 .WillOnce(Return(SND_PCM_STATE_RUNNING)); 590 .WillOnce(Return(SND_PCM_STATE_RUNNING));
603 EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(_, _)) 591 EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(_, _))
604 .WillOnce(DoAll(SetArgumentPointee<1>(1), Return(0))); 592 .WillOnce(DoAll(SetArgPointee<1>(1), Return(0)));
605 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_)) 593 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_))
606 .WillRepeatedly(Return(0)); // Buffer is full. 594 .WillRepeatedly(Return(0)); // Buffer is full.
607 595
608 // Return a partially filled packet. 596 // Return a partially filled packet.
609 EXPECT_CALL(mock_callback, 597 EXPECT_CALL(mock_callback,
610 OnMoreData(base::TimeDelta(), tick_clock->NowTicks(), 0, _)) 598 OnMoreData(base::TimeDelta(), tick_clock->NowTicks(), 0, _))
611 .WillOnce(DoAll(ClearBuffer(), Return(kTestFramesPerPacket / 2))); 599 .WillOnce(DoAll(ClearBuffer(), Return(kTestFramesPerPacket / 2)));
612 600
613 bool source_exhausted; 601 bool source_exhausted;
614 test_stream->set_source_callback(&mock_callback); 602 test_stream->set_source_callback(&mock_callback);
(...skipping 11 matching lines...) Expand all
626 tick_clock->SetNowTicks(base::TimeTicks::Now()); 614 tick_clock->SetNowTicks(base::TimeTicks::Now());
627 test_stream->SetTickClockForTesting(base::WrapUnique(tick_clock)); 615 test_stream->SetTickClockForTesting(base::WrapUnique(tick_clock));
628 InitBuffer(test_stream); 616 InitBuffer(test_stream);
629 test_stream->buffer_->Clear(); 617 test_stream->buffer_->Clear();
630 618
631 // Simulate where the underrun has occurred right after checking the delay. 619 // Simulate where the underrun has occurred right after checking the delay.
632 MockAudioSourceCallback mock_callback; 620 MockAudioSourceCallback mock_callback;
633 EXPECT_CALL(mock_alsa_wrapper_, PcmState(_)) 621 EXPECT_CALL(mock_alsa_wrapper_, PcmState(_))
634 .WillOnce(Return(SND_PCM_STATE_RUNNING)); 622 .WillOnce(Return(SND_PCM_STATE_RUNNING));
635 EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(_, _)) 623 EXPECT_CALL(mock_alsa_wrapper_, PcmDelay(_, _))
636 .WillOnce(DoAll(SetArgumentPointee<1>(-1), Return(0))); 624 .WillOnce(DoAll(SetArgPointee<1>(-1), Return(0)));
637 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_)) 625 EXPECT_CALL(mock_alsa_wrapper_, PcmAvailUpdate(_))
638 .WillRepeatedly(Return(0)); // Buffer is full. 626 .WillRepeatedly(Return(0)); // Buffer is full.
639 EXPECT_CALL(mock_callback, 627 EXPECT_CALL(mock_callback,
640 OnMoreData(base::TimeDelta(), tick_clock->NowTicks(), 0, _)) 628 OnMoreData(base::TimeDelta(), tick_clock->NowTicks(), 0, _))
641 .WillOnce(DoAll(ClearBuffer(), Return(kTestFramesPerPacket / 2))); 629 .WillOnce(DoAll(ClearBuffer(), Return(kTestFramesPerPacket / 2)));
642 630
643 bool source_exhausted; 631 bool source_exhausted;
644 test_stream->set_source_callback(&mock_callback); 632 test_stream->set_source_callback(&mock_callback);
645 test_stream->packet_size_ = kTestPacketSize; 633 test_stream->packet_size_ = kTestPacketSize;
646 test_stream->BufferPacket(&source_exhausted); 634 test_stream->BufferPacket(&source_exhausted);
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
723 if (i == 3 || i == 4 || i == 5) // invalid number of channels 711 if (i == 3 || i == 4 || i == 5) // invalid number of channels
724 continue; 712 continue;
725 SCOPED_TRACE(base::StringPrintf("Attempting %d Channel", i)); 713 SCOPED_TRACE(base::StringPrintf("Attempting %d Channel", i));
726 714
727 // Hints will only be grabbed for channel numbers that have non-default 715 // Hints will only be grabbed for channel numbers that have non-default
728 // devices associated with them. 716 // devices associated with them.
729 if (kExpectedDeviceName[i] != AlsaPcmOutputStream::kDefaultDevice) { 717 if (kExpectedDeviceName[i] != AlsaPcmOutputStream::kDefaultDevice) {
730 // The DeviceNameHint and DeviceNameFreeHint need to be paired to avoid a 718 // The DeviceNameHint and DeviceNameFreeHint need to be paired to avoid a
731 // memory leak. 719 // memory leak.
732 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _)) 720 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _))
733 .WillOnce(DoAll(SetArgumentPointee<2>(&kFakeHints[0]), Return(0))); 721 .WillOnce(DoAll(SetArgPointee<2>(&kFakeHints[0]), Return(0)));
734 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameFreeHint(&kFakeHints[0])) 722 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameFreeHint(&kFakeHints[0]))
735 .Times(1); 723 .Times(1);
736 } 724 }
737 725
738 EXPECT_CALL(mock_alsa_wrapper_, 726 EXPECT_CALL(mock_alsa_wrapper_,
739 PcmOpen(_, StrEq(kExpectedDeviceName[i]), _, _)) 727 PcmOpen(_, StrEq(kExpectedDeviceName[i]), _, _))
740 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), Return(0))); 728 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
741 EXPECT_CALL(mock_alsa_wrapper_, 729 EXPECT_CALL(mock_alsa_wrapper_,
742 PcmSetParams(kFakeHandle, _, _, i, _, _, _)) 730 PcmSetParams(kFakeHandle, _, _, i, _, _, _))
743 .WillOnce(Return(0)); 731 .WillOnce(Return(0));
744 732
745 // The parameters are specified by ALSA documentation, and are in constants 733 // The parameters are specified by ALSA documentation, and are in constants
746 // in the implementation files. 734 // in the implementation files.
747 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("IOID"))) 735 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("IOID")))
748 .WillRepeatedly(Invoke(OutputHint)); 736 .WillRepeatedly(Invoke(OutputHint));
749 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME"))) 737 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME")))
750 .WillRepeatedly(Invoke(EchoHint)); 738 .WillRepeatedly(Invoke(EchoHint));
(...skipping 26 matching lines...) Expand all
777 const string first_try = kSurround50; 765 const string first_try = kSurround50;
778 const string second_try = string(AlsaPcmOutputStream::kPlugPrefix) + 766 const string second_try = string(AlsaPcmOutputStream::kPlugPrefix) +
779 kSurround50; 767 kSurround50;
780 const string third_try = string(AlsaPcmOutputStream::kPlugPrefix) + 768 const string third_try = string(AlsaPcmOutputStream::kPlugPrefix) +
781 kGenericSurround50; 769 kGenericSurround50;
782 const string fourth_try = AlsaPcmOutputStream::kDefaultDevice; 770 const string fourth_try = AlsaPcmOutputStream::kDefaultDevice;
783 const string fifth_try = string(AlsaPcmOutputStream::kPlugPrefix) + 771 const string fifth_try = string(AlsaPcmOutputStream::kPlugPrefix) +
784 AlsaPcmOutputStream::kDefaultDevice; 772 AlsaPcmOutputStream::kDefaultDevice;
785 773
786 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _)) 774 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _))
787 .WillOnce(DoAll(SetArgumentPointee<2>(&kFakeHints[0]), Return(0))); 775 .WillOnce(DoAll(SetArgPointee<2>(&kFakeHints[0]), Return(0)));
788 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameFreeHint(&kFakeHints[0])) 776 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameFreeHint(&kFakeHints[0]))
789 .Times(1); 777 .Times(1);
790 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("IOID"))) 778 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("IOID")))
791 .WillRepeatedly(Invoke(OutputHint)); 779 .WillRepeatedly(Invoke(OutputHint));
792 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME"))) 780 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameGetHint(_, StrEq("NAME")))
793 .WillRepeatedly(Invoke(EchoHint)); 781 .WillRepeatedly(Invoke(EchoHint));
794 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) 782 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
795 .WillRepeatedly(Return(kDummyMessage)); 783 .WillRepeatedly(Return(kDummyMessage));
796 784
797 InSequence s; 785 InSequence s;
(...skipping 13 matching lines...) Expand all
811 test_stream->Close(); 799 test_stream->Close();
812 } 800 }
813 801
814 TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) { 802 TEST_F(AlsaPcmOutputStreamTest, AutoSelectDevice_HintFail) {
815 // Should get |kDefaultDevice|, and force a 2-channel downmix on a failure to 803 // Should get |kDefaultDevice|, and force a 2-channel downmix on a failure to
816 // enumerate devices. 804 // enumerate devices.
817 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _)) 805 EXPECT_CALL(mock_alsa_wrapper_, DeviceNameHint(_, _, _))
818 .WillRepeatedly(Return(kTestFailedErrno)); 806 .WillRepeatedly(Return(kTestFailedErrno));
819 EXPECT_CALL(mock_alsa_wrapper_, 807 EXPECT_CALL(mock_alsa_wrapper_,
820 PcmOpen(_, StrEq(AlsaPcmOutputStream::kDefaultDevice), _, _)) 808 PcmOpen(_, StrEq(AlsaPcmOutputStream::kDefaultDevice), _, _))
821 .WillOnce(DoAll(SetArgumentPointee<0>(kFakeHandle), Return(0))); 809 .WillOnce(DoAll(SetArgPointee<0>(kFakeHandle), Return(0)));
822 EXPECT_CALL(mock_alsa_wrapper_, 810 EXPECT_CALL(mock_alsa_wrapper_,
823 PcmSetParams(kFakeHandle, _, _, 2, _, _, _)) 811 PcmSetParams(kFakeHandle, _, _, 2, _, _, _))
824 .WillOnce(Return(0)); 812 .WillOnce(Return(0));
825 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno)) 813 EXPECT_CALL(mock_alsa_wrapper_, StrError(kTestFailedErrno))
826 .WillOnce(Return(kDummyMessage)); 814 .WillOnce(Return(kDummyMessage));
827 815
828 AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5_0); 816 AlsaPcmOutputStream* test_stream = CreateStream(CHANNEL_LAYOUT_5_0);
829 EXPECT_TRUE(test_stream->AutoSelectDevice(5)); 817 EXPECT_TRUE(test_stream->AutoSelectDevice(5));
830 EXPECT_TRUE(test_stream->channel_mixer_); 818 EXPECT_TRUE(test_stream->channel_mixer_);
831 test_stream->Close(); 819 test_stream->Close();
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
878 866
879 // TODO(ajwong): Find a way to test whether or not another task has been 867 // TODO(ajwong): Find a way to test whether or not another task has been
880 // posted so we can verify that the Alsa code will indeed break the task 868 // posted so we can verify that the Alsa code will indeed break the task
881 // posting loop. 869 // posting loop.
882 870
883 test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed); 871 test_stream->TransitionTo(AlsaPcmOutputStream::kIsClosed);
884 test_stream->Close(); 872 test_stream->Close();
885 } 873 }
886 874
887 } // namespace media 875 } // namespace media
OLDNEW
« no previous file with comments | « gpu/command_buffer/service/test_helper.cc ('k') | media/audio/cras/cras_unified_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698