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

Side by Side Diff: chromecast/renderer/media/cma_renderer_unittest.cc

Issue 1137263002: Chromecast: adds CmaRenderer test coverage. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: revert chromium.fyi.json change Created 5 years, 7 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
« no previous file with comments | « chromecast/media/cma/ipc/media_message_fifo.h ('k') | media/BUILD.gn » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "base/bind.h"
6 #include "base/macros.h"
7 #include "base/memory/ref_counted.h"
8 #include "base/memory/scoped_ptr.h"
9 #include "base/memory/shared_memory.h"
10 #include "base/message_loop/message_loop.h"
11 #include "base/time/time.h"
12 #include "chromecast/common/media/cma_messages.h"
13 #include "chromecast/common/media/shared_memory_chunk.h"
14 #include "chromecast/media/cma/base/buffering_defs.h"
15 #include "chromecast/media/cma/filters/cma_renderer.h"
16 #include "chromecast/media/cma/ipc/media_memory_chunk.h"
17 #include "chromecast/media/cma/ipc/media_message_fifo.h"
18 #include "chromecast/media/cma/pipeline/media_pipeline.h"
19 #include "chromecast/renderer/media/cma_message_filter_proxy.h"
20 #include "chromecast/renderer/media/media_pipeline_proxy.h"
21 #include "ipc/ipc_test_sink.h"
22 #include "media/base/demuxer_stream_provider.h"
23 #include "media/base/fake_demuxer_stream.h"
24 #include "media/base/null_video_sink.h"
25 #include "testing/gmock/include/gmock/gmock.h"
26 #include "testing/gtest/include/gtest/gtest.h"
27
28 namespace chromecast {
29 namespace media {
30
31 namespace {
32
33 class CmaRendererTest : public testing::Test {
34 public:
35 CmaRendererTest() {
36 demuxer_stream_provider_.reset(
37 new ::media::FakeDemuxerStreamProvider(1, 1, false));
38 null_sink_.reset(new ::media::NullVideoSink(
39 false,
40 base::TimeDelta::FromSecondsD(1.0 / 60),
41 base::Bind(&MockCB::OnFrameReceived, base::Unretained(&mock_)),
42 message_loop_.task_runner()));
43
44 cma_proxy_ = new CmaMessageFilterProxy(message_loop_.message_loop_proxy());
45 cma_proxy_->OnFilterAdded(&ipc_sink_);
46
47 renderer_.reset(new CmaRenderer(
48 scoped_ptr<MediaPipelineProxy>(
49 new MediaPipelineProxy(0, message_loop_.message_loop_proxy(),
50 LoadType::kLoadTypeMediaSource)),
51 null_sink_.get()));
52 }
53
54 ~CmaRendererTest() override {
55 cma_proxy_->OnFilterRemoved();
56 }
57
58 protected:
59 base::MessageLoop message_loop_;
60 scoped_ptr<::media::FakeDemuxerStreamProvider> demuxer_stream_provider_;
61 IPC::TestSink ipc_sink_;
62 scoped_refptr<CmaMessageFilterProxy> cma_proxy_;
63 scoped_ptr<CmaRenderer> renderer_;
64
65 class MockCB {
66 public:
67 MOCK_METHOD1(OnInitialized, void(::media::PipelineStatus));
68 MOCK_METHOD1(OnFrameReceived,
69 void(const scoped_refptr<::media::VideoFrame>&));
70 MOCK_METHOD1(OnStatistics, void(const ::media::PipelineStatistics&));
71 MOCK_METHOD1(OnBufferingState, void(::media::BufferingState));
72 MOCK_METHOD0(OnEnded, void());
73 MOCK_METHOD1(OnError, void(::media::PipelineStatus));
74 MOCK_METHOD0(OnWaitingForDecryptionKey, void());
75 };
76 MockCB mock_;
77
78 private:
79 scoped_ptr<::media::NullVideoSink> null_sink_;
80
81 DISALLOW_COPY_AND_ASSIGN(CmaRendererTest);
82 };
83
84 } // namespace
85
86 TEST_F(CmaRendererTest, TestInitialization) {
87 renderer_->Initialize(
88 demuxer_stream_provider_.get(),
89 base::Bind(&MockCB::OnInitialized, base::Unretained(&mock_)),
90 base::Bind(&MockCB::OnStatistics, base::Unretained(&mock_)),
91 base::Bind(&MockCB::OnBufferingState, base::Unretained(&mock_)),
92 base::Bind(&MockCB::OnEnded, base::Unretained(&mock_)),
93 base::Bind(&MockCB::OnError, base::Unretained(&mock_)),
94 base::Bind(&MockCB::OnWaitingForDecryptionKey, base::Unretained(&mock_)));
95 message_loop_.RunUntilIdle();
96
97 EXPECT_TRUE(ipc_sink_.GetUniqueMessageMatching(CmaHostMsg_CreateAvPipe::ID));
98 base::SharedMemory* shared_memory = new base::SharedMemory();
99 EXPECT_TRUE(shared_memory->CreateAndMapAnonymous(kAppVideoBufferSize));
100
101 // Renderer MediaMessageFifo instance expects the first bytes of the shared
102 // memory blob to describe how much space is available for writing.
103 *(static_cast<size_t*>(shared_memory->memory())) =
104 shared_memory->requested_size() - MediaMessageFifo::kDescriptorSize;
105
106 base::FileDescriptor foreign_socket_handle;
107 cma_proxy_->OnMessageReceived(CmaMsg_AvPipeCreated(
108 1, kVideoTrackId, true,
109 shared_memory->handle(), foreign_socket_handle));
110 message_loop_.RunUntilIdle();
111
112 EXPECT_FALSE(
113 ipc_sink_.GetUniqueMessageMatching(CmaHostMsg_AudioInitialize::ID));
114 EXPECT_TRUE(
115 ipc_sink_.GetUniqueMessageMatching(CmaHostMsg_VideoInitialize::ID));
116
117 EXPECT_CALL(mock_, OnInitialized(::media::PIPELINE_OK));
118 cma_proxy_->OnMessageReceived(
119 CmaMsg_TrackStateChanged(1, kVideoTrackId, ::media::PIPELINE_OK));
120 message_loop_.RunUntilIdle();
121 }
122
123
124 } // namespace media
125 } // namespace chromecast
OLDNEW
« no previous file with comments | « chromecast/media/cma/ipc/media_message_fifo.h ('k') | media/BUILD.gn » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698