OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 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 | 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/bind.h" | 5 #include "base/bind.h" |
6 #include "base/run_loop.h" | 6 #include "base/run_loop.h" |
7 #include "base/strings/utf_string_conversions.h" | 7 #include "base/strings/utf_string_conversions.h" |
8 #include "content/child/child_process.h" | 8 #include "content/child/child_process.h" |
9 #include "content/renderer/media/media_stream_video_renderer_sink.h" | 9 #include "content/renderer/media/media_stream_video_renderer_sink.h" |
10 #include "content/renderer/media/mock_media_stream_registry.h" | 10 #include "content/renderer/media/mock_media_stream_registry.h" |
11 #include "media/base/video_frame.h" | 11 #include "media/base/video_frame.h" |
| 12 #include "media/renderers/gpu_video_accelerator_factories.h" |
| 13 #include "media/renderers/mock_gpu_memory_buffer_video_frame_pool.h" |
12 #include "testing/gmock/include/gmock/gmock.h" | 14 #include "testing/gmock/include/gmock/gmock.h" |
13 #include "testing/gtest/include/gtest/gtest.h" | 15 #include "testing/gtest/include/gtest/gtest.h" |
14 #include "third_party/WebKit/public/platform/WebString.h" | 16 #include "third_party/WebKit/public/platform/WebString.h" |
15 #include "third_party/WebKit/public/web/WebHeap.h" | 17 #include "third_party/WebKit/public/web/WebHeap.h" |
16 | 18 |
17 using ::testing::_; | 19 using ::testing::_; |
18 using ::testing::AtLeast; | 20 using ::testing::AtLeast; |
19 using ::testing::InSequence; | 21 using ::testing::InSequence; |
20 using ::testing::Lt; | 22 using ::testing::Lt; |
21 using ::testing::Mock; | 23 using ::testing::Mock; |
(...skipping 16 matching lines...) Expand all Loading... |
38 // Extract the Blink Video Track for the MSVRSink. | 40 // Extract the Blink Video Track for the MSVRSink. |
39 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; | 41 blink::WebVector<blink::WebMediaStreamTrack> video_tracks; |
40 registry_.test_stream().videoTracks(video_tracks); | 42 registry_.test_stream().videoTracks(video_tracks); |
41 EXPECT_EQ(1u, video_tracks.size()); | 43 EXPECT_EQ(1u, video_tracks.size()); |
42 | 44 |
43 media_stream_video_renderer_sink_ = new MediaStreamVideoRendererSink( | 45 media_stream_video_renderer_sink_ = new MediaStreamVideoRendererSink( |
44 video_tracks[0], | 46 video_tracks[0], |
45 base::Bind(&MediaStreamVideoRendererSinkTest::ErrorCallback, | 47 base::Bind(&MediaStreamVideoRendererSinkTest::ErrorCallback, |
46 base::Unretained(this)), | 48 base::Unretained(this)), |
47 base::Bind(&MediaStreamVideoRendererSinkTest::RepaintCallback, | 49 base::Bind(&MediaStreamVideoRendererSinkTest::RepaintCallback, |
48 base::Unretained(this))); | 50 base::Unretained(this)), |
| 51 message_loop_.task_runner(), message_loop_.task_runner().get(), |
| 52 nullptr /* gpu_factories */); |
49 | 53 |
50 EXPECT_TRUE(IsInStoppedState()); | 54 EXPECT_TRUE(IsInStoppedState()); |
51 } | 55 } |
52 | 56 |
53 ~MediaStreamVideoRendererSinkTest() { | 57 ~MediaStreamVideoRendererSinkTest() { |
54 media_stream_video_renderer_sink_ = nullptr; | 58 media_stream_video_renderer_sink_ = nullptr; |
55 registry_.reset(); | 59 registry_.reset(); |
56 blink::WebHeap::collectAllGarbageForTesting(); | 60 blink::WebHeap::collectAllGarbageForTesting(); |
57 } | 61 } |
58 | 62 |
(...skipping 15 matching lines...) Expand all Loading... |
74 | 78 |
75 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame) { | 79 void OnVideoFrame(const scoped_refptr<media::VideoFrame>& frame) { |
76 media_stream_video_renderer_sink_->OnVideoFrame(frame, | 80 media_stream_video_renderer_sink_->OnVideoFrame(frame, |
77 base::TimeTicks::Now()); | 81 base::TimeTicks::Now()); |
78 } | 82 } |
79 | 83 |
80 scoped_refptr<MediaStreamVideoRendererSink> media_stream_video_renderer_sink_; | 84 scoped_refptr<MediaStreamVideoRendererSink> media_stream_video_renderer_sink_; |
81 | 85 |
82 // A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks | 86 // A ChildProcess and a MessageLoopForUI are both needed to fool the Tracks |
83 // and Sources in |registry_| into believing they are on the right threads. | 87 // and Sources in |registry_| into believing they are on the right threads. |
84 const base::MessageLoopForUI message_loop_; | 88 base::MessageLoopForUI message_loop_; |
85 const ChildProcess child_process_; | 89 const ChildProcess child_process_; |
86 MockMediaStreamRegistry registry_; | 90 MockMediaStreamRegistry registry_; |
87 | 91 |
88 private: | 92 private: |
89 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSinkTest); | 93 DISALLOW_COPY_AND_ASSIGN(MediaStreamVideoRendererSinkTest); |
90 }; | 94 }; |
91 | 95 |
92 // Checks that the initialization-destruction sequence works fine. | 96 // Checks that the initialization-destruction sequence works fine. |
93 TEST_F(MediaStreamVideoRendererSinkTest, StartStop) { | 97 TEST_F(MediaStreamVideoRendererSinkTest, StartStop) { |
94 EXPECT_TRUE(IsInStoppedState()); | 98 EXPECT_TRUE(IsInStoppedState()); |
(...skipping 18 matching lines...) Expand all Loading... |
113 InSequence s; | 117 InSequence s; |
114 const scoped_refptr<media::VideoFrame> video_frame = | 118 const scoped_refptr<media::VideoFrame> video_frame = |
115 media::VideoFrame::CreateBlackFrame(gfx::Size(160, 80)); | 119 media::VideoFrame::CreateBlackFrame(gfx::Size(160, 80)); |
116 | 120 |
117 EXPECT_CALL(*this, RepaintCallback(video_frame)).Times(1); | 121 EXPECT_CALL(*this, RepaintCallback(video_frame)).Times(1); |
118 OnVideoFrame(video_frame); | 122 OnVideoFrame(video_frame); |
119 | 123 |
120 media_stream_video_renderer_sink_->Stop(); | 124 media_stream_video_renderer_sink_->Stop(); |
121 } | 125 } |
122 | 126 |
| 127 class MediaStreamVideoRendererSinkAsyncAddFrameReadyTest |
| 128 : public MediaStreamVideoRendererSinkTest { |
| 129 public: |
| 130 MediaStreamVideoRendererSinkAsyncAddFrameReadyTest() { |
| 131 scoped_ptr<media::GpuMemoryBufferVideoFramePool> gpu_memory_buffer_pool( |
| 132 new media::MockGpuMemoryBufferVideoFramePool(&frame_ready_cbs_)); |
| 133 media_stream_video_renderer_sink_->SetGpuMemoryBufferVideoForTesting( |
| 134 gpu_memory_buffer_pool.Pass()); |
| 135 } |
| 136 |
| 137 protected: |
| 138 std::vector<base::Closure> frame_ready_cbs_; |
| 139 }; |
| 140 |
| 141 TEST_F(MediaStreamVideoRendererSinkAsyncAddFrameReadyTest, |
| 142 CreateHardwareFrames) { |
| 143 media_stream_video_renderer_sink_->Start(); |
| 144 |
| 145 InSequence s; |
| 146 const scoped_refptr<media::VideoFrame> video_frame = |
| 147 media::VideoFrame::CreateBlackFrame(gfx::Size(160, 80)); |
| 148 OnVideoFrame(video_frame); |
| 149 message_loop_.RunUntilIdle(); |
| 150 ASSERT_EQ(1u, frame_ready_cbs_.size()); |
| 151 |
| 152 EXPECT_CALL(*this, RepaintCallback(video_frame)).Times(1); |
| 153 frame_ready_cbs_[0].Run(); |
| 154 message_loop_.RunUntilIdle(); |
| 155 |
| 156 media_stream_video_renderer_sink_->Stop(); |
| 157 } |
| 158 |
123 } // namespace content | 159 } // namespace content |
OLD | NEW |