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

Side by Side Diff: webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper_unittest.cc

Issue 2697453002: [DesktopCapturer] FallbackDesktopCapturerWrapper and its tests (Closed)
Patch Set: Resolve review comments Created 3 years, 10 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
OLDNEW
(Empty)
1 /*
2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved.
3 *
4 * Use of this source code is governed by a BSD-style license
5 * that can be found in the LICENSE file in the root of the source
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
9 */
10
11 #include "webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.h"
12
13 #include <memory>
14 #include <utility>
15 #include <vector>
16
17 #include "webrtc/modules/desktop_capture/desktop_capturer.h"
18 #include "webrtc/modules/desktop_capture/desktop_frame_generator.h"
19 #include "webrtc/modules/desktop_capture/fake_desktop_capturer.h"
20 #include "webrtc/test/gtest.h"
21
22 namespace webrtc {
23
24 namespace {
25
26 std::unique_ptr<DesktopCapturer> CreateDesktopCapturer(
27 PainterDesktopFrameGenerator* frame_generator) {
28 std::unique_ptr<FakeDesktopCapturer> capturer(new FakeDesktopCapturer());
29 capturer->set_frame_generator(frame_generator);
30 return std::move(capturer);
31 }
32
33 class FakeSharedMemory : public SharedMemory {
34 public:
35 explicit FakeSharedMemory(size_t size);
36 ~FakeSharedMemory() override;
37
38 private:
39 static int next_id_;
40 };
41
42 // static
43 int FakeSharedMemory::next_id_ = 0;
44
45 FakeSharedMemory::FakeSharedMemory(size_t size)
46 : SharedMemory(new char[size], size, 0, next_id_++) {}
47
48 FakeSharedMemory::~FakeSharedMemory() {
49 delete[] static_cast<char*>(data_);
50 }
51
52 class FakeSharedMemoryFactory : public SharedMemoryFactory {
53 public:
54 FakeSharedMemoryFactory() = default;
55 ~FakeSharedMemoryFactory() override = default;
56
57 std::unique_ptr<SharedMemory> CreateSharedMemory(size_t size) override;
58 };
59
60 std::unique_ptr<SharedMemory> FakeSharedMemoryFactory::CreateSharedMemory(
61 size_t size) {
62 return std::unique_ptr<SharedMemory>(new FakeSharedMemory(size));
63 }
64
65 } // namespace
66
67 class FallbackDesktopCapturerWrapperTest : public testing::Test,
68 public DesktopCapturer::Callback {
69 public:
70 FallbackDesktopCapturerWrapperTest();
71 ~FallbackDesktopCapturerWrapperTest() override = default;
72
73 protected:
74 std::vector<std::pair<DesktopCapturer::Result, bool>> results_;
75 FakeDesktopCapturer* main_capturer_ = nullptr;
76 FakeDesktopCapturer* secondary_capturer_ = nullptr;
77 std::unique_ptr<FallbackDesktopCapturerWrapper> wrapper_;
78
79 private:
80 // DesktopCapturer::Callback interface
81 void OnCaptureResult(DesktopCapturer::Result result,
82 std::unique_ptr<DesktopFrame> frame) override;
83 PainterDesktopFrameGenerator frame_generator;
84 };
85
86 FallbackDesktopCapturerWrapperTest::FallbackDesktopCapturerWrapperTest() {
87 frame_generator.size()->set(1024, 768);
88 std::unique_ptr<DesktopCapturer> main_capturer =
89 CreateDesktopCapturer(&frame_generator);
90 std::unique_ptr<DesktopCapturer> secondary_capturer =
91 CreateDesktopCapturer(&frame_generator);
92 main_capturer_ = static_cast<FakeDesktopCapturer*>(main_capturer.get());
93 secondary_capturer_ =
94 static_cast<FakeDesktopCapturer*>(secondary_capturer.get());
95 wrapper_.reset(new FallbackDesktopCapturerWrapper(
96 std::move(main_capturer), std::move(secondary_capturer)));
97 wrapper_->Start(this);
98 }
99
100 void FallbackDesktopCapturerWrapperTest::OnCaptureResult(
101 DesktopCapturer::Result result,
102 std::unique_ptr<DesktopFrame> frame) {
103 results_.emplace_back(result, !!frame);
104 }
105
106 TEST_F(FallbackDesktopCapturerWrapperTest, MainNeverFailed) {
107 wrapper_->CaptureFrame();
108 ASSERT_EQ(main_capturer_->num_capture_attempts(), 1);
109 ASSERT_EQ(main_capturer_->num_frames_captured(), 1);
110 ASSERT_EQ(secondary_capturer_->num_capture_attempts(), 0);
111 ASSERT_EQ(secondary_capturer_->num_frames_captured(), 0);
112 ASSERT_EQ(results_.size(), 1U);
113 ASSERT_EQ(results_[0],
114 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
115 }
116
117 TEST_F(FallbackDesktopCapturerWrapperTest, MainFailedTemporarily) {
118 wrapper_->CaptureFrame();
119 main_capturer_->set_result(DesktopCapturer::Result::ERROR_TEMPORARY);
120 wrapper_->CaptureFrame();
121 main_capturer_->set_result(DesktopCapturer::Result::SUCCESS);
122 wrapper_->CaptureFrame();
123
124 ASSERT_EQ(main_capturer_->num_capture_attempts(), 3);
125 ASSERT_EQ(main_capturer_->num_frames_captured(), 2);
126 ASSERT_EQ(secondary_capturer_->num_capture_attempts(), 1);
127 ASSERT_EQ(secondary_capturer_->num_frames_captured(), 1);
128 ASSERT_EQ(results_.size(), 3U);
129 for (int i = 0; i < 3; i++) {
130 ASSERT_EQ(results_[i],
131 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
132 }
133 }
134
135 TEST_F(FallbackDesktopCapturerWrapperTest, MainFailedPermanently) {
136 wrapper_->CaptureFrame();
137 main_capturer_->set_result(DesktopCapturer::Result::ERROR_PERMANENT);
138 wrapper_->CaptureFrame();
139 main_capturer_->set_result(DesktopCapturer::Result::SUCCESS);
140 wrapper_->CaptureFrame();
141
142 ASSERT_EQ(main_capturer_->num_capture_attempts(), 2);
143 ASSERT_EQ(main_capturer_->num_frames_captured(), 1);
144 ASSERT_EQ(secondary_capturer_->num_capture_attempts(), 2);
145 ASSERT_EQ(secondary_capturer_->num_frames_captured(), 2);
146 ASSERT_EQ(results_.size(), 3U);
147 for (int i = 0; i < 3; i++) {
148 ASSERT_EQ(results_[i],
149 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
150 }
151 }
152
153 TEST_F(FallbackDesktopCapturerWrapperTest, BothFailed) {
154 wrapper_->CaptureFrame();
155 main_capturer_->set_result(DesktopCapturer::Result::ERROR_PERMANENT);
156 wrapper_->CaptureFrame();
157 main_capturer_->set_result(DesktopCapturer::Result::SUCCESS);
158 wrapper_->CaptureFrame();
159 secondary_capturer_->set_result(DesktopCapturer::Result::ERROR_TEMPORARY);
160 wrapper_->CaptureFrame();
161 secondary_capturer_->set_result(DesktopCapturer::Result::ERROR_PERMANENT);
162 wrapper_->CaptureFrame();
163 wrapper_->CaptureFrame();
164
165 ASSERT_EQ(main_capturer_->num_capture_attempts(), 2);
166 ASSERT_EQ(main_capturer_->num_frames_captured(), 1);
167 ASSERT_EQ(secondary_capturer_->num_capture_attempts(), 5);
168 ASSERT_EQ(secondary_capturer_->num_frames_captured(), 2);
169 ASSERT_EQ(results_.size(), 6U);
170 for (int i = 0; i < 3; i++) {
171 ASSERT_EQ(results_[i],
172 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
173 }
174 ASSERT_EQ(results_[3],
175 std::make_pair(DesktopCapturer::Result::ERROR_TEMPORARY, false));
176 ASSERT_EQ(results_[4],
177 std::make_pair(DesktopCapturer::Result::ERROR_PERMANENT, false));
178 ASSERT_EQ(results_[5],
179 std::make_pair(DesktopCapturer::Result::ERROR_PERMANENT, false));
180 }
181
182 TEST_F(FallbackDesktopCapturerWrapperTest, WithSharedMemory) {
183 wrapper_->SetSharedMemoryFactory(std::unique_ptr<SharedMemoryFactory>(
184 new FakeSharedMemoryFactory()));
185 wrapper_->CaptureFrame();
186 main_capturer_->set_result(DesktopCapturer::Result::ERROR_TEMPORARY);
187 wrapper_->CaptureFrame();
188 main_capturer_->set_result(DesktopCapturer::Result::SUCCESS);
189 wrapper_->CaptureFrame();
190 main_capturer_->set_result(DesktopCapturer::Result::ERROR_PERMANENT);
191 wrapper_->CaptureFrame();
192 wrapper_->CaptureFrame();
193
194 ASSERT_EQ(main_capturer_->num_capture_attempts(), 4);
195 ASSERT_EQ(main_capturer_->num_frames_captured(), 2);
196 ASSERT_EQ(secondary_capturer_->num_capture_attempts(), 3);
197 ASSERT_EQ(secondary_capturer_->num_frames_captured(), 3);
198 ASSERT_EQ(results_.size(), 5U);
199 for (int i = 0; i < 5; i++) {
200 ASSERT_EQ(results_[i],
201 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
202 }
203 }
204
205 } // namespace webrtc
OLDNEW
« no previous file with comments | « webrtc/modules/desktop_capture/fallback_desktop_capturer_wrapper.cc ('k') | webrtc/modules/desktop_capture/shared_memory.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698