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

Side by Side Diff: content/renderer/media/audio_renderer_impl_unittest.cc

Issue 7157001: Implements AudioMessageFilter as member in RenderThread (Closed) Base URL: http://src.chromium.org/svn/trunk/src/
Patch Set: Mainly nits removing non-required caching of message loops Created 9 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/process_util.h" 5 #include "base/process_util.h"
6 #include "content/common/media/audio_messages.h" 6 #include "content/common/media/audio_messages.h"
7 #include "content/renderer/media/audio_renderer_impl.h" 7 #include "content/renderer/media/audio_renderer_impl.h"
8 #include "content/renderer/render_thread.h"
8 #include "media/base/data_buffer.h" 9 #include "media/base/data_buffer.h"
9 #include "media/base/mock_callback.h" 10 #include "media/base/mock_callback.h"
10 #include "media/base/mock_filter_host.h" 11 #include "media/base/mock_filter_host.h"
11 #include "media/base/mock_filters.h" 12 #include "media/base/mock_filters.h"
12 #include "testing/gtest/include/gtest/gtest.h" 13 #include "testing/gtest/include/gtest/gtest.h"
13 14
14 using ::testing::Return; 15 using ::testing::Return;
15 16
16 class AudioRendererImplTest : public ::testing::Test { 17 class AudioRendererImplTest : public ::testing::Test {
17 public: 18 public:
18 static const int kRouteId = 0;
19 static const int kSize = 1024; 19 static const int kSize = 1024;
20 20
21 AudioRendererImplTest() { 21 AudioRendererImplTest() {
22 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO)); 22 message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
23 23
24 // TODO(scherkus): use gmock with AudioMessageFilter to verify
25 // AudioRendererImpl calls or doesn't call Send().
26 filter_ = new AudioMessageFilter(kRouteId);
27 filter_->message_loop_ = message_loop_.get();
28
29 // Create temporary shared memory. 24 // Create temporary shared memory.
30 CHECK(shared_mem_.CreateAnonymous(kSize)); 25 CHECK(shared_mem_.CreateAnonymous(kSize));
31 26
32 // Setup expectations for initialization. 27 // Setup expectations for initialization.
33 decoder_ = new media::MockAudioDecoder(); 28 decoder_ = new media::MockAudioDecoder();
34 29
35 ON_CALL(*decoder_, config()) 30 ON_CALL(*decoder_, config())
36 .WillByDefault(Return(media::AudioDecoderConfig(16, 31 .WillByDefault(Return(media::AudioDecoderConfig(16,
37 CHANNEL_LAYOUT_MONO, 32 CHANNEL_LAYOUT_MONO,
38 44100))); 33 44100)));
39 34
35 // TODO(henrika) - figure out a way to avoid a crash here.
36 // Construction of AudioRendererImpl only works on the main renderer thread.
37
40 // Create and initialize audio renderer. 38 // Create and initialize audio renderer.
41 renderer_ = new AudioRendererImpl(filter_); 39 renderer_ = new AudioRendererImpl();
42 renderer_->set_host(&host_); 40 renderer_->set_host(&host_);
43 renderer_->Initialize(decoder_, media::NewExpectedCallback()); 41 renderer_->Initialize(decoder_, media::NewExpectedCallback());
44 42
45 // Run pending tasks and simulate responding with a created audio stream. 43 // Run pending tasks and simulate responding with a created audio stream.
46 message_loop_->RunAllPending(); 44 message_loop_->RunAllPending();
47 45
48 // Duplicate the shared memory handle so both the test and the callee can 46 // Duplicate the shared memory handle so both the test and the callee can
49 // close their copy. 47 // close their copy.
50 base::SharedMemoryHandle duplicated_handle; 48 base::SharedMemoryHandle duplicated_handle;
51 EXPECT_TRUE(shared_mem_.ShareToProcess(base::GetCurrentProcessHandle(), 49 EXPECT_TRUE(shared_mem_.ShareToProcess(base::GetCurrentProcessHandle(),
52 &duplicated_handle)); 50 &duplicated_handle));
53 51
54 renderer_->OnCreated(duplicated_handle, kSize); 52 renderer_->OnCreated(duplicated_handle, kSize);
55 } 53 }
56 54
57 virtual ~AudioRendererImplTest() { 55 virtual ~AudioRendererImplTest() {
58 } 56 }
59 57
60 protected: 58 protected:
61 // Fixtures. 59 // Fixtures.
62 scoped_ptr<MessageLoop> message_loop_; 60 scoped_ptr<MessageLoop> message_loop_;
63 scoped_refptr<AudioMessageFilter> filter_;
64 base::SharedMemory shared_mem_; 61 base::SharedMemory shared_mem_;
65 media::MockFilterHost host_; 62 media::MockFilterHost host_;
66 scoped_refptr<media::MockAudioDecoder> decoder_; 63 scoped_refptr<media::MockAudioDecoder> decoder_;
67 scoped_refptr<AudioRendererImpl> renderer_; 64 scoped_refptr<AudioRendererImpl> renderer_;
65 RenderThread* render_thread_;
68 66
69 private: 67 private:
70 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest); 68 DISALLOW_COPY_AND_ASSIGN(AudioRendererImplTest);
71 }; 69 };
72 70
73 TEST_F(AudioRendererImplTest, SetPlaybackRate) { 71 TEST_F(AudioRendererImplTest, SetPlaybackRate) {
74 // Execute SetPlaybackRate() codepath to create an IPC message. 72 // Execute SetPlaybackRate() codepath to create an IPC message.
75 73
76 // Toggle play/pause to generate some IPC messages. 74 // Toggle play/pause to generate some IPC messages.
77 renderer_->SetPlaybackRate(0.0f); 75 renderer_->SetPlaybackRate(0.0f);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
124 renderer_->Stop(media::NewExpectedCallback()); 122 renderer_->Stop(media::NewExpectedCallback());
125 } 123 }
126 124
127 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_ConsumeAudioSamples) { 125 TEST_F(AudioRendererImplTest, DestroyedMessageLoop_ConsumeAudioSamples) {
128 // Kill the message loop and verify OnReadComplete() still works. 126 // Kill the message loop and verify OnReadComplete() still works.
129 message_loop_.reset(); 127 message_loop_.reset();
130 scoped_refptr<media::Buffer> buffer(new media::DataBuffer(kSize)); 128 scoped_refptr<media::Buffer> buffer(new media::DataBuffer(kSize));
131 renderer_->ConsumeAudioSamples(buffer); 129 renderer_->ConsumeAudioSamples(buffer);
132 renderer_->Stop(media::NewExpectedCallback()); 130 renderer_->Stop(media::NewExpectedCallback());
133 } 131 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698