Index: webrtc/modules/desktop_capture/screen_capturer_unittest.cc |
diff --git a/webrtc/modules/desktop_capture/screen_capturer_unittest.cc b/webrtc/modules/desktop_capture/screen_capturer_unittest.cc |
index a2ef7f9d73a9e65c86e346dea5845458cb802e96..6d2c0eb0658221f98ebb4f34d18a22076de8521a 100644 |
--- a/webrtc/modules/desktop_capture/screen_capturer_unittest.cc |
+++ b/webrtc/modules/desktop_capture/screen_capturer_unittest.cc |
@@ -8,10 +8,6 @@ |
* be found in the AUTHORS file in the root of the source tree. |
*/ |
-#include <string.h> |
- |
-#include <algorithm> |
-#include <initializer_list> |
#include <memory> |
#include <utility> |
@@ -19,16 +15,12 @@ |
#include "testing/gmock/include/gmock/gmock.h" |
#include "testing/gtest/include/gtest/gtest.h" |
-#include "webrtc/base/checks.h" |
#include "webrtc/base/constructormagic.h" |
#include "webrtc/base/logging.h" |
-#include "webrtc/modules/desktop_capture/rgba_color.h" |
#include "webrtc/modules/desktop_capture/desktop_capture_options.h" |
#include "webrtc/modules/desktop_capture/desktop_frame.h" |
#include "webrtc/modules/desktop_capture/desktop_region.h" |
#include "webrtc/modules/desktop_capture/screen_capturer_mock_objects.h" |
-#include "webrtc/modules/desktop_capture/screen_drawer.h" |
-#include "webrtc/system_wrappers/include/sleep.h" |
#if defined(WEBRTC_WIN) |
#include "webrtc/modules/desktop_capture/win/screen_capturer_win_directx.h" |
@@ -42,48 +34,6 @@ |
namespace webrtc { |
-namespace { |
- |
-ACTION_P(SaveUniquePtrArg, dest) { |
- *dest = std::move(*arg1); |
-} |
- |
-// Expects |capturer| to successfully capture a frame, and returns it. |
-std::unique_ptr<DesktopFrame> CaptureFrame( |
- ScreenCapturer* capturer, |
- MockScreenCapturerCallback* callback) { |
- std::unique_ptr<DesktopFrame> frame; |
- EXPECT_CALL(*callback, |
- OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, _)) |
- .WillOnce(SaveUniquePtrArg(&frame)); |
- capturer->Capture(DesktopRegion()); |
- EXPECT_TRUE(frame); |
- return frame; |
-} |
- |
-// Expects color in |rect| of |frame| is |color|. |
-void ExpectPixelsAreColoredBy(const DesktopFrame& frame, |
- DesktopRect rect, |
- RgbaColor color) { |
- // updated_region() should cover the painted area. |
- DesktopRegion updated_region(frame.updated_region()); |
- updated_region.IntersectWith(rect); |
- ASSERT_TRUE(updated_region.Equals(DesktopRegion(rect))); |
- |
- // Color in the |rect| should be |color|. |
- uint8_t* row = frame.GetFrameDataAtPos(rect.top_left()); |
- for (int i = 0; i < rect.height(); i++) { |
- uint8_t* column = row; |
- for (int j = 0; j < rect.width(); j++) { |
- ASSERT_EQ(color, RgbaColor(column)); |
- column += DesktopFrame::kBytesPerPixel; |
- } |
- row += frame.stride(); |
- } |
-} |
- |
-} // namespace |
- |
class ScreenCapturerTest : public testing::Test { |
public: |
void SetUp() override { |
@@ -92,84 +42,6 @@ |
} |
protected: |
- void TestCaptureUpdatedRegion( |
- std::initializer_list<ScreenCapturer*> capturers) { |
- // A large enough area for the tests, which should be able to fulfill by |
- // most of systems. |
- const int kTestArea = 512; |
- const int kRectSize = 32; |
- std::unique_ptr<ScreenDrawer> drawer = ScreenDrawer::Create(); |
- if (!drawer || drawer->DrawableRegion().is_empty()) { |
- LOG(LS_WARNING) << "No ScreenDrawer implementation for current platform."; |
- return; |
- } |
- if (drawer->DrawableRegion().width() < kTestArea || |
- drawer->DrawableRegion().height() < kTestArea) { |
- LOG(LS_WARNING) << "ScreenDrawer::DrawableRegion() is too small for the " |
- "CaptureUpdatedRegion tests."; |
- return; |
- } |
- |
- for (ScreenCapturer* capturer : capturers) { |
- capturer->Start(&callback_); |
- } |
- |
-#if defined(WEBRTC_LINUX) |
- // TODO(zijiehe): ScreenCapturerX11 won't be able to capture correct images |
- // in the first several capture attempts. |
- for (int i = 0; i < 10; i++) { |
- for (ScreenCapturer* capturer : capturers) { |
- std::unique_ptr<DesktopFrame> frame = |
- CaptureFrame(capturer, &callback_); |
- if (!frame) { |
- return; |
- } |
- } |
- } |
-#endif |
- |
- for (int c = 0; c < 3; c++) { |
- for (int i = 0; i < kTestArea - kRectSize; i += 16) { |
- DesktopRect rect = DesktopRect::MakeXYWH(i, i, kRectSize, kRectSize); |
- rect.Translate(drawer->DrawableRegion().top_left()); |
- RgbaColor color((c == 0 ? (i & 0xff) : 0x7f), |
- (c == 1 ? (i & 0xff) : 0x7f), |
- (c == 2 ? (i & 0xff) : 0x7f)); |
- drawer->Clear(); |
- drawer->DrawRectangle(rect, color); |
- drawer->WaitForPendingDraws(); |
- |
- for (ScreenCapturer* capturer : capturers) { |
- std::unique_ptr<DesktopFrame> frame = |
- CaptureFrame(capturer, &callback_); |
- if (!frame) { |
- return; |
- } |
- |
- ExpectPixelsAreColoredBy(*frame, rect, color); |
- } |
- } |
- } |
- } |
- |
- void TestCaptureUpdatedRegion() { |
- TestCaptureUpdatedRegion({capturer_.get()}); |
- } |
- |
-#if defined(WEBRTC_WIN) |
- bool SetDirectxCapturerMode() { |
- if (!ScreenCapturerWinDirectx::IsSupported()) { |
- LOG(LS_WARNING) << "Directx capturer is not supported"; |
- return false; |
- } |
- |
- DesktopCaptureOptions options(DesktopCaptureOptions::CreateDefault()); |
- options.set_allow_directx_capturer(true); |
- capturer_.reset(ScreenCapturer::Create(options)); |
- return true; |
- } |
-#endif // defined(WEBRTC_WIN) |
- |
std::unique_ptr<ScreenCapturer> capturer_; |
MockScreenCapturerCallback callback_; |
}; |
@@ -201,6 +73,10 @@ |
private: |
RTC_DISALLOW_COPY_AND_ASSIGN(FakeSharedMemoryFactory); |
}; |
+ |
+ACTION_P(SaveUniquePtrArg, dest) { |
+ *dest = std::move(*arg1); |
+} |
TEST_F(ScreenCapturerTest, GetScreenListAndSelectScreen) { |
webrtc::ScreenCapturer::ScreenList screens; |
@@ -241,10 +117,6 @@ |
EXPECT_TRUE(it.IsAtEnd()); |
} |
-TEST_F(ScreenCapturerTest, CaptureUpdatedRegion) { |
- TestCaptureUpdatedRegion(); |
-} |
- |
#if defined(WEBRTC_WIN) |
TEST_F(ScreenCapturerTest, UseSharedBuffers) { |
@@ -279,9 +151,14 @@ |
} |
TEST_F(ScreenCapturerTest, UseDirectxCapturer) { |
- if (!SetDirectxCapturerMode()) { |
+ if (!ScreenCapturerWinDirectx::IsSupported()) { |
+ LOG(LS_WARNING) << "Directx capturer is not supported"; |
return; |
} |
+ |
+ DesktopCaptureOptions options(DesktopCaptureOptions::CreateDefault()); |
+ options.set_allow_directx_capturer(true); |
+ capturer_.reset(ScreenCapturer::Create(options)); |
std::unique_ptr<DesktopFrame> frame; |
EXPECT_CALL(callback_, |
@@ -294,9 +171,14 @@ |
} |
TEST_F(ScreenCapturerTest, UseDirectxCapturerWithSharedBuffers) { |
- if (!SetDirectxCapturerMode()) { |
+ if (!ScreenCapturerWinDirectx::IsSupported()) { |
+ LOG(LS_WARNING) << "Directx capturer is not supported"; |
return; |
} |
+ |
+ DesktopCaptureOptions options(DesktopCaptureOptions::CreateDefault()); |
+ options.set_allow_directx_capturer(true); |
+ capturer_.reset(ScreenCapturer::Create(options)); |
std::unique_ptr<DesktopFrame> frame; |
EXPECT_CALL(callback_, |
@@ -312,25 +194,6 @@ |
EXPECT_EQ(frame->shared_memory()->id(), kTestSharedMemoryId); |
} |
-TEST_F(ScreenCapturerTest, CaptureUpdatedRegionWithDirectxCapturer) { |
- if (!SetDirectxCapturerMode()) { |
- return; |
- } |
- |
- TestCaptureUpdatedRegion(); |
-} |
- |
-// TODO(zijiehe): Enable this test after CL 2299663003 has been submitted. |
-TEST_F(ScreenCapturerTest, DISABLED_TwoDirectxCapturers) { |
- if (!SetDirectxCapturerMode()) { |
- return; |
- } |
- |
- std::unique_ptr<ScreenCapturer> capturer2(capturer_.release()); |
- RTC_CHECK(SetDirectxCapturerMode()); |
- TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); |
-} |
- |
#endif // defined(WEBRTC_WIN) |
} // namespace webrtc |