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

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: Review comments addressed, map->vector in AudioRendererCacheImpl 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..6a094f4cc2e4dbce566c63da512a051760d16af5 100644
--- a/media/base/audio_renderer_mixer_input_unittest.cc
+++ b/media/base/audio_renderer_mixer_input_unittest.cc
@@ -11,6 +11,7 @@
#include "base/run_loop.h"
#include "media/base/audio_renderer_mixer.h"
#include "media/base/audio_renderer_mixer_input.h"
+#include "media/base/audio_renderer_mixer_pool.h"
#include "media/base/fake_audio_render_callback.h"
#include "media/base/mock_audio_renderer_sink.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -21,12 +22,14 @@ namespace media {
static const int kBitsPerChannel = 16;
static const int kSampleRate = 48000;
static const int kBufferSize = 8192;
+static const int kRenderFrameId = 42;
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";
-class AudioRendererMixerInputTest : public testing::Test {
+class AudioRendererMixerInputTest : public testing::Test,
+ AudioRendererMixerPool {
public:
AudioRendererMixerInputTest() {
audio_parameters_ = AudioParameters(
@@ -40,15 +43,12 @@ class AudioRendererMixerInputTest : public testing::Test {
}
void CreateMixerInput(const std::string& device_id) {
- mixer_input_ = new AudioRendererMixerInput(
- base::Bind(&AudioRendererMixerInputTest::GetMixer,
- base::Unretained(this)),
- base::Bind(&AudioRendererMixerInputTest::RemoveMixer,
- base::Unretained(this)),
- device_id, url::Origin());
+ mixer_input_ = new AudioRendererMixerInput(this, kRenderFrameId, device_id,
+ url::Origin());
}
- AudioRendererMixer* GetMixer(const AudioParameters& params,
+ AudioRendererMixer* GetMixer(int owner_id,
+ const AudioParameters& params,
const std::string& device_id,
const url::Origin& security_origin,
OutputDeviceStatus* device_status) {
@@ -64,15 +64,18 @@ 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());
+ 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_, sink));
+ mixers_[idx].reset(
+ new AudioRendererMixer(audio_parameters_, sinks_[idx].get()));
}
- EXPECT_CALL(*this, RemoveMixer(testing::_, device_id, testing::_));
+ EXPECT_CALL(*this,
+ ReturnMixer(kRenderFrameId, testing::_, device_id, testing::_));
if (device_status)
*device_status = OUTPUT_DEVICE_STATUS_OK;
@@ -83,12 +86,18 @@ class AudioRendererMixerInputTest : public testing::Test {
return mixer_input_->ProvideInput(audio_bus_.get(), base::TimeDelta());
}
- MOCK_METHOD3(RemoveMixer,
- void(const AudioParameters&,
+ MOCK_METHOD4(ReturnMixer,
+ void(int,
+ const AudioParameters&,
const std::string&,
const url::Origin&));
+ MOCK_METHOD4(
+ GetOutputDeviceInfo,
+ OutputDeviceInfo(int, int, const std::string&, const url::Origin&));
+
MOCK_METHOD1(SwitchCallbackCalled, void(OutputDeviceStatus));
+
void SwitchCallback(base::RunLoop* loop, OutputDeviceStatus result) {
SwitchCallbackCalled(result);
loop->Quit();
@@ -100,6 +109,7 @@ class AudioRendererMixerInputTest : public testing::Test {
virtual ~AudioRendererMixerInputTest() {}
AudioParameters audio_parameters_;
+ scoped_refptr<MockAudioRendererSink> sinks_[2];
std::unique_ptr<AudioRendererMixer> mixers_[2];
scoped_refptr<AudioRendererMixerInput> mixer_input_;
std::unique_ptr<FakeAudioRenderCallback> fake_callback_;
@@ -109,6 +119,27 @@ class AudioRendererMixerInputTest : public testing::Test {
DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerInputTest);
};
+TEST_F(AudioRendererMixerInputTest, GetDeviceInfo) {
+ ON_CALL(*this,
+ GetOutputDeviceInfo(testing::_, testing::_, testing::_, testing::_))
+ .WillByDefault(testing::Return(OutputDeviceInfo()));
+ EXPECT_CALL(*this, GetOutputDeviceInfo(kRenderFrameId, 0 /* session id */,
+ 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