OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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 <string> | 5 #include <string> |
6 | 6 |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/message_loop_proxy.h" | 8 #include "base/message_loop_proxy.h" |
9 #include "base/threading/platform_thread.h" | 9 #include "base/threading/platform_thread.h" |
10 #include "media/audio/audio_output_dispatcher_impl.h" | 10 #include "media/audio/audio_output_dispatcher_impl.h" |
11 #include "media/audio/audio_output_mixer.h" | 11 #include "media/audio/audio_output_mixer.h" |
12 #include "media/audio/audio_output_proxy.h" | 12 #include "media/audio/audio_output_proxy.h" |
13 #include "media/audio/audio_manager.h" | 13 #include "media/audio/audio_manager.h" |
14 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
15 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
16 | 16 |
17 using ::testing::_; | 17 using ::testing::_; |
| 18 using ::testing::AllOf; |
| 19 using ::testing::Field; |
18 using ::testing::Mock; | 20 using ::testing::Mock; |
19 using ::testing::Return; | 21 using ::testing::Return; |
20 using media::AudioBuffersState; | 22 using media::AudioBuffersState; |
21 using media::AudioInputStream; | 23 using media::AudioInputStream; |
22 using media::AudioManager; | 24 using media::AudioManager; |
23 using media::AudioOutputDispatcher; | 25 using media::AudioOutputDispatcher; |
24 using media::AudioOutputProxy; | 26 using media::AudioOutputProxy; |
25 using media::AudioOutputStream; | 27 using media::AudioOutputStream; |
26 using media::AudioParameters; | 28 using media::AudioParameters; |
27 | 29 |
(...skipping 399 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
427 proxy1->Start(&callback_); | 429 proxy1->Start(&callback_); |
428 proxy2->Start(&callback_); | 430 proxy2->Start(&callback_); |
429 proxy1->Stop(); | 431 proxy1->Stop(); |
430 proxy2->Stop(); | 432 proxy2->Stop(); |
431 | 433 |
432 proxy1->Close(); | 434 proxy1->Close(); |
433 proxy2->Close(); | 435 proxy2->Close(); |
434 } | 436 } |
435 | 437 |
436 // Two streams, both are playing. Still have to use single device. | 438 // Two streams, both are playing. Still have to use single device. |
| 439 // Also verifies that every proxy stream gets its own pending_bytes. |
437 TEST_F(AudioOutputProxyTest, TwoStreams_BothPlaying_Mixer) { | 440 TEST_F(AudioOutputProxyTest, TwoStreams_BothPlaying_Mixer) { |
438 MockAudioOutputStream stream; | 441 MockAudioOutputStream stream; |
439 | 442 |
440 InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); | 443 InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); |
441 | 444 |
442 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) | 445 EXPECT_CALL(manager(), MakeAudioOutputStream(_)) |
443 .WillOnce(Return(&stream)); | 446 .WillOnce(Return(&stream)); |
444 | 447 |
445 EXPECT_CALL(stream, Open()) | 448 EXPECT_CALL(stream, Open()) |
446 .WillOnce(Return(true)); | 449 .WillOnce(Return(true)); |
447 EXPECT_CALL(stream, Start(_)) | 450 EXPECT_CALL(stream, Start(_)) |
448 .Times(1); | 451 .Times(1); |
449 EXPECT_CALL(stream, SetVolume(_)) | 452 EXPECT_CALL(stream, SetVolume(_)) |
450 .Times(1); | 453 .Times(1); |
451 EXPECT_CALL(stream, Stop()) | 454 EXPECT_CALL(stream, Stop()) |
452 .Times(1); | 455 .Times(1); |
453 EXPECT_CALL(stream, Close()) | 456 EXPECT_CALL(stream, Close()) |
454 .Times(1); | 457 .Times(1); |
455 | 458 |
456 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); | 459 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); |
457 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); | 460 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); |
458 EXPECT_TRUE(proxy1->Open()); | 461 EXPECT_TRUE(proxy1->Open()); |
459 EXPECT_TRUE(proxy2->Open()); | 462 EXPECT_TRUE(proxy2->Open()); |
460 | 463 |
461 proxy1->Start(&callback_); | 464 proxy1->Start(&callback_); |
| 465 uint8 buf1[4] = {0}; |
| 466 EXPECT_CALL(callback_, |
| 467 OnMoreData(_, 4, |
| 468 AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
| 469 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 470 .WillOnce(Return(4)); |
| 471 mixer_->OnMoreData(buf1, sizeof(buf1), AudioBuffersState(0, 0)); |
462 proxy2->Start(&callback_); | 472 proxy2->Start(&callback_); |
| 473 uint8 buf2[4] = {0}; |
| 474 EXPECT_CALL(callback_, |
| 475 OnMoreData(_, 4, |
| 476 AllOf(Field(&AudioBuffersState::pending_bytes, 4), |
| 477 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 478 .WillOnce(Return(4)); |
| 479 EXPECT_CALL(callback_, |
| 480 OnMoreData(_, 4, |
| 481 AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
| 482 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 483 .WillOnce(Return(4)); |
| 484 mixer_->OnMoreData(buf2, sizeof(buf2), AudioBuffersState(4, 0)); |
463 proxy1->Stop(); | 485 proxy1->Stop(); |
464 proxy2->Stop(); | 486 proxy2->Stop(); |
465 | 487 |
466 proxy1->Close(); | 488 proxy1->Close(); |
467 proxy2->Close(); | 489 proxy2->Close(); |
468 WaitForCloseTimer(kTestCloseDelayMs); | 490 WaitForCloseTimer(kTestCloseDelayMs); |
469 } | 491 } |
470 | 492 |
471 TEST_F(AudioOutputProxyTest, OpenFailed) { | 493 TEST_F(AudioOutputProxyTest, OpenFailed) { |
472 OpenFailed(dispatcher_impl_); | 494 OpenFailed(dispatcher_impl_); |
(...skipping 77 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
550 | 572 |
551 proxy2->Start(&callback_); | 573 proxy2->Start(&callback_); |
552 | 574 |
553 Mock::VerifyAndClear(&callback_); | 575 Mock::VerifyAndClear(&callback_); |
554 | 576 |
555 proxy2->Close(); | 577 proxy2->Close(); |
556 WaitForCloseTimer(kTestCloseDelayMs); | 578 WaitForCloseTimer(kTestCloseDelayMs); |
557 } | 579 } |
558 | 580 |
559 } // namespace media | 581 } // namespace media |
OLD | NEW |