| 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; | 18 using ::testing::AllOf; |
| 19 using ::testing::DoAll; |
| 19 using ::testing::Field; | 20 using ::testing::Field; |
| 20 using ::testing::Mock; | 21 using ::testing::Mock; |
| 22 using ::testing::NotNull; |
| 21 using ::testing::Return; | 23 using ::testing::Return; |
| 24 using ::testing::SetArrayArgument; |
| 22 using media::AudioBuffersState; | 25 using media::AudioBuffersState; |
| 23 using media::AudioInputStream; | 26 using media::AudioInputStream; |
| 24 using media::AudioManager; | 27 using media::AudioManager; |
| 25 using media::AudioOutputDispatcher; | 28 using media::AudioOutputDispatcher; |
| 26 using media::AudioOutputProxy; | 29 using media::AudioOutputProxy; |
| 27 using media::AudioOutputStream; | 30 using media::AudioOutputStream; |
| 28 using media::AudioParameters; | 31 using media::AudioParameters; |
| 29 | 32 |
| 30 namespace { | 33 namespace { |
| 31 | 34 |
| (...skipping 423 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 455 .Times(1); | 458 .Times(1); |
| 456 EXPECT_CALL(stream, Close()) | 459 EXPECT_CALL(stream, Close()) |
| 457 .Times(1); | 460 .Times(1); |
| 458 | 461 |
| 459 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); | 462 AudioOutputProxy* proxy1 = new AudioOutputProxy(mixer_); |
| 460 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); | 463 AudioOutputProxy* proxy2 = new AudioOutputProxy(mixer_); |
| 461 EXPECT_TRUE(proxy1->Open()); | 464 EXPECT_TRUE(proxy1->Open()); |
| 462 EXPECT_TRUE(proxy2->Open()); | 465 EXPECT_TRUE(proxy2->Open()); |
| 463 | 466 |
| 464 proxy1->Start(&callback_); | 467 proxy1->Start(&callback_); |
| 468 uint8 zeroes[4] = {0, 0, 0, 0}; |
| 465 uint8 buf1[4] = {0}; | 469 uint8 buf1[4] = {0}; |
| 466 EXPECT_CALL(callback_, | 470 EXPECT_CALL(callback_, |
| 467 OnMoreData(_, 4, | 471 OnMoreData(NotNull(), 4, |
| 468 AllOf(Field(&AudioBuffersState::pending_bytes, 0), | 472 AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
| 469 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 473 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 470 .WillOnce(Return(4)); | 474 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 475 Return(4))); |
| 471 mixer_->OnMoreData(buf1, sizeof(buf1), AudioBuffersState(0, 0)); | 476 mixer_->OnMoreData(buf1, sizeof(buf1), AudioBuffersState(0, 0)); |
| 472 proxy2->Start(&callback_); | 477 proxy2->Start(&callback_); |
| 473 uint8 buf2[4] = {0}; | 478 uint8 buf2[4] = {0}; |
| 474 EXPECT_CALL(callback_, | 479 EXPECT_CALL(callback_, |
| 475 OnMoreData(_, 4, | 480 OnMoreData(NotNull(), 4, |
| 476 AllOf(Field(&AudioBuffersState::pending_bytes, 4), | 481 AllOf(Field(&AudioBuffersState::pending_bytes, 4), |
| 477 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 482 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 478 .WillOnce(Return(4)); | 483 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 484 Return(4))); |
| 479 EXPECT_CALL(callback_, | 485 EXPECT_CALL(callback_, |
| 480 OnMoreData(_, 4, | 486 OnMoreData(NotNull(), 4, |
| 481 AllOf(Field(&AudioBuffersState::pending_bytes, 0), | 487 AllOf(Field(&AudioBuffersState::pending_bytes, 0), |
| 482 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) | 488 Field(&AudioBuffersState::hardware_delay_bytes, 0)))) |
| 483 .WillOnce(Return(4)); | 489 .WillOnce(DoAll(SetArrayArgument<0>(zeroes, zeroes + sizeof(zeroes)), |
| 490 Return(4))); |
| 484 mixer_->OnMoreData(buf2, sizeof(buf2), AudioBuffersState(4, 0)); | 491 mixer_->OnMoreData(buf2, sizeof(buf2), AudioBuffersState(4, 0)); |
| 485 proxy1->Stop(); | 492 proxy1->Stop(); |
| 486 proxy2->Stop(); | 493 proxy2->Stop(); |
| 487 | 494 |
| 488 proxy1->Close(); | 495 proxy1->Close(); |
| 489 proxy2->Close(); | 496 proxy2->Close(); |
| 490 WaitForCloseTimer(kTestCloseDelayMs); | 497 WaitForCloseTimer(kTestCloseDelayMs); |
| 491 } | 498 } |
| 492 | 499 |
| 493 TEST_F(AudioOutputProxyTest, OpenFailed) { | 500 TEST_F(AudioOutputProxyTest, OpenFailed) { |
| (...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 572 | 579 |
| 573 proxy2->Start(&callback_); | 580 proxy2->Start(&callback_); |
| 574 | 581 |
| 575 Mock::VerifyAndClear(&callback_); | 582 Mock::VerifyAndClear(&callback_); |
| 576 | 583 |
| 577 proxy2->Close(); | 584 proxy2->Close(); |
| 578 WaitForCloseTimer(kTestCloseDelayMs); | 585 WaitForCloseTimer(kTestCloseDelayMs); |
| 579 } | 586 } |
| 580 | 587 |
| 581 } // namespace media | 588 } // namespace media |
| OLD | NEW |