Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1192)

Unified Diff: media/audio/virtual_audio_output_stream_unittest.cc

Issue 11416350: Tab Audio Mirroring: WebContentsAudioInputStream is a new implementation which represents the lifet… (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebased. Created 7 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « media/audio/virtual_audio_output_stream.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: media/audio/virtual_audio_output_stream_unittest.cc
diff --git a/media/audio/virtual_audio_output_stream_unittest.cc b/media/audio/virtual_audio_output_stream_unittest.cc
index ae267f5f24a4b3d7d77434d50153522a6aee758c..3dc4a214a1cbf40cd62eb3274d28e44577bf711a 100644
--- a/media/audio/virtual_audio_output_stream_unittest.cc
+++ b/media/audio/virtual_audio_output_stream_unittest.cc
@@ -2,7 +2,10 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
+#include "base/bind.h"
+#include "base/bind_helpers.h"
#include "base/message_loop.h"
+#include "base/message_loop_proxy.h"
#include "base/synchronization/waitable_event.h"
#include "media/audio/audio_manager.h"
#include "media/audio/simple_sources.h"
@@ -17,10 +20,10 @@ namespace media {
class MockVirtualAudioInputStream : public VirtualAudioInputStream {
public:
- MockVirtualAudioInputStream(AudioManagerBase* manager,
- AudioParameters params,
- base::MessageLoopProxy* message_loop)
- : VirtualAudioInputStream(manager, params, message_loop) {}
+ MockVirtualAudioInputStream(const AudioParameters& params,
+ base::MessageLoopProxy* message_loop,
+ const AfterCloseCallback& after_close_cb)
+ : VirtualAudioInputStream(params, message_loop, after_close_cb) {}
~MockVirtualAudioInputStream() {}
MOCK_METHOD2(AddOutputStream, void(VirtualAudioOutputStream* stream,
@@ -39,91 +42,116 @@ class MockAudioDeviceListener : public AudioManager::AudioDeviceListener {
class VirtualAudioOutputStreamTest : public testing::Test {
public:
+ VirtualAudioOutputStreamTest()
+ : audio_manager_(AudioManager::Create()) {}
+
+ scoped_refptr<base::MessageLoopProxy> audio_message_loop() const {
+ return audio_manager_->GetMessageLoop();
+ }
+
void ListenAndCreateVirtualOnAudioThread(
- AudioManager* manager, AudioManager::AudioDeviceListener* listener) {
- manager->AddOutputDeviceChangeListener(listener);
+ AudioManager::AudioDeviceListener* listener) {
+ audio_manager_->AddOutputDeviceChangeListener(listener);
AudioParameters params(
AudioParameters::AUDIO_VIRTUAL, CHANNEL_LAYOUT_MONO, 8000, 8, 128);
- AudioInputStream* stream = manager->MakeAudioInputStream(params, "1");
- stream->Close();
- signal_.Signal();
+ AudioInputStream* stream =
+ audio_manager_->MakeAudioInputStream(params, "1");
+ stream->Open();
+ stream->Close(); // AudioManager deletes |stream|.
}
void RemoveListenerOnAudioThread(
- AudioManager* manager, AudioManager::AudioDeviceListener* listener) {
- manager->RemoveOutputDeviceChangeListener(listener);
- signal_.Signal();
+ AudioManager::AudioDeviceListener* listener) {
+ audio_manager_->RemoveOutputDeviceChangeListener(listener);
}
- protected:
- VirtualAudioOutputStreamTest() : signal_(false, false) {}
-
- base::WaitableEvent signal_;
+ void SyncWithAudioThread() {
+ base::WaitableEvent done(false, false);
+ audio_message_loop()->PostTask(
+ FROM_HERE, base::Bind(&base::WaitableEvent::Signal,
+ base::Unretained(&done)));
+ done.Wait();
+ }
private:
+ scoped_ptr<AudioManager> audio_manager_;
+
DISALLOW_COPY_AND_ASSIGN(VirtualAudioOutputStreamTest);
};
TEST_F(VirtualAudioOutputStreamTest, StartStopStartStop) {
- scoped_ptr<AudioManager> audio_manager(AudioManager::Create());
-
- MessageLoop message_loop;
+ static const int kCycles = 3;
AudioParameters params(
AudioParameters::AUDIO_VIRTUAL, CHANNEL_LAYOUT_MONO, 8000, 8, 128);
AudioParameters output_params(
- AudioParameters::AUDIO_PCM_LINEAR, CHANNEL_LAYOUT_MONO, 8000, 8, 128);
+ AudioParameters::AUDIO_FAKE, CHANNEL_LAYOUT_MONO, 8000, 8, 128);
- MockVirtualAudioInputStream input_stream(
- static_cast<AudioManagerBase*>(audio_manager.get()),
- params,
- message_loop.message_loop_proxy());
-
- EXPECT_CALL(input_stream, AddOutputStream(_, _)).Times(2);
- EXPECT_CALL(input_stream, RemoveOutputStream(_, _)).Times(2);
+ MockVirtualAudioInputStream* const input_stream =
+ new MockVirtualAudioInputStream(
+ params, audio_message_loop(),
+ base::Bind(&base::DeletePointer<VirtualAudioInputStream>));
+ audio_message_loop()->PostTask(
+ FROM_HERE, base::Bind(
+ base::IgnoreResult(&MockVirtualAudioInputStream::Open),
+ base::Unretained(input_stream)));
+
+ VirtualAudioOutputStream* const output_stream =
+ new VirtualAudioOutputStream(
+ output_params, audio_message_loop(), input_stream,
+ base::Bind(&base::DeletePointer<VirtualAudioOutputStream>));
+
+ EXPECT_CALL(*input_stream, AddOutputStream(output_stream, _))
+ .Times(kCycles);
+ EXPECT_CALL(*input_stream, RemoveOutputStream(output_stream, _))
+ .Times(kCycles);
+
+ audio_message_loop()->PostTask(
+ FROM_HERE, base::Bind(base::IgnoreResult(&VirtualAudioOutputStream::Open),
+ base::Unretained(output_stream)));
+ SineWaveAudioSource source(CHANNEL_LAYOUT_STEREO, 200.0, 128);
+ for (int i = 0; i < kCycles; ++i) {
+ audio_message_loop()->PostTask(
+ FROM_HERE, base::Bind(&VirtualAudioOutputStream::Start,
+ base::Unretained(output_stream),
+ &source));
+ audio_message_loop()->PostTask(
+ FROM_HERE, base::Bind(&VirtualAudioOutputStream::Stop,
+ base::Unretained(output_stream)));
+ }
+ audio_message_loop()->PostTask(
+ FROM_HERE, base::Bind(&VirtualAudioOutputStream::Close,
+ base::Unretained(output_stream)));
- scoped_ptr<VirtualAudioOutputStream> output_stream(
- VirtualAudioOutputStream::MakeStream(
- static_cast<AudioManagerBase*>(audio_manager.get()),
- output_params,
- message_loop.message_loop_proxy(),
- &input_stream));
+ audio_message_loop()->PostTask(
+ FROM_HERE, base::Bind(&MockVirtualAudioInputStream::Close,
+ base::Unretained(input_stream)));
- SineWaveAudioSource source(CHANNEL_LAYOUT_STEREO, 200.0, 128);
- output_stream->Start(&source);
- output_stream->Stop();
- output_stream->Start(&source);
- output_stream->Stop();
- // Can't Close() here because we didn't create this output stream is not owned
- // by the audio manager.
+ SyncWithAudioThread();
}
// Tests that we get notifications to reattach output streams when we create a
// VirtualAudioInputStream.
TEST_F(VirtualAudioOutputStreamTest, OutputStreamsNotified) {
- scoped_ptr<AudioManager> audio_manager(AudioManager::Create());
-
MockAudioDeviceListener mock_listener;
EXPECT_CALL(mock_listener, OnDeviceChange()).Times(2);
- audio_manager->GetMessageLoop()->PostTask(
+ audio_message_loop()->PostTask(
FROM_HERE, base::Bind(
&VirtualAudioOutputStreamTest::ListenAndCreateVirtualOnAudioThread,
base::Unretained(this),
- audio_manager.get(),
&mock_listener));
- signal_.Wait();
+ SyncWithAudioThread();
- audio_manager->GetMessageLoop()->PostTask(
+ audio_message_loop()->PostTask(
FROM_HERE, base::Bind(
&VirtualAudioOutputStreamTest::RemoveListenerOnAudioThread,
base::Unretained(this),
- audio_manager.get(),
&mock_listener));
- signal_.Wait();
+ SyncWithAudioThread();
}
} // namespace media
« no previous file with comments | « media/audio/virtual_audio_output_stream.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698