Chromium Code Reviews| OLD | NEW |
|---|---|
| (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 | |
| OLD | NEW |