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

Unified Diff: content/renderer/media/audio_renderer_mixer_manager_unittest.cc

Issue 1809093003: Moving SwitchOutputDevice out of OutputDevice interface, eliminating OutputDevice (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: rebase Created 4 years, 9 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: content/renderer/media/audio_renderer_mixer_manager_unittest.cc
diff --git a/content/renderer/media/audio_renderer_mixer_manager_unittest.cc b/content/renderer/media/audio_renderer_mixer_manager_unittest.cc
index b1371b222832965662e90c8e084c6c1208c4596b..ac2a815e5b1570babfeea5be9ad1c1c571a47c82 100644
--- a/content/renderer/media/audio_renderer_mixer_manager_unittest.cc
+++ b/content/renderer/media/audio_renderer_mixer_manager_unittest.cc
@@ -6,16 +6,18 @@
#include "base/macros.h"
#include "base/memory/ref_counted.h"
#include "base/memory/scoped_ptr.h"
+#include "content/renderer/media/audio_device_factory.h"
#include "content/renderer/media/audio_renderer_mixer_manager.h"
-#include "ipc/ipc_message.h"
+#include "media/audio/audio_manager_base.h"
#include "media/audio/audio_parameters.h"
-#include "media/base/audio_hardware_config.h"
+#include "media/base/audio_capturer_source.h"
#include "media/base/audio_renderer_mixer.h"
#include "media/base/audio_renderer_mixer_input.h"
#include "media/base/fake_audio_render_callback.h"
#include "media/base/mock_audio_renderer_sink.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
+#include "url/gurl.h"
namespace content {
@@ -25,24 +27,26 @@ static const int kBufferSize = 8192;
static const media::ChannelLayout kChannelLayout = media::CHANNEL_LAYOUT_STEREO;
static const media::ChannelLayout kAnotherChannelLayout =
media::CHANNEL_LAYOUT_2_1;
-static const std::string kDefaultDeviceId;
-static const url::Origin kSecurityOrigin;
+static const char* const kDefaultDeviceId =
+ media::AudioManagerBase::kDefaultDeviceId;
+static const char kAnotherDeviceId[] = "another-device-id";
+static const char kNonexistentDeviceId[] = "nonexistent-device-id";
static const int kRenderFrameId = 124;
static const int kAnotherRenderFrameId = 678;
using media::AudioParameters;
-class AudioRendererMixerManagerTest : public testing::Test {
+class AudioRendererMixerManagerTest : public testing::Test,
+ public AudioDeviceFactory {
public:
- AudioRendererMixerManagerTest() {
- manager_.reset(new AudioRendererMixerManager());
-
- // We don't want to deal with instantiating a real AudioOutputDevice since
- // it's not important to our testing, so we inject a mock.
- mock_sink_ = new media::MockAudioRendererSink();
- manager_->SetAudioRendererSinkForTesting(mock_sink_.get());
- }
+ AudioRendererMixerManagerTest()
+ : manager_(new AudioRendererMixerManager()),
+ mock_sink_(new media::MockAudioRendererSink()),
+ mock_sink_no_device_(new media::MockAudioRendererSink(
+ kNonexistentDeviceId,
+ media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND)),
+ kSecurityOrigin2(GURL("http://localhost")) {}
media::AudioRendererMixer* GetMixer(
int source_render_frame_id,
@@ -62,20 +66,55 @@ class AudioRendererMixerManagerTest : public testing::Test {
security_origin);
}
- void UseNonexistentSink() {
- mock_sink_ = new media::MockAudioRendererSink(
- media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND);
- manager_->SetAudioRendererSinkForTesting(mock_sink_.get());
- }
-
// Number of instantiated mixers.
int mixer_count() {
return manager_->mixers_.size();
}
protected:
+ MOCK_METHOD1(CreateAudioCapturerSource,
+ scoped_refptr<media::AudioCapturerSource>(int));
+ MOCK_METHOD5(
+ CreateSwitchableAudioRendererSink,
+ scoped_refptr<media::SwitchableAudioRendererSink>(SourceType,
+ int,
+ int,
+ const std::string&,
+ const url::Origin&));
+ MOCK_METHOD5(CreateAudioRendererSink,
+ scoped_refptr<media::AudioRendererSink>(SourceType,
+ int,
+ int,
+ const std::string&,
+ const url::Origin&));
+
+ scoped_refptr<media::AudioRendererSink> CreateAudioRendererMixerSink(
+ int render_frame_id,
+ int session_id,
+ const std::string& device_id,
+ const url::Origin& security_origin) {
+ if ((device_id == kDefaultDeviceId) || (device_id == kAnotherDeviceId)) {
+ // We don't care about separate sinks for these devices
+ return mock_sink_;
+ }
+ if (device_id == kNonexistentDeviceId) {
+ return mock_sink_no_device_;
+ }
+ if (device_id.empty()) {
+ return mock_sink_;
+ }
+
+ NOTREACHED();
+ return nullptr;
+ }
+
scoped_ptr<AudioRendererMixerManager> manager_;
scoped_refptr<media::MockAudioRendererSink> mock_sink_;
+ scoped_refptr<media::MockAudioRendererSink> mock_sink_no_device_;
+
+ // To avoid global/static non-POD constants.
+ const url::Origin kSecurityOrigin;
+ const url::Origin kSecurityOrigin2;
private:
DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerManagerTest);
@@ -90,7 +129,7 @@ TEST_F(AudioRendererMixerManagerTest, GetRemoveMixer) {
EXPECT_CALL(*mock_sink_.get(), Stop()).Times(2);
// There should be no mixers outstanding to start with.
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(0, mixer_count());
media::AudioParameters params1(
AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate,
@@ -99,16 +138,16 @@ TEST_F(AudioRendererMixerManagerTest, GetRemoveMixer) {
media::AudioRendererMixer* mixer1 = GetMixer(
kRenderFrameId, params1, kDefaultDeviceId, kSecurityOrigin, nullptr);
ASSERT_TRUE(mixer1);
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
// The same parameters should return the same mixer1.
EXPECT_EQ(mixer1, GetMixer(kRenderFrameId, params1, kDefaultDeviceId,
kSecurityOrigin, nullptr));
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
// Remove the extra mixer we just acquired.
RemoveMixer(kRenderFrameId, params1, kDefaultDeviceId, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
media::AudioParameters params2(
AudioParameters::AUDIO_PCM_LINEAR, kAnotherChannelLayout, kSampleRate * 2,
@@ -116,16 +155,16 @@ TEST_F(AudioRendererMixerManagerTest, GetRemoveMixer) {
media::AudioRendererMixer* mixer2 = GetMixer(
kRenderFrameId, params2, kDefaultDeviceId, kSecurityOrigin, nullptr);
ASSERT_TRUE(mixer2);
- EXPECT_EQ(mixer_count(), 2);
+ EXPECT_EQ(2, mixer_count());
// Different parameters should result in a different mixer1.
EXPECT_NE(mixer1, mixer2);
// Remove both outstanding mixers.
RemoveMixer(kRenderFrameId, params1, kDefaultDeviceId, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
RemoveMixer(kRenderFrameId, params2, kDefaultDeviceId, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(0, mixer_count());
}
// Verify GetMixer() correctly deduplicates mixer with irrelevant AudioParameter
@@ -143,7 +182,7 @@ TEST_F(AudioRendererMixerManagerTest, MixerReuse) {
media::AudioRendererMixer* mixer1 = GetMixer(
kRenderFrameId, params1, kDefaultDeviceId, kSecurityOrigin, nullptr);
ASSERT_TRUE(mixer1);
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
// Different sample rates, formats, bit depths, and buffer sizes should not
// result in a different mixer.
@@ -154,9 +193,9 @@ TEST_F(AudioRendererMixerManagerTest, MixerReuse) {
kBufferSize * 2);
EXPECT_EQ(mixer1, GetMixer(kRenderFrameId, params2, kDefaultDeviceId,
kSecurityOrigin, nullptr));
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
RemoveMixer(kRenderFrameId, params2, kDefaultDeviceId, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
// Modify some parameters that do matter: channel layout
media::AudioParameters params3(AudioParameters::AUDIO_PCM_LOW_LATENCY,
@@ -168,13 +207,13 @@ TEST_F(AudioRendererMixerManagerTest, MixerReuse) {
EXPECT_NE(mixer1, GetMixer(kRenderFrameId, params3, kDefaultDeviceId,
kSecurityOrigin, nullptr));
- EXPECT_EQ(mixer_count(), 2);
+ EXPECT_EQ(2, mixer_count());
RemoveMixer(kRenderFrameId, params3, kDefaultDeviceId, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
// Remove final mixer.
RemoveMixer(kRenderFrameId, params1, kDefaultDeviceId, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(0, mixer_count());
}
// Verify CreateInput() provides AudioRendererMixerInput with the appropriate
@@ -192,33 +231,33 @@ TEST_F(AudioRendererMixerManagerTest, CreateInput) {
kBitsPerChannel, kBufferSize);
// Create two mixer inputs and ensure this doesn't instantiate any mixers yet.
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(0, mixer_count());
media::FakeAudioRenderCallback callback(0);
scoped_refptr<media::AudioRendererMixerInput> input(
manager_->CreateInput(kRenderFrameId, kDefaultDeviceId, kSecurityOrigin));
input->Initialize(params, &callback);
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(0, mixer_count());
media::FakeAudioRenderCallback another_callback(1);
scoped_refptr<media::AudioRendererMixerInput> another_input(
manager_->CreateInput(kAnotherRenderFrameId, kDefaultDeviceId,
kSecurityOrigin));
another_input->Initialize(params, &another_callback);
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(0, mixer_count());
// Implicitly test that AudioRendererMixerInput was provided with the expected
// callbacks needed to acquire an AudioRendererMixer and remove it.
input->Start();
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
another_input->Start();
- EXPECT_EQ(mixer_count(), 2);
+ EXPECT_EQ(2, mixer_count());
// Destroying the inputs should destroy the mixers.
input->Stop();
- input = NULL;
- EXPECT_EQ(mixer_count(), 1);
+ input = nullptr;
+ EXPECT_EQ(1, mixer_count());
another_input->Stop();
- another_input = NULL;
- EXPECT_EQ(mixer_count(), 0);
+ another_input = nullptr;
+ EXPECT_EQ(0, mixer_count());
}
// Verify GetMixer() correctly creates different mixers with the same
@@ -226,7 +265,7 @@ TEST_F(AudioRendererMixerManagerTest, CreateInput) {
TEST_F(AudioRendererMixerManagerTest, MixerDevices) {
EXPECT_CALL(*mock_sink_.get(), Start()).Times(3);
EXPECT_CALL(*mock_sink_.get(), Stop()).Times(3);
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(0, mixer_count());
media::AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR,
kChannelLayout, kSampleRate, kBitsPerChannel,
@@ -234,48 +273,44 @@ TEST_F(AudioRendererMixerManagerTest, MixerDevices) {
media::AudioRendererMixer* mixer1 = GetMixer(
kRenderFrameId, params, kDefaultDeviceId, kSecurityOrigin, nullptr);
ASSERT_TRUE(mixer1);
- EXPECT_EQ(mixer_count(), 1);
+ EXPECT_EQ(1, mixer_count());
- std::string device_id2("fake-device-id");
- media::AudioRendererMixer* mixer2 =
- GetMixer(kRenderFrameId, params, device_id2, kSecurityOrigin, nullptr);
+ media::AudioRendererMixer* mixer2 = GetMixer(
+ kRenderFrameId, params, kAnotherDeviceId, kSecurityOrigin, nullptr);
ASSERT_TRUE(mixer2);
- EXPECT_EQ(mixer_count(), 2);
+ EXPECT_EQ(2, mixer_count());
EXPECT_NE(mixer1, mixer2);
- url::Origin security_origin2(GURL("http://localhost"));
media::AudioRendererMixer* mixer3 = GetMixer(
- kRenderFrameId, params, kDefaultDeviceId, security_origin2, nullptr);
+ kRenderFrameId, params, kAnotherDeviceId, kSecurityOrigin2, nullptr);
ASSERT_TRUE(mixer3);
- EXPECT_EQ(mixer_count(), 3);
+ EXPECT_EQ(3, mixer_count());
EXPECT_NE(mixer1, mixer3);
EXPECT_NE(mixer2, mixer3);
RemoveMixer(kRenderFrameId, params, kDefaultDeviceId, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 2);
- RemoveMixer(kRenderFrameId, params, device_id2, kSecurityOrigin);
- EXPECT_EQ(mixer_count(), 1);
- RemoveMixer(kRenderFrameId, params, kDefaultDeviceId, security_origin2);
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(2, mixer_count());
+ RemoveMixer(kRenderFrameId, params, kAnotherDeviceId, kSecurityOrigin);
+ EXPECT_EQ(1, mixer_count());
+ RemoveMixer(kRenderFrameId, params, kAnotherDeviceId, kSecurityOrigin2);
+ EXPECT_EQ(0, mixer_count());
}
// Verify that GetMixer() correctly returns a null mixer and an appropriate
// status code when a nonexistent device is requested.
TEST_F(AudioRendererMixerManagerTest, NonexistentDevice) {
- EXPECT_EQ(mixer_count(), 0);
- UseNonexistentSink();
+ EXPECT_EQ(0, mixer_count());
media::AudioParameters params(AudioParameters::AUDIO_PCM_LINEAR,
kChannelLayout, kSampleRate, kBitsPerChannel,
kBufferSize);
- std::string nonexistent_device_id("nonexistent-device-id");
media::OutputDeviceStatus device_status = media::OUTPUT_DEVICE_STATUS_OK;
- EXPECT_CALL(*mock_sink_.get(), Stop());
+ EXPECT_CALL(*mock_sink_no_device_.get(), Stop());
media::AudioRendererMixer* mixer =
- GetMixer(kRenderFrameId, params, nonexistent_device_id, kSecurityOrigin,
+ GetMixer(kRenderFrameId, params, kNonexistentDeviceId, kSecurityOrigin,
&device_status);
EXPECT_FALSE(mixer);
- EXPECT_EQ(device_status, media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND);
- EXPECT_EQ(mixer_count(), 0);
+ EXPECT_EQ(media::OUTPUT_DEVICE_STATUS_ERROR_NOT_FOUND, device_status);
+ EXPECT_EQ(0, mixer_count());
}
} // namespace content
« no previous file with comments | « content/renderer/media/audio_renderer_mixer_manager.cc ('k') | content/renderer/media/track_audio_renderer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698