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

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

Issue 2697453002: [DesktopCapturer] FallbackDesktopCapturerWrapper and its tests (Closed)
Patch Set: 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 <map>
14 #include <memory>
15 #include <utility>
16 #include <vector>
17
18 #include "webrtc/modules/desktop_capture/desktop_capturer.h"
19 #include "webrtc/modules/desktop_capture/desktop_frame_generator.h"
20 #include "webrtc/modules/desktop_capture/fake_desktop_capturer.h"
21 #include "webrtc/test/gtest.h"
22
23 namespace webrtc {
24
25 namespace {
26
27 std::unique_ptr<DesktopCapturer> CreateDesktopCapturer(
28 PainterDesktopFrameGenerator* frame_generator) {
29 std::unique_ptr<FakeDesktopCapturer> capturer(new FakeDesktopCapturer());
30 capturer->set_frame_generator(frame_generator);
31 return std::move(capturer);
32 }
33
34 } // namespace
35
36 class FallbackDesktopCapturerWrapperTest : public testing::Test,
37 public DesktopCapturer::Callback {
38 public:
39 FallbackDesktopCapturerWrapperTest();
40 ~FallbackDesktopCapturerWrapperTest() override = default;
41
42 protected:
43 FakeDesktopCapturer* main_capturer();
44 FakeDesktopCapturer* secondary_capturer();
45 FallbackDesktopCapturerWrapper* wrapper();
46 const std::vector<std::pair<DesktopCapturer::Result, bool>>& results() const;
Jamie 2017/02/15 18:43:48 Optional: This is probably overkill for a test. Yo
47
48 private:
49 // DesktopCapturer::Callback interface
50 void OnCaptureResult(DesktopCapturer::Result result,
51 std::unique_ptr<DesktopFrame> frame) override;
52
53 std::vector<std::pair<DesktopCapturer::Result, bool>> results_;
54 FakeDesktopCapturer* main_capturer_ = nullptr;
55 FakeDesktopCapturer* secondary_capturer_ = nullptr;
56 std::unique_ptr<FallbackDesktopCapturerWrapper> wrapper_;
57 PainterDesktopFrameGenerator frame_generator;
58 };
59
60 FallbackDesktopCapturerWrapperTest::FallbackDesktopCapturerWrapperTest() {
61 frame_generator.size()->set(1024, 768);
62 std::unique_ptr<DesktopCapturer> main_capturer =
63 CreateDesktopCapturer(&frame_generator);
64 std::unique_ptr<DesktopCapturer> secondary_capturer =
65 CreateDesktopCapturer(&frame_generator);
66 main_capturer_ = static_cast<FakeDesktopCapturer*>(main_capturer.get());
67 secondary_capturer_
68 = static_cast<FakeDesktopCapturer*>(secondary_capturer.get());
69 wrapper_.reset(new FallbackDesktopCapturerWrapper(
70 std::move(main_capturer), std::move(secondary_capturer)));
71 wrapper_->Start(this);
72 }
73
74 FakeDesktopCapturer* FallbackDesktopCapturerWrapperTest::main_capturer() {
75 return main_capturer_;
76 }
77
78 FakeDesktopCapturer* FallbackDesktopCapturerWrapperTest::secondary_capturer() {
79 return secondary_capturer_;
80 }
81
82 FallbackDesktopCapturerWrapper* FallbackDesktopCapturerWrapperTest::wrapper() {
83 return wrapper_.get();
84 }
85
86 const std::vector<std::pair<DesktopCapturer::Result, bool>>&
87 FallbackDesktopCapturerWrapperTest::results() const {
88 return results_;
89 }
90
91 void FallbackDesktopCapturerWrapperTest::OnCaptureResult(
92 DesktopCapturer::Result result,
93 std::unique_ptr<DesktopFrame> frame) {
94 results_.emplace_back(result, !!frame);
95 }
96
97 TEST_F(FallbackDesktopCapturerWrapperTest, MainNeverFailed) {
98 wrapper()->CaptureFrame();
99 ASSERT_EQ(main_capturer()->capture_attempts(), 1);
100 ASSERT_EQ(main_capturer()->frame_captured(), 1);
101 ASSERT_EQ(secondary_capturer()->capture_attempts(), 0);
102 ASSERT_EQ(secondary_capturer()->frame_captured(), 0);
103 ASSERT_EQ(results().size(), 1U);
104 ASSERT_EQ(results()[0],
105 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
106 }
107
108 TEST_F(FallbackDesktopCapturerWrapperTest, MainFailedTemporarily) {
109 wrapper()->CaptureFrame();
110 main_capturer()->set_result(DesktopCapturer::Result::ERROR_TEMPORARY);
111 wrapper()->CaptureFrame();
112 main_capturer()->set_result(DesktopCapturer::Result::SUCCESS);
113 wrapper()->CaptureFrame();
114
115 ASSERT_EQ(main_capturer()->capture_attempts(), 3);
116 ASSERT_EQ(main_capturer()->frame_captured(), 2);
117 ASSERT_EQ(secondary_capturer()->capture_attempts(), 1);
118 ASSERT_EQ(secondary_capturer()->frame_captured(), 1);
119 ASSERT_EQ(results().size(), 3U);
120 for (int i = 0; i < 3; i++) {
121 ASSERT_EQ(results()[i],
122 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
123 }
124 }
125
126 TEST_F(FallbackDesktopCapturerWrapperTest, MainFailedPermanently) {
127 wrapper()->CaptureFrame();
128 main_capturer()->set_result(DesktopCapturer::Result::ERROR_PERMANENT);
129 wrapper()->CaptureFrame();
130 main_capturer()->set_result(DesktopCapturer::Result::SUCCESS);
131 wrapper()->CaptureFrame();
132
133 ASSERT_EQ(main_capturer()->capture_attempts(), 2);
134 ASSERT_EQ(main_capturer()->frame_captured(), 1);
135 ASSERT_EQ(secondary_capturer()->capture_attempts(), 2);
136 ASSERT_EQ(secondary_capturer()->frame_captured(), 2);
137 ASSERT_EQ(results().size(), 3U);
138 for (int i = 0; i < 3; i++) {
139 ASSERT_EQ(results()[i],
140 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
141 }
142 }
143
144 TEST_F(FallbackDesktopCapturerWrapperTest, BothFailed) {
145 wrapper()->CaptureFrame();
146 main_capturer()->set_result(DesktopCapturer::Result::ERROR_PERMANENT);
147 wrapper()->CaptureFrame();
148 main_capturer()->set_result(DesktopCapturer::Result::SUCCESS);
149 wrapper()->CaptureFrame();
150 secondary_capturer()->set_result(DesktopCapturer::Result::ERROR_TEMPORARY);
151 wrapper()->CaptureFrame();
152 secondary_capturer()->set_result(DesktopCapturer::Result::ERROR_PERMANENT);
153 wrapper()->CaptureFrame();
154 wrapper()->CaptureFrame();
155
156 ASSERT_EQ(main_capturer()->capture_attempts(), 2);
157 ASSERT_EQ(main_capturer()->frame_captured(), 1);
158 ASSERT_EQ(secondary_capturer()->capture_attempts(), 5);
159 ASSERT_EQ(secondary_capturer()->frame_captured(), 2);
160 ASSERT_EQ(results().size(), 6U);
161 for (int i = 0; i < 3; i++) {
162 ASSERT_EQ(results()[i],
163 std::make_pair(DesktopCapturer::Result::SUCCESS, true));
164 }
165 ASSERT_EQ(results()[3],
166 std::make_pair(DesktopCapturer::Result::ERROR_TEMPORARY, false));
167 ASSERT_EQ(results()[4],
168 std::make_pair(DesktopCapturer::Result::ERROR_PERMANENT, false));
169 ASSERT_EQ(results()[5],
170 std::make_pair(DesktopCapturer::Result::ERROR_PERMANENT, false));
171 }
172
173 } // namespace webrtc
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698