| 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 <stdint.h> | 5 #include <stdint.h> |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <string> | 8 #include <string> |
| 9 | 9 |
| 10 #include "base/message_loop/message_loop.h" | 10 #include "base/message_loop/message_loop.h" |
| 11 #include "base/run_loop.h" | 11 #include "base/run_loop.h" |
| 12 #include "base/single_thread_task_runner.h" |
| 12 #include "base/threading/thread_task_runner_handle.h" | 13 #include "base/threading/thread_task_runner_handle.h" |
| 13 #include "build/build_config.h" | 14 #include "build/build_config.h" |
| 14 #include "media/audio/audio_manager.h" | 15 #include "media/audio/audio_manager.h" |
| 15 #include "media/audio/audio_manager_base.h" | 16 #include "media/audio/audio_manager_base.h" |
| 16 #include "media/audio/audio_output_dispatcher_impl.h" | 17 #include "media/audio/audio_output_dispatcher_impl.h" |
| 17 #include "media/audio/audio_output_proxy.h" | 18 #include "media/audio/audio_output_proxy.h" |
| 18 #include "media/audio/audio_output_resampler.h" | 19 #include "media/audio/audio_output_resampler.h" |
| 19 #include "media/audio/fake_audio_log_factory.h" | 20 #include "media/audio/fake_audio_log_factory.h" |
| 20 #include "media/audio/fake_audio_output_stream.h" | 21 #include "media/audio/fake_audio_output_stream.h" |
| 21 #include "testing/gmock/include/gmock/gmock.h" | 22 #include "testing/gmock/include/gmock/gmock.h" |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 160 // FakeAudioOutputStream will keep the message loop busy indefinitely; i.e., | 161 // FakeAudioOutputStream will keep the message loop busy indefinitely; i.e., |
| 161 // RunUntilIdle() will never terminate. | 162 // RunUntilIdle() will never terminate. |
| 162 params_ = AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, | 163 params_ = AudioParameters(AudioParameters::AUDIO_PCM_LINEAR, |
| 163 CHANNEL_LAYOUT_STEREO, 8000, 16, 2048); | 164 CHANNEL_LAYOUT_STEREO, 8000, 16, 2048); |
| 164 InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); | 165 InitDispatcher(base::TimeDelta::FromMilliseconds(kTestCloseDelayMs)); |
| 165 } | 166 } |
| 166 | 167 |
| 167 void TearDown() override { | 168 void TearDown() override { |
| 168 // This is necessary to free all proxy objects that have been | 169 // This is necessary to free all proxy objects that have been |
| 169 // closed by the test. | 170 // closed by the test. |
| 170 message_loop_.RunUntilIdle(); | 171 base::RunLoop().RunUntilIdle(); |
| 171 } | 172 } |
| 172 | 173 |
| 173 virtual void InitDispatcher(base::TimeDelta close_delay) { | 174 virtual void InitDispatcher(base::TimeDelta close_delay) { |
| 174 dispatcher_impl_ = new AudioOutputDispatcherImpl(&manager(), | 175 dispatcher_impl_ = new AudioOutputDispatcherImpl(&manager(), |
| 175 params_, | 176 params_, |
| 176 std::string(), | 177 std::string(), |
| 177 close_delay); | 178 close_delay); |
| 178 } | 179 } |
| 179 | 180 |
| 180 virtual void OnStart() {} | 181 virtual void OnStart() {} |
| (...skipping 255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 436 resampler_params_ = AudioParameters( | 437 resampler_params_ = AudioParameters( |
| 437 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, | 438 AudioParameters::AUDIO_PCM_LOW_LATENCY, CHANNEL_LAYOUT_STEREO, |
| 438 16000, 16, 1024); | 439 16000, 16, 1024); |
| 439 resampler_ = new AudioOutputResampler( | 440 resampler_ = new AudioOutputResampler( |
| 440 &manager(), params_, resampler_params_, std::string(), close_delay); | 441 &manager(), params_, resampler_params_, std::string(), close_delay); |
| 441 } | 442 } |
| 442 | 443 |
| 443 void OnStart() override { | 444 void OnStart() override { |
| 444 // Let Start() run for a bit. | 445 // Let Start() run for a bit. |
| 445 base::RunLoop run_loop; | 446 base::RunLoop run_loop; |
| 446 message_loop_.PostDelayedTask( | 447 message_loop_.task_runner()->PostDelayedTask( |
| 447 FROM_HERE, | 448 FROM_HERE, run_loop.QuitClosure(), |
| 448 run_loop.QuitClosure(), | |
| 449 base::TimeDelta::FromMilliseconds(kStartRunTimeMs)); | 449 base::TimeDelta::FromMilliseconds(kStartRunTimeMs)); |
| 450 run_loop.Run(); | 450 run_loop.Run(); |
| 451 } | 451 } |
| 452 | 452 |
| 453 protected: | 453 protected: |
| 454 AudioParameters resampler_params_; | 454 AudioParameters resampler_params_; |
| 455 scoped_refptr<AudioOutputResampler> resampler_; | 455 scoped_refptr<AudioOutputResampler> resampler_; |
| 456 }; | 456 }; |
| 457 | 457 |
| 458 TEST_F(AudioOutputProxyTest, CreateAndClose) { | 458 TEST_F(AudioOutputProxyTest, CreateAndClose) { |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 718 _, _)) | 718 _, _)) |
| 719 .WillOnce(Return(&fake_stream)); | 719 .WillOnce(Return(&fake_stream)); |
| 720 EXPECT_CALL(fake_stream, Open()).WillOnce(Return(true)); | 720 EXPECT_CALL(fake_stream, Open()).WillOnce(Return(true)); |
| 721 AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get()); | 721 AudioOutputProxy* proxy = new AudioOutputProxy(resampler_.get()); |
| 722 EXPECT_TRUE(proxy->Open()); | 722 EXPECT_TRUE(proxy->Open()); |
| 723 CloseAndWaitForCloseTimer(proxy, &fake_stream); | 723 CloseAndWaitForCloseTimer(proxy, &fake_stream); |
| 724 | 724 |
| 725 // Once all proxies have been closed, AudioOutputResampler will start the | 725 // Once all proxies have been closed, AudioOutputResampler will start the |
| 726 // reinitialization timer and execute it after the close delay elapses. | 726 // reinitialization timer and execute it after the close delay elapses. |
| 727 base::RunLoop run_loop; | 727 base::RunLoop run_loop; |
| 728 message_loop_.PostDelayedTask( | 728 message_loop_.task_runner()->PostDelayedTask( |
| 729 FROM_HERE, run_loop.QuitClosure(), | 729 FROM_HERE, run_loop.QuitClosure(), |
| 730 base::TimeDelta::FromMilliseconds(2 * kTestCloseDelayMs)); | 730 base::TimeDelta::FromMilliseconds(2 * kTestCloseDelayMs)); |
| 731 run_loop.Run(); | 731 run_loop.Run(); |
| 732 | 732 |
| 733 // Verify a non-fake stream can be created. | 733 // Verify a non-fake stream can be created. |
| 734 MockAudioOutputStream real_stream(&manager_, params_); | 734 MockAudioOutputStream real_stream(&manager_, params_); |
| 735 EXPECT_CALL(manager(), | 735 EXPECT_CALL(manager(), |
| 736 MakeAudioOutputStream( | 736 MakeAudioOutputStream( |
| 737 testing::Property(&AudioParameters::format, | 737 testing::Property(&AudioParameters::format, |
| 738 testing::Ne(AudioParameters::AUDIO_FAKE)), | 738 testing::Ne(AudioParameters::AUDIO_FAKE)), |
| 739 _, _)) | 739 _, _)) |
| 740 .WillOnce(Return(&real_stream)); | 740 .WillOnce(Return(&real_stream)); |
| 741 | 741 |
| 742 // Stream1 should be able to successfully open and start. | 742 // Stream1 should be able to successfully open and start. |
| 743 EXPECT_CALL(real_stream, Open()).WillOnce(Return(true)); | 743 EXPECT_CALL(real_stream, Open()).WillOnce(Return(true)); |
| 744 proxy = new AudioOutputProxy(resampler_.get()); | 744 proxy = new AudioOutputProxy(resampler_.get()); |
| 745 EXPECT_TRUE(proxy->Open()); | 745 EXPECT_TRUE(proxy->Open()); |
| 746 CloseAndWaitForCloseTimer(proxy, &real_stream); | 746 CloseAndWaitForCloseTimer(proxy, &real_stream); |
| 747 } | 747 } |
| 748 | 748 |
| 749 } // namespace media | 749 } // namespace media |
| OLD | NEW |