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

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

Issue 9826023: Merge AudioRendererImpl and AudioRendererBase; add NullAudioSink (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 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_impl_unittest.cc
diff --git a/content/renderer/media/audio_renderer_impl_unittest.cc b/content/renderer/media/audio_renderer_impl_unittest.cc
deleted file mode 100644
index a0bb00c374f57547fc73778f46c980b6e41d6159..0000000000000000000000000000000000000000
--- a/content/renderer/media/audio_renderer_impl_unittest.cc
+++ /dev/null
@@ -1,199 +0,0 @@
-// 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/bind.h"
-#include "base/bind_helpers.h"
-#include "base/message_loop.h"
-#include "base/process_util.h"
-#include "base/synchronization/waitable_event.h"
-#include "base/test/test_timeouts.h"
-#include "base/time.h"
-#include "content/common/child_process.h"
-#include "content/common/child_thread.h"
-#include "content/renderer/media/audio_renderer_impl.h"
-#include "content/renderer/mock_content_renderer_client.h"
-#include "content/renderer/render_process.h"
-#include "content/renderer/render_thread_impl.h"
-#include "ipc/ipc_channel.h"
-#include "media/base/data_buffer.h"
-#include "media/base/mock_callback.h"
-#include "media/base/mock_filter_host.h"
-#include "media/base/mock_filters.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-using ::testing::Return;
-
-namespace {
-// This class is a mock of the child process singleton which is needed
-// to be able to create a RenderThread object.
-class MockRenderProcess : public RenderProcess {
- public:
- MockRenderProcess() {}
- virtual ~MockRenderProcess() {}
-
- // RenderProcess implementation.
- virtual skia::PlatformCanvas* GetDrawingCanvas(TransportDIB** memory,
- const gfx::Rect& rect) { return NULL; }
- virtual void ReleaseTransportDIB(TransportDIB* memory) {}
- virtual bool UseInProcessPlugins() const { return false; }
- virtual void AddBindings(int bindings) {}
- virtual int GetEnabledBindings() const { return 0; }
- virtual bool HasInitializedMediaLibrary() const { return false; }
-
- private:
- DISALLOW_COPY_AND_ASSIGN(MockRenderProcess);
-};
-}
-
-// This callback can be posted on the IO thread and will signal an event when
-// done. The caller can then wait for this signal to ensure that no
-// additional tasks remain in the task queue.
-void WaitCallback(base::WaitableEvent* event) {
- event->Signal();
-}
-
-// Class we would be testing.
-class TestAudioRendererImpl : public AudioRendererImpl {
- public:
- explicit TestAudioRendererImpl(media::AudioRendererSink* sink)
- : AudioRendererImpl(sink) {
- }
-};
-
-class AudioRendererImplTest
- : public ::testing::Test,
- public IPC::Channel::Listener {
- public:
- // IPC::Channel::Listener implementation.
- virtual bool OnMessageReceived(const IPC::Message& message) {
- NOTIMPLEMENTED();
- return true;
- }
-
- static const int kSize;
-
- AudioRendererImplTest() {}
- virtual ~AudioRendererImplTest() {}
-
- virtual void SetUp() {
- // This part sets up a RenderThread environment to ensure that
- // RenderThread::current() (<=> TLS pointer) is valid.
- // Main parts are inspired by the RenderViewFakeResourcesTest.
- // Note that, the IPC part is not utilized in this test.
- content::GetContentClient()->set_renderer(&mock_content_renderer_client_);
-
- static const char kThreadName[] = "RenderThread";
- channel_.reset(new IPC::Channel(kThreadName,
- IPC::Channel::MODE_SERVER, this));
- ASSERT_TRUE(channel_->Connect());
-
- mock_process_.reset(new MockRenderProcess);
- render_thread_ = new RenderThreadImpl(kThreadName);
-
- // Setup expectations for initialization.
- decoder_ = new media::MockAudioDecoder();
-
- EXPECT_CALL(*decoder_, bits_per_channel())
- .WillRepeatedly(Return(16));
- EXPECT_CALL(*decoder_, channel_layout())
- .WillRepeatedly(Return(CHANNEL_LAYOUT_MONO));
- EXPECT_CALL(*decoder_, samples_per_second())
- .WillRepeatedly(Return(44100));
-
- // Create a sink for the audio renderer.
- scoped_refptr<media::AudioRendererSink> default_sink =
- new AudioDevice();
-
- // Create and initialize the audio renderer.
- renderer_ = new TestAudioRendererImpl(default_sink.get());
- renderer_->Initialize(decoder_,
- media::NewExpectedStatusCB(media::PIPELINE_OK),
- NewUnderflowClosure(), NewTimeClosure());
-
- // We need an event to verify that all tasks are done before leaving
- // our tests.
- event_.reset(new base::WaitableEvent(false, false));
- }
-
- virtual void TearDown() {
- mock_process_.reset();
- }
-
- MOCK_METHOD0(OnUnderflow, void());
-
- base::Closure NewUnderflowClosure() {
- return base::Bind(&AudioRendererImplTest::OnUnderflow,
- base::Unretained(this));
- }
-
- void OnTimeCallback(
- base::TimeDelta current_time, base::TimeDelta max_time) {
- CHECK(current_time <= max_time);
- }
-
- media::AudioRenderer::TimeCB NewTimeClosure() {
- return base::Bind(&AudioRendererImplTest::OnTimeCallback,
- base::Unretained(this));
- }
-
- protected:
- // Posts a final task to the IO message loop and waits for completion.
- void WaitForIOThreadCompletion() {
- ChildProcess::current()->io_message_loop()->PostTask(
- FROM_HERE, base::Bind(&WaitCallback, base::Unretained(event_.get())));
- EXPECT_TRUE(event_->TimedWait(
- base::TimeDelta::FromMilliseconds(TestTimeouts::action_timeout_ms())));
- }
-
- MessageLoopForIO message_loop_;
- content::MockContentRendererClient mock_content_renderer_client_;
- scoped_ptr<IPC::Channel> channel_;
- RenderThreadImpl* render_thread_; // owned by mock_process_
- scoped_ptr<MockRenderProcess> mock_process_;
- scoped_refptr<media::MockAudioDecoder> decoder_;
- scoped_refptr<AudioRendererImpl> renderer_;
- scoped_ptr<base::WaitableEvent> event_;
-
- private:
- DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest);
-};
-
-const int AudioRendererImplTest::kSize = 1024;
-
-TEST_F(AudioRendererImplTest, SetPlaybackRate) {
- // Execute SetPlaybackRate() codepath by toggling play/pause.
- // These methods will be called on the pipeline thread but calling from
- // here is fine for this test. Tasks will be posted internally on
- // the IO thread.
- renderer_->SetPlaybackRate(0.0f);
- renderer_->SetPlaybackRate(1.0f);
- renderer_->SetPlaybackRate(0.0f);
-
- renderer_->Stop(media::NewExpectedClosure());
- WaitForIOThreadCompletion();
-}
-
-TEST_F(AudioRendererImplTest, SetVolume) {
- // Execute SetVolume() codepath.
- // This method will be called on the pipeline thread IRL.
- // Tasks will be posted internally on the IO thread.
- renderer_->SetVolume(0.5f);
-
- renderer_->Stop(media::NewExpectedClosure());
- WaitForIOThreadCompletion();
-}
-
-TEST_F(AudioRendererImplTest, UpdateEarliestEndTime) {
- renderer_->SetPlaybackRate(1.0f);
- WaitForIOThreadCompletion();
- base::Time time_now = base::Time(); // Null time by default.
- renderer_->set_earliest_end_time(time_now);
- renderer_->UpdateEarliestEndTime(renderer_->bytes_per_second(),
- base::TimeDelta::FromMilliseconds(100),
- time_now);
- int time_delta = (renderer_->earliest_end_time() - time_now).InMilliseconds();
- EXPECT_EQ(1100, time_delta);
- renderer_->Stop(media::NewExpectedClosure());
- WaitForIOThreadCompletion();
-}

Powered by Google App Engine
This is Rietveld 408576698