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

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

Issue 10636036: Enable renderer side mixing behind a flag. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Remove new mixer address != old mixer address test. Created 8 years, 5 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
new file mode 100644
index 0000000000000000000000000000000000000000..92a44d44c608a601daf7dd3b99e1c331578c1c1e
--- /dev/null
+++ b/content/renderer/media/audio_renderer_mixer_manager_unittest.cc
@@ -0,0 +1,131 @@
+// Copyright (c) 2012 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#include "base/memory/scoped_ptr.h"
+#include "content/renderer/media/audio_device_factory.h"
+#include "content/renderer/media/audio_renderer_mixer_manager.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"
+
+namespace content {
+
+static const int kBitsPerChannel = 16;
+static const int kSampleRate = 48000;
+static const int kBufferSize = 8192;
+static const ChannelLayout kChannelLayout = CHANNEL_LAYOUT_STEREO;
+
+// By sub-classing AudioDeviceFactory we've overridden the factory to use our
+// CreateAudioDevice() method globally.
+class MockAudioRenderSinkFactory : public AudioDeviceFactory {
+ public:
+ MockAudioRenderSinkFactory() {}
+ virtual ~MockAudioRenderSinkFactory() {}
+
+ protected:
+ virtual media::MockAudioRendererSink* CreateAudioDevice() {
+ media::MockAudioRendererSink* sink = new media::MockAudioRendererSink();
+ EXPECT_CALL(*sink, Start());
+ EXPECT_CALL(*sink, Stop());
+ return sink;
+ }
+
+ DISALLOW_COPY_AND_ASSIGN(MockAudioRenderSinkFactory);
+};
+
+class AudioRendererMixerManagerTest : public testing::Test {
+ public:
+ AudioRendererMixerManagerTest() {
+ // We don't want to deal with instantiating a real AudioDevice since it's
+ // not important to our testing, so use a mock AudioDeviceFactory.
+ mock_sink_factory_.reset(new MockAudioRenderSinkFactory());
+ manager_.reset(new AudioRendererMixerManager(kSampleRate, kBufferSize));
+ }
+
+ media::AudioRendererMixer* GetMixer(const media::AudioParameters& params) {
+ return manager_->GetMixer(params);
+ }
+
+ void RemoveMixer(const media::AudioParameters& params) {
+ return manager_->RemoveMixer(params);
+ }
+
+ // Number of instantiated mixers.
+ int mixer_count() {
+ return manager_->mixers_.size();
+ }
+
+ protected:
+ scoped_ptr<MockAudioRenderSinkFactory> mock_sink_factory_;
+ scoped_ptr<AudioRendererMixerManager> manager_;
+
+ DISALLOW_COPY_AND_ASSIGN(AudioRendererMixerManagerTest);
+};
+
+// Verify GetMixer() and RemoveMixer() both work as expected; particularly with
+// respect to the explicit ref counting done.
+TEST_F(AudioRendererMixerManagerTest, GetRemoveMixer) {
+ // There should be no mixers outstanding to start with.
+ EXPECT_EQ(mixer_count(), 0);
+
+ media::AudioParameters params1(
+ media::AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate,
+ kBitsPerChannel, kBufferSize);
+
+ media::AudioRendererMixer* mixer1 = GetMixer(params1);
+ ASSERT_TRUE(mixer1);
+ EXPECT_EQ(mixer_count(), 1);
+
+ // The same parameters should return the same mixer1.
+ EXPECT_EQ(mixer1, GetMixer(params1));
+ EXPECT_EQ(mixer_count(), 1);
+
+ // Remove the extra mixer we just acquired.
+ RemoveMixer(params1);
+ EXPECT_EQ(mixer_count(), 1);
+
+ media::AudioParameters params2(
+ media::AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate * 2,
+ kBitsPerChannel, kBufferSize * 2);
+ media::AudioRendererMixer* mixer2 = GetMixer(params2);
+ ASSERT_TRUE(mixer2);
+ EXPECT_EQ(mixer_count(), 2);
+
+ // Different parameters should result in a different mixer1.
+ EXPECT_NE(mixer1, mixer2);
+
+ // Remove both outstanding mixers.
+ RemoveMixer(params1);
+ EXPECT_EQ(mixer_count(), 1);
+ RemoveMixer(params2);
+ EXPECT_EQ(mixer_count(), 0);
+}
+
+// Verify CreateInput() provides AudioRendererMixerInput with the appropriate
+// callbacks and they are working as expected.
+TEST_F(AudioRendererMixerManagerTest, CreateInput) {
+ media::AudioParameters params(
+ media::AudioParameters::AUDIO_PCM_LINEAR, kChannelLayout, kSampleRate,
+ kBitsPerChannel, kBufferSize);
+
+ // Create a mixer input and ensure it doesn't instantiate a mixer yet.
+ EXPECT_EQ(mixer_count(), 0);
+ scoped_refptr<media::AudioRendererMixerInput> input(manager_->CreateInput());
+ EXPECT_EQ(mixer_count(), 0);
+
+ // Implicitly test that AudioRendererMixerInput was provided with the expected
+ // callbacks needed to acquire an AudioRendererMixer and remove it.
+ media::FakeAudioRenderCallback callback(0);
+ input->Initialize(params, &callback);
+ EXPECT_EQ(mixer_count(), 1);
+
+ // Destroying the input should destroy the mixer.
+ input = NULL;
+ EXPECT_EQ(mixer_count(), 0);
+}
+
+} // namespace content
« no previous file with comments | « content/renderer/media/audio_renderer_mixer_manager.cc ('k') | content/renderer/media/render_audiosourceprovider.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698