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 cb7293e6c9719b3438a721658e34bc5f44b4c447..f1915edf1a126274f360816a36d9b1e064c30067 100644 |
--- a/content/renderer/media/audio_renderer_mixer_manager_unittest.cc |
+++ b/content/renderer/media/audio_renderer_mixer_manager_unittest.cc |
@@ -35,7 +35,7 @@ class AudioRendererMixerManagerTest : public testing::Test { |
AudioRendererMixerManagerTest() |
: fake_config_(AudioParameters(), AudioParameters()) { |
AudioParameters output_params( |
- media::AudioParameters::AUDIO_PCM_LOW_LATENCY, |
+ AudioParameters::AUDIO_PCM_LOW_LATENCY, |
media::CHANNEL_LAYOUT_STEREO, |
kSampleRate, |
16, |
@@ -85,7 +85,7 @@ TEST_F(AudioRendererMixerManagerTest, GetRemoveMixer) { |
EXPECT_EQ(mixer_count(), 0); |
media::AudioParameters params1( |
- media::AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate, |
+ AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate, |
kBitsPerChannel, kBufferSize); |
media::AudioRendererMixer* mixer1 = GetMixer(kRenderViewId, params1); |
@@ -101,7 +101,7 @@ TEST_F(AudioRendererMixerManagerTest, GetRemoveMixer) { |
EXPECT_EQ(mixer_count(), 1); |
media::AudioParameters params2( |
- media::AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate * 2, |
+ AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate * 2, |
kBitsPerChannel, kBufferSize * 2); |
media::AudioRendererMixer* mixer2 = GetMixer(kRenderViewId, params2); |
ASSERT_TRUE(mixer2); |
@@ -117,6 +117,54 @@ TEST_F(AudioRendererMixerManagerTest, GetRemoveMixer) { |
EXPECT_EQ(mixer_count(), 0); |
} |
+// Verify GetMixer() correctly deduplicates mixer with irrelevant AudioParameter |
+// differences. |
+TEST_F(AudioRendererMixerManagerTest, MixerReuse) { |
+ EXPECT_CALL(*mock_sink_.get(), Start()).Times(2); |
+ EXPECT_CALL(*mock_sink_.get(), Stop()).Times(2); |
+ EXPECT_EQ(mixer_count(), 0); |
+ |
+ media::AudioParameters params1(AudioParameters::AUDIO_PCM_LINEAR, |
+ kChannelLayout, |
+ kSampleRate, |
+ kBitsPerChannel, |
+ kBufferSize); |
+ media::AudioRendererMixer* mixer1 = GetMixer(kRenderViewId, params1); |
+ ASSERT_TRUE(mixer1); |
+ EXPECT_EQ(mixer_count(), 1); |
+ |
+ // Different formats, bit depths, and buffer sizes should not result in a |
+ // different mixer. |
+ media::AudioParameters params2(AudioParameters::AUDIO_PCM_LOW_LATENCY, |
+ kChannelLayout, |
+ kSampleRate, |
+ kBitsPerChannel * 2, |
+ kBufferSize * 2, |
+ AudioParameters::NO_EFFECTS); |
+ EXPECT_EQ(mixer1, GetMixer(kRenderViewId, params2)); |
+ EXPECT_EQ(mixer_count(), 1); |
+ RemoveMixer(kRenderViewId, params2); |
+ EXPECT_EQ(mixer_count(), 1); |
+ |
+ // Modify some parameters that do matter. |
+ media::AudioParameters params3(AudioParameters::AUDIO_PCM_LOW_LATENCY, |
+ media::CHANNEL_LAYOUT_MONO, |
+ kSampleRate * 2, |
+ kBitsPerChannel, |
+ kBufferSize, |
+ AudioParameters::NO_EFFECTS); |
+ ASSERT_NE(params3.channel_layout(), params1.channel_layout()); |
+ |
+ EXPECT_NE(mixer1, GetMixer(kRenderViewId, params3)); |
+ EXPECT_EQ(mixer_count(), 2); |
+ RemoveMixer(kRenderViewId, params3); |
+ EXPECT_EQ(mixer_count(), 1); |
+ |
+ // Remove final mixer. |
+ RemoveMixer(kRenderViewId, params1); |
+ EXPECT_EQ(mixer_count(), 0); |
+} |
+ |
// Verify CreateInput() provides AudioRendererMixerInput with the appropriate |
// callbacks and they are working as expected. Also, verify that separate |
// mixers are created for separate render views, even though the AudioParameters |
@@ -128,7 +176,7 @@ TEST_F(AudioRendererMixerManagerTest, CreateInput) { |
EXPECT_CALL(*mock_sink_.get(), Stop()).Times(2); |
media::AudioParameters params( |
- media::AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate, |
+ AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate, |
kBitsPerChannel, kBufferSize); |
// Create two mixer inputs and ensure this doesn't instantiate any mixers yet. |