| 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 <vector> | 5 #include <vector> |
| 6 | 6 |
| 7 #include "base/at_exit.h" | 7 #include "base/at_exit.h" |
| 8 #include "base/memory/shared_memory.h" | 8 #include "base/memory/shared_memory.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/process/process_handle.h" | 10 #include "base/process/process_handle.h" |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 52 MOCK_METHOD0(PauseStream, void()); | 52 MOCK_METHOD0(PauseStream, void()); |
| 53 MOCK_METHOD0(CloseStream, void()); | 53 MOCK_METHOD0(CloseStream, void()); |
| 54 MOCK_METHOD1(SetVolume, void(double volume)); | 54 MOCK_METHOD1(SetVolume, void(double volume)); |
| 55 }; | 55 }; |
| 56 | 56 |
| 57 ACTION_P2(SendPendingBytes, socket, pending_bytes) { | 57 ACTION_P2(SendPendingBytes, socket, pending_bytes) { |
| 58 socket->Send(&pending_bytes, sizeof(pending_bytes)); | 58 socket->Send(&pending_bytes, sizeof(pending_bytes)); |
| 59 } | 59 } |
| 60 | 60 |
| 61 // Used to terminate a loop from a different thread than the loop belongs to. | 61 // Used to terminate a loop from a different thread than the loop belongs to. |
| 62 // |loop| should be a MessageLoopProxy. | 62 // |task_runner| should be a SingleThreadTaskRunner. |
| 63 ACTION_P(QuitLoop, loop) { | 63 ACTION_P(QuitLoop, task_runner) { |
| 64 loop->PostTask(FROM_HERE, base::MessageLoop::QuitClosure()); | 64 task_runner->PostTask(FROM_HERE, base::MessageLoop::QuitClosure()); |
| 65 } | 65 } |
| 66 | 66 |
| 67 } // namespace. | 67 } // namespace. |
| 68 | 68 |
| 69 class AudioOutputDeviceTest | 69 class AudioOutputDeviceTest |
| 70 : public testing::Test, | 70 : public testing::Test, |
| 71 public testing::WithParamInterface<bool> { | 71 public testing::WithParamInterface<bool> { |
| 72 public: | 72 public: |
| 73 AudioOutputDeviceTest(); | 73 AudioOutputDeviceTest(); |
| 74 ~AudioOutputDeviceTest(); | 74 ~AudioOutputDeviceTest(); |
| (...skipping 30 matching lines...) Expand all Loading... |
| 105 } | 105 } |
| 106 | 106 |
| 107 AudioOutputDeviceTest::AudioOutputDeviceTest() { | 107 AudioOutputDeviceTest::AudioOutputDeviceTest() { |
| 108 default_audio_parameters_.Reset( | 108 default_audio_parameters_.Reset( |
| 109 AudioParameters::AUDIO_PCM_LINEAR, | 109 AudioParameters::AUDIO_PCM_LINEAR, |
| 110 CHANNEL_LAYOUT_STEREO, 2, 48000, 16, 1024); | 110 CHANNEL_LAYOUT_STEREO, 2, 48000, 16, 1024); |
| 111 | 111 |
| 112 audio_output_ipc_ = new MockAudioOutputIPC(); | 112 audio_output_ipc_ = new MockAudioOutputIPC(); |
| 113 audio_device_ = new AudioOutputDevice( | 113 audio_device_ = new AudioOutputDevice( |
| 114 scoped_ptr<AudioOutputIPC>(audio_output_ipc_), | 114 scoped_ptr<AudioOutputIPC>(audio_output_ipc_), |
| 115 io_loop_.message_loop_proxy()); | 115 io_loop_.task_runner()); |
| 116 | 116 |
| 117 audio_device_->Initialize(default_audio_parameters_, | 117 audio_device_->Initialize(default_audio_parameters_, |
| 118 &callback_); | 118 &callback_); |
| 119 | 119 |
| 120 io_loop_.RunUntilIdle(); | 120 io_loop_.RunUntilIdle(); |
| 121 } | 121 } |
| 122 | 122 |
| 123 AudioOutputDeviceTest::~AudioOutputDeviceTest() { | 123 AudioOutputDeviceTest::~AudioOutputDeviceTest() { |
| 124 audio_device_ = NULL; | 124 audio_device_ = NULL; |
| 125 } | 125 } |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 170 // We expect calls to our audio renderer callback, which returns the number | 170 // We expect calls to our audio renderer callback, which returns the number |
| 171 // of frames written to the memory section. | 171 // of frames written to the memory section. |
| 172 // Here's the second place where it gets hacky: There's no way for us to | 172 // Here's the second place where it gets hacky: There's no way for us to |
| 173 // know (without using a sleep loop!) when the AudioOutputDevice has finished | 173 // know (without using a sleep loop!) when the AudioOutputDevice has finished |
| 174 // writing the interleaved audio data into the shared memory section. | 174 // writing the interleaved audio data into the shared memory section. |
| 175 // So, for the sake of this test, we consider the call to Render a sign | 175 // So, for the sake of this test, we consider the call to Render a sign |
| 176 // of success and quit the loop. | 176 // of success and quit the loop. |
| 177 const int kNumberOfFramesToProcess = 0; | 177 const int kNumberOfFramesToProcess = 0; |
| 178 EXPECT_CALL(callback_, Render(_, _)) | 178 EXPECT_CALL(callback_, Render(_, _)) |
| 179 .WillOnce(DoAll( | 179 .WillOnce(DoAll( |
| 180 QuitLoop(io_loop_.message_loop_proxy()), | 180 QuitLoop(io_loop_.task_runner()), |
| 181 Return(kNumberOfFramesToProcess))); | 181 Return(kNumberOfFramesToProcess))); |
| 182 } | 182 } |
| 183 | 183 |
| 184 void AudioOutputDeviceTest::WaitUntilRenderCallback() { | 184 void AudioOutputDeviceTest::WaitUntilRenderCallback() { |
| 185 // Don't hang the test if we never get the Render() callback. | 185 // Don't hang the test if we never get the Render() callback. |
| 186 io_loop_.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitClosure(), | 186 io_loop_.PostDelayedTask(FROM_HERE, base::MessageLoop::QuitClosure(), |
| 187 TestTimeouts::action_timeout()); | 187 TestTimeouts::action_timeout()); |
| 188 io_loop_.Run(); | 188 io_loop_.Run(); |
| 189 } | 189 } |
| 190 | 190 |
| (...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 235 StartAudioDevice(); | 235 StartAudioDevice(); |
| 236 ExpectRenderCallback(); | 236 ExpectRenderCallback(); |
| 237 CreateStream(); | 237 CreateStream(); |
| 238 WaitUntilRenderCallback(); | 238 WaitUntilRenderCallback(); |
| 239 StopAudioDevice(); | 239 StopAudioDevice(); |
| 240 } | 240 } |
| 241 | 241 |
| 242 INSTANTIATE_TEST_CASE_P(Render, AudioOutputDeviceTest, Values(false)); | 242 INSTANTIATE_TEST_CASE_P(Render, AudioOutputDeviceTest, Values(false)); |
| 243 | 243 |
| 244 } // namespace media. | 244 } // namespace media. |
| OLD | NEW |