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 ce18812fd5fa18369ee79aae64fcd3ebe34cc40b..41c08f006b4723a3780eb558fb83d99bc3b12ab4 100644 |
--- a/webrtc/modules/desktop_capture/screen_capturer_unittest.cc |
+++ b/webrtc/modules/desktop_capture/screen_capturer_unittest.cc |
@@ -8,77 +8,29 @@ |
* 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> |
#include "webrtc/modules/desktop_capture/screen_capturer.h" |
#include "webrtc/test/gmock.h" |
#include "webrtc/test/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" |
#endif // defined(WEBRTC_WIN) |
using ::testing::_; |
-using ::testing::AnyNumber; |
-using ::testing::Return; |
const int kTestSharedMemoryId = 123; |
namespace webrtc { |
-namespace { |
- |
-ACTION_P(SaveUniquePtrArg, dest) { |
- *dest = std::move(*arg1); |
-} |
- |
-// Returns true if color in |rect| of |frame| is |color|. |
-bool ArePixelsColoredBy(const DesktopFrame& frame, |
- DesktopRect rect, |
- RgbaColor color, |
- bool may_partially_draw) { |
- if (!may_partially_draw) { |
- // updated_region() should cover the painted area. |
- DesktopRegion updated_region(frame.updated_region()); |
- updated_region.IntersectWith(rect); |
- if (!updated_region.Equals(DesktopRegion(rect))) { |
- return false; |
- } |
- } |
- |
- // 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++) { |
- if (color != RgbaColor(column)) { |
- return false; |
- } |
- column += DesktopFrame::kBytesPerPixel; |
- } |
- row += frame.stride(); |
- } |
- return true; |
-} |
- |
-} // namespace |
- |
class ScreenCapturerTest : public testing::Test { |
public: |
void SetUp() override { |
@@ -87,60 +39,6 @@ class ScreenCapturerTest : public testing::Test { |
} |
protected: |
- void TestCaptureUpdatedRegion( |
- std::initializer_list<ScreenCapturer*> capturers) { |
- RTC_DCHECK(capturers.size() > 0); |
- // 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_); |
- } |
- |
- // Draw a set of |kRectSize| by |kRectSize| rectangles at (|i|, |i|), or |
- // |i| by |i| rectangles at (|kRectSize|, |kRectSize|). One of (controlled |
- // by |c|) its primary colors is |i|, and the other two are 0x7f. So we |
- // won't draw a black or white rectangle. |
- for (int c = 0; c < 3; c++) { |
- // A fixed size rectangle. |
- 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)); |
- TestCaptureOneFrame(capturers, drawer.get(), rect, color); |
- } |
- |
- // A variable-size rectangle. |
- for (int i = 0; i < kTestArea - kRectSize; i += 16) { |
- DesktopRect rect = DesktopRect::MakeXYWH(kRectSize, kRectSize, i, i); |
- rect.Translate(drawer->DrawableRegion().top_left()); |
- RgbaColor color((c == 0 ? (i & 0xff) : 0x7f), |
- (c == 1 ? (i & 0xff) : 0x7f), |
- (c == 2 ? (i & 0xff) : 0x7f)); |
- TestCaptureOneFrame(capturers, drawer.get(), rect, color); |
- } |
- } |
- } |
- |
- void TestCaptureUpdatedRegion() { |
- TestCaptureUpdatedRegion({capturer_.get()}); |
- } |
- |
#if defined(WEBRTC_WIN) |
// Enable allow_directx_capturer in DesktopCaptureOptions, but let |
// ScreenCapturer::Create to decide whether a DirectX capturer should be used. |
@@ -169,61 +67,6 @@ class ScreenCapturerTest : public testing::Test { |
std::unique_ptr<ScreenCapturer> capturer_; |
MockScreenCapturerCallback callback_; |
- |
- private: |
- // Repeats capturing the frame by using |capturers| one-by-one for 600 times, |
- // typically 30 seconds, until they succeeded captured a |color| rectangle at |
- // |rect|. This function uses |drawer|->WaitForPendingDraws() between two |
- // attempts to wait for the screen to update. |
- void TestCaptureOneFrame(std::vector<ScreenCapturer*> capturers, |
- ScreenDrawer* drawer, |
- DesktopRect rect, |
- RgbaColor color) { |
- const int wait_capture_round = 600; |
- drawer->Clear(); |
- size_t succeeded_capturers = 0; |
- for (int i = 0; i < wait_capture_round; i++) { |
- drawer->DrawRectangle(rect, color); |
- drawer->WaitForPendingDraws(); |
- for (size_t j = 0; j < capturers.size(); j++) { |
- if (capturers[j] == nullptr) { |
- // ScreenCapturer should return an empty updated_region() if no |
- // update detected. So we won't test it again if it has captured |
- // the rectangle we drew. |
- continue; |
- } |
- std::unique_ptr<DesktopFrame> frame = CaptureFrame(capturers[j]); |
- if (!frame) { |
- // CaptureFrame() has triggered an assertion failure already, we |
- // only need to return here. |
- return; |
- } |
- |
- if (ArePixelsColoredBy( |
- *frame, rect, color, drawer->MayDrawIncompleteShapes())) { |
- capturers[j] = nullptr; |
- succeeded_capturers++; |
- } |
- } |
- |
- if (succeeded_capturers == capturers.size()) { |
- break; |
- } |
- } |
- |
- ASSERT_EQ(succeeded_capturers, capturers.size()); |
- } |
- |
- // Expects |capturer| to successfully capture a frame, and returns it. |
- std::unique_ptr<DesktopFrame> CaptureFrame(ScreenCapturer* capturer) { |
- std::unique_ptr<DesktopFrame> frame; |
- EXPECT_CALL(callback_, |
- OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, _)) |
- .WillOnce(SaveUniquePtrArg(&frame)); |
- capturer->CaptureFrame(); |
- EXPECT_TRUE(frame); |
- return frame; |
- } |
}; |
class FakeSharedMemory : public SharedMemory { |
@@ -254,11 +97,15 @@ class FakeSharedMemoryFactory : public SharedMemoryFactory { |
RTC_DISALLOW_COPY_AND_ASSIGN(FakeSharedMemoryFactory); |
}; |
+ACTION_P(SaveUniquePtrArg, dest) { |
+ *dest = std::move(*arg1); |
+} |
+ |
TEST_F(ScreenCapturerTest, GetScreenListAndSelectScreen) { |
webrtc::ScreenCapturer::ScreenList screens; |
EXPECT_TRUE(capturer_->GetScreenList(&screens)); |
for (webrtc::ScreenCapturer::ScreenList::iterator it = screens.begin(); |
- it != screens.end(); ++it) { |
+ it != screens.end(); ++it) { |
EXPECT_TRUE(capturer_->SelectScreen(it->id)); |
} |
} |
@@ -293,20 +140,6 @@ TEST_F(ScreenCapturerTest, Capture) { |
EXPECT_TRUE(it.IsAtEnd()); |
} |
-// Disabled due to being flaky due to the fact that it uses rendering / UI, see |
-// webrtc/6366. |
-TEST_F(ScreenCapturerTest, DISABLED_CaptureUpdatedRegion) { |
- TestCaptureUpdatedRegion(); |
-} |
- |
-// Disabled due to being flaky due to the fact that it uses rendering / UI, see |
-// webrtc/6366. |
-TEST_F(ScreenCapturerTest, DISABLED_TwoCapturers) { |
- std::unique_ptr<ScreenCapturer> capturer2 = std::move(capturer_); |
- SetUp(); |
- TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); |
-} |
- |
#if defined(WEBRTC_WIN) |
TEST_F(ScreenCapturerTest, UseSharedBuffers) { |
@@ -327,7 +160,6 @@ TEST_F(ScreenCapturerTest, UseSharedBuffers) { |
TEST_F(ScreenCapturerTest, UseMagnifier) { |
CreateMagnifierCapturer(); |
- |
std::unique_ptr<DesktopFrame> frame; |
EXPECT_CALL(callback_, |
OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, _)) |
@@ -372,54 +204,6 @@ TEST_F(ScreenCapturerTest, UseDirectxCapturerWithSharedBuffers) { |
EXPECT_EQ(frame->shared_memory()->id(), kTestSharedMemoryId); |
} |
-// Disabled due to being flaky due to the fact that it uses rendering / UI, see |
-// webrtc/6366. |
-TEST_F(ScreenCapturerTest, DISABLED_CaptureUpdatedRegionWithDirectxCapturer) { |
- if (!CreateDirectxCapturer()) { |
- return; |
- } |
- |
- TestCaptureUpdatedRegion(); |
-} |
- |
-// Disabled due to being flaky due to the fact that it uses rendering / UI, see |
-// webrtc/6366. |
-TEST_F(ScreenCapturerTest, DISABLED_TwoDirectxCapturers) { |
- if (!CreateDirectxCapturer()) { |
- return; |
- } |
- |
- std::unique_ptr<ScreenCapturer> capturer2 = std::move(capturer_); |
- RTC_CHECK(CreateDirectxCapturer()); |
- TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); |
-} |
- |
-// Disabled due to being flaky due to the fact that it uses rendering / UI, see |
-// webrtc/6366. |
-TEST_F(ScreenCapturerTest, DISABLED_CaptureUpdatedRegionWithMagnifierCapturer) { |
- CreateMagnifierCapturer(); |
- TestCaptureUpdatedRegion(); |
-} |
- |
-// Disabled due to being flaky due to the fact that it uses rendering / UI, see |
-// webrtc/6366. |
-TEST_F(ScreenCapturerTest, DISABLED_TwoMagnifierCapturers) { |
- CreateMagnifierCapturer(); |
- std::unique_ptr<ScreenCapturer> capturer2 = std::move(capturer_); |
- CreateMagnifierCapturer(); |
- TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); |
-} |
- |
-// Disabled due to being flaky due to the fact that it uses rendering / UI, see |
-// webrtc/6366. |
-TEST_F(ScreenCapturerTest, |
- DISABLED_MaybeCaptureUpdatedRegionWithDirectxCapturer) { |
- // Even DirectX capturer is not supported in current system, we should be able |
- // to select a usable capturer. |
- MaybeCreateDirectxCapturer(); |
- TestCaptureUpdatedRegion(); |
-} |
- |
#endif // defined(WEBRTC_WIN) |
} // namespace webrtc |