| 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
| 6 #include "base/bind.h" | 6 #include "base/bind.h" |
| 7 #include "base/environment.h" | |
| 8 #include "base/logging.h" | 7 #include "base/logging.h" |
| 9 #include "base/memory/ref_counted.h" | |
| 10 #include "base/memory/scoped_ptr.h" | 8 #include "base/memory/scoped_ptr.h" |
| 11 #include "base/message_loop.h" | 9 #include "base/message_loop_proxy.h" |
| 12 #include "base/synchronization/waitable_event.h" | 10 #include "base/synchronization/waitable_event.h" |
| 13 #include "media/audio/audio_output_controller.h" | 11 #include "media/audio/audio_output_controller.h" |
| 14 #include "media/audio/audio_parameters.h" | 12 #include "media/audio/audio_parameters.h" |
| 15 #include "media/base/audio_bus.h" | 13 #include "media/base/audio_bus.h" |
| 16 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
| 17 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
| 18 | 16 |
| 19 using ::testing::_; | 17 using ::testing::_; |
| 20 using ::testing::AtLeast; | 18 using ::testing::AtLeast; |
| 21 using ::testing::DoAll; | 19 using ::testing::DoAll; |
| (...skipping 193 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 215 .WillOnce(SignalEvent(&play_event_)); | 213 .WillOnce(SignalEvent(&play_event_)); |
| 216 } | 214 } |
| 217 | 215 |
| 218 EXPECT_CALL(mock_stream_, Close()); | 216 EXPECT_CALL(mock_stream_, Close()); |
| 219 | 217 |
| 220 controller_->StopDiverting(); | 218 controller_->StopDiverting(); |
| 221 } | 219 } |
| 222 | 220 |
| 223 void Close() { | 221 void Close() { |
| 224 EXPECT_CALL(mock_sync_reader_, Close()); | 222 EXPECT_CALL(mock_sync_reader_, Close()); |
| 223 base::WaitableEvent close_event(true, false); |
| 224 base::Closure closed_cb = base::Bind( |
| 225 &base::WaitableEvent::Signal, base::Unretained(&close_event)); |
| 225 | 226 |
| 226 controller_->Close(base::MessageLoop::QuitClosure()); | 227 audio_manager_->GetMessageLoop()->PostTask( |
| 227 base::MessageLoop::current()->Run(); | 228 FROM_HERE, |
| 229 base::Bind(&AudioOutputController::Close, controller_, closed_cb)); |
| 230 close_event.Wait(); |
| 228 } | 231 } |
| 229 | 232 |
| 230 // These help make test sequences more readable. | 233 // These help make test sequences more readable. |
| 231 void DivertNeverPlaying() { Divert(false, 0); } | 234 void DivertNeverPlaying() { Divert(false, 0); } |
| 232 void DivertWillEventuallyBeTwicePlayed() { Divert(false, 2); } | 235 void DivertWillEventuallyBeTwicePlayed() { Divert(false, 2); } |
| 233 void DivertWhilePlaying() { Divert(true, 1); } | 236 void DivertWhilePlaying() { Divert(true, 1); } |
| 234 void RevertWasNotPlaying() { Revert(false); } | 237 void RevertWasNotPlaying() { Revert(false); } |
| 235 void RevertWhilePlaying() { Revert(true); } | 238 void RevertWhilePlaying() { Revert(true); } |
| 236 | 239 |
| 237 // These synchronize the main thread with key events taking place on other | 240 // These synchronize the main thread with key events taking place on other |
| 238 // threads. | 241 // threads. |
| 239 void WaitForCreate() { create_event_.Wait(); } | 242 void WaitForCreate() { create_event_.Wait(); } |
| 240 void WaitForPlay() { play_event_.Wait(); } | 243 void WaitForPlay() { play_event_.Wait(); } |
| 241 void WaitForReads() { | 244 void WaitForReads() { |
| 242 // Note: Arbitrarily chosen, but more iterations causes tests to take | 245 // Note: Arbitrarily chosen, but more iterations causes tests to take |
| 243 // significantly more time. | 246 // significantly more time. |
| 244 static const int kNumIterations = 3; | 247 static const int kNumIterations = 3; |
| 245 for (int i = 0; i < kNumIterations; ++i) { | 248 for (int i = 0; i < kNumIterations; ++i) { |
| 246 read_event_.Wait(); | 249 read_event_.Wait(); |
| 247 } | 250 } |
| 248 } | 251 } |
| 249 void WaitForPause() { pause_event_.Wait(); } | 252 void WaitForPause() { pause_event_.Wait(); } |
| 250 | 253 |
| 251 private: | 254 private: |
| 252 base::MessageLoopForIO message_loop_; | |
| 253 scoped_ptr<AudioManager> audio_manager_; | 255 scoped_ptr<AudioManager> audio_manager_; |
| 254 MockAudioOutputControllerEventHandler mock_event_handler_; | 256 MockAudioOutputControllerEventHandler mock_event_handler_; |
| 255 MockAudioOutputControllerSyncReader mock_sync_reader_; | 257 MockAudioOutputControllerSyncReader mock_sync_reader_; |
| 256 MockAudioOutputStream mock_stream_; | 258 MockAudioOutputStream mock_stream_; |
| 257 base::WaitableEvent create_event_; | 259 base::WaitableEvent create_event_; |
| 258 base::WaitableEvent play_event_; | 260 base::WaitableEvent play_event_; |
| 259 base::WaitableEvent read_event_; | 261 base::WaitableEvent read_event_; |
| 260 base::WaitableEvent pause_event_; | 262 base::WaitableEvent pause_event_; |
| 261 AudioParameters params_; | 263 AudioParameters params_; |
| 262 scoped_refptr<AudioOutputController> controller_; | 264 scoped_refptr<AudioOutputController> controller_; |
| (...skipping 111 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 | 376 |
| 375 TEST_F(AudioOutputControllerTest, DivertRevertClose) { | 377 TEST_F(AudioOutputControllerTest, DivertRevertClose) { |
| 376 Create(kSamplesPerPacket); | 378 Create(kSamplesPerPacket); |
| 377 WaitForCreate(); | 379 WaitForCreate(); |
| 378 DivertNeverPlaying(); | 380 DivertNeverPlaying(); |
| 379 RevertWasNotPlaying(); | 381 RevertWasNotPlaying(); |
| 380 Close(); | 382 Close(); |
| 381 } | 383 } |
| 382 | 384 |
| 383 } // namespace media | 385 } // namespace media |
| OLD | NEW |