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

Unified Diff: media/base/audio_renderer_mixer_input_unittest.cc

Issue 1942803002: Caching AudioOutputDevice instances in mixer manager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebase, fix for sleep() compile error on win and a bit of cleanup around timeouts. Created 4 years, 7 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
Index: media/base/audio_renderer_mixer_input_unittest.cc
diff --git a/media/base/audio_renderer_mixer_input_unittest.cc b/media/base/audio_renderer_mixer_input_unittest.cc
index 814b8ede316c5c1e13a5c26722f3406477b35539..d9d33de3fbb6aece1804c17a2670c0cf6013fdf8 100644
--- a/media/base/audio_renderer_mixer_input_unittest.cc
+++ b/media/base/audio_renderer_mixer_input_unittest.cc
@@ -22,7 +22,7 @@ static const int kBitsPerChannel = 16;
static const int kSampleRate = 48000;
static const int kBufferSize = 8192;
static const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_STEREO;
-static const char kDefaultDeviceId[] = "";
+static const char kDefaultDeviceId[] = "default";
static const char kUnauthorizedDeviceId[] = "unauthorized";
static const char kNonexistentDeviceId[] = "nonexistent";
@@ -45,6 +45,8 @@ class AudioRendererMixerInputTest : public testing::Test {
base::Unretained(this)),
base::Bind(&AudioRendererMixerInputTest::RemoveMixer,
base::Unretained(this)),
+ base::Bind(&AudioRendererMixerInputTest::GetOutputDeviceInfo,
+ base::Unretained(this)),
device_id, url::Origin());
}
@@ -64,15 +66,20 @@ class AudioRendererMixerInputTest : public testing::Test {
return nullptr;
}
- size_t idx = device_id.empty() ? 0 : 1;
+ size_t idx = (device_id == kDefaultDeviceId) ? 0 : 1;
if (!mixers_[idx]) {
- scoped_refptr<MockAudioRendererSink> sink = new MockAudioRendererSink();
- EXPECT_CALL(*sink.get(), Start());
- EXPECT_CALL(*sink.get(), Stop());
-
- mixers_[idx].reset(new AudioRendererMixer(audio_parameters_, sink));
+ sinks_[idx] =
+ new MockAudioRendererSink(device_id, OUTPUT_DEVICE_STATUS_OK);
+ EXPECT_CALL(*(sinks_[idx].get()), Start());
+ EXPECT_CALL(*(sinks_[idx].get()), Stop());
+
+ mixers_[idx].reset(new AudioRendererMixer(
+ audio_parameters_, sinks_[idx].get(),
+ base::Bind(&AudioRendererMixerInputTest::ReleaseSink,
+ base::Unretained(this))));
}
EXPECT_CALL(*this, RemoveMixer(testing::_, device_id, testing::_));
+ EXPECT_CALL(*this, ReleaseSink(sinks_[idx].get()));
if (device_status)
*device_status = OUTPUT_DEVICE_STATUS_OK;
@@ -88,7 +95,13 @@ class AudioRendererMixerInputTest : public testing::Test {
const std::string&,
const url::Origin&));
+ MOCK_METHOD2(GetOutputDeviceInfo,
+ OutputDeviceInfo(const std::string&, const url::Origin&));
+
+ MOCK_METHOD1(ReleaseSink, void(AudioRendererSink*));
+
MOCK_METHOD1(SwitchCallbackCalled, void(OutputDeviceStatus));
+
void SwitchCallback(base::RunLoop* loop, OutputDeviceStatus result) {
SwitchCallbackCalled(result);
loop->Quit();
@@ -100,6 +113,7 @@ class AudioRendererMixerInputTest : public testing::Test {
virtual ~AudioRendererMixerInputTest() {}
AudioParameters audio_parameters_;
+ scoped_refptr<MockAudioRendererSink> sinks_[2]; // Must outlive mixers.
std::unique_ptr<AudioRendererMixer> mixers_[2];
scoped_refptr<AudioRendererMixerInput> mixer_input_;
std::unique_ptr<FakeAudioRenderCallback> fake_callback_;
@@ -109,6 +123,25 @@ class AudioRendererMixerInputTest : public testing::Test {
DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerInputTest);
};
+TEST_F(AudioRendererMixerInputTest, GetDeviceInfo) {
+ ON_CALL(*this, GetOutputDeviceInfo(testing::_, testing::_))
+ .WillByDefault(testing::Return(OutputDeviceInfo()));
+ EXPECT_CALL(*this, GetOutputDeviceInfo(kDefaultDeviceId, testing::_))
+ .Times(testing::Exactly(1));
+
+ // Calling GetOutputDeviceInfo() should result in the mock call, since there
+ // is no mixer created yet for mixer input.
+ mixer_input_->GetOutputDeviceInfo();
+ mixer_input_->Start();
+
+ // This call should be directed to the mixer and should not result in the mock
+ // call.
+ EXPECT_STREQ(kDefaultDeviceId,
+ mixer_input_->GetOutputDeviceInfo().device_id().c_str());
+
+ mixer_input_->Stop();
+}
+
// Test that getting and setting the volume work as expected. The volume is
// returned from ProvideInput() only when playing.
TEST_F(AudioRendererMixerInputTest, GetSetVolume) {

Powered by Google App Engine
This is Rietveld 408576698