Index: webrtc/modules/desktop_capture/screen_capturer_integration_test.cc |
diff --git a/webrtc/modules/desktop_capture/screen_capturer_integration_test.cc b/webrtc/modules/desktop_capture/screen_capturer_integration_test.cc |
index 48c0c173b91b6e0e910cab31c339c7e0bc69c641..30002e992544173cd16716856004b496176512cf 100644 |
--- a/webrtc/modules/desktop_capture/screen_capturer_integration_test.cc |
+++ b/webrtc/modules/desktop_capture/screen_capturer_integration_test.cc |
@@ -42,7 +42,8 @@ namespace webrtc { |
namespace { |
-ACTION_P(SaveUniquePtrArg, dest) { |
+ACTION_P2(SaveCaptureResult, result, dest) { |
+ *result = arg0; |
*dest = std::move(*arg1); |
} |
@@ -243,14 +244,11 @@ class ScreenCapturerIntegrationTest : public testing::Test { |
<< static_cast<int>(color.blue) << ", " |
<< static_cast<int>(color.alpha) << ")" << std::endl; |
ASSERT_TRUE(false) << "ScreenCapturerIntegrationTest may be flaky. " |
- "If the error message above is " |
- "\"////AP///wD///8A\", it's a known issue, " |
- "which should be able to recover by rerunning " |
- "the test. Otherwise please kindly FYI the " |
- "broken link to zijiehe@chromium.org for " |
- "investigation. If the failure continually " |
- "happens, but I have not responded as quick as " |
- "expected, disable *all* tests in " |
+ "Please kindly FYI the broken link to " |
+ "zijiehe@chromium.org for investigation. If " |
+ "the failure continually happens, but I have " |
+ "not responded as quick as expected, disable " |
+ "*all* tests in " |
"screen_capturer_integration_test.cc to " |
"unblock other developers."; |
} |
@@ -266,40 +264,47 @@ class ScreenCapturerIntegrationTest : public testing::Test { |
// Expects |capturer| to successfully capture a frame, and returns it. |
std::unique_ptr<DesktopFrame> CaptureFrame(DesktopCapturer* capturer) { |
- std::unique_ptr<DesktopFrame> frame; |
- EXPECT_CALL(callback_, |
- OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, _)) |
- .WillOnce(SaveUniquePtrArg(&frame)); |
- capturer->CaptureFrame(); |
- EXPECT_TRUE(frame); |
- return frame; |
+ for (int i = 0; i < 10; i++) { |
+ std::unique_ptr<DesktopFrame> frame; |
+ DesktopCapturer::Result result; |
+ EXPECT_CALL(callback_, OnCaptureResultPtr(_, _)) |
+ .WillOnce(SaveCaptureResult(&result, &frame)); |
+ capturer->CaptureFrame(); |
+ testing::Mock::VerifyAndClearExpectations(&callback_); |
+ if (result == DesktopCapturer::Result::SUCCESS) { |
+ EXPECT_TRUE(frame); |
+ return frame; |
+ } else { |
+ EXPECT_FALSE(frame); |
+ } |
+ } |
+ |
+ EXPECT_TRUE(false); |
+ return nullptr; |
} |
}; |
-#if defined(WEBRTC_WIN) |
-#define MAYBE_CaptureUpdatedRegion DISABLED_CaptureUpdatedRegion |
-#else |
-#define MAYBE_CaptureUpdatedRegion CaptureUpdatedRegion |
-#endif |
-TEST_F(ScreenCapturerIntegrationTest, MAYBE_CaptureUpdatedRegion) { |
+TEST_F(ScreenCapturerIntegrationTest, CaptureUpdatedRegion) { |
+#if !defined(WEBRTC_WIN) |
+ // ScreenCapturerWinGdi randomly returns blank screen, the root cause is still |
+ // unknown. Bug, https://bugs.chromium.org/p/webrtc/issues/detail?id=6843. |
TestCaptureUpdatedRegion(); |
+#endif |
} |
-#if defined(WEBRTC_WIN) |
-#define MAYBE_TwoCapturers DISABLED_TwoCapturers |
-#else |
-#define MAYBE_TwoCapturers TwoCapturers |
-#endif |
-TEST_F(ScreenCapturerIntegrationTest, MAYBE_TwoCapturers) { |
+TEST_F(ScreenCapturerIntegrationTest, TwoCapturers) { |
+#if !defined(WEBRTC_WIN) |
+ // ScreenCapturerWinGdi randomly returns blank screen, the root cause is still |
+ // unknown. Bug, https://bugs.chromium.org/p/webrtc/issues/detail?id=6843. |
std::unique_ptr<DesktopCapturer> capturer2 = std::move(capturer_); |
SetUp(); |
TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); |
+#endif |
} |
#if defined(WEBRTC_WIN) |
-TEST_F(ScreenCapturerIntegrationTest, |
- DISABLED_CaptureUpdatedRegionWithDirectxCapturer) { |
+TEST_F(ScreenCapturerIntegrationTest, CaptureUpdatedRegionWithDirectxCapturer) { |
if (!CreateDirectxCapturer()) { |
return; |
} |
@@ -307,7 +312,7 @@ TEST_F(ScreenCapturerIntegrationTest, |
TestCaptureUpdatedRegion(); |
} |
-TEST_F(ScreenCapturerIntegrationTest, DISABLED_TwoDirectxCapturers) { |
+TEST_F(ScreenCapturerIntegrationTest, TwoDirectxCapturers) { |
if (!CreateDirectxCapturer()) { |
return; |
} |
@@ -318,10 +323,10 @@ TEST_F(ScreenCapturerIntegrationTest, DISABLED_TwoDirectxCapturers) { |
} |
TEST_F(ScreenCapturerIntegrationTest, |
- DISABLED_CaptureUpdatedRegionWithMagnifierCapturer) { |
+ CaptureUpdatedRegionWithMagnifierCapturer) { |
// On Windows 8 or later, magnifier APIs return a frame with a border on test |
// environment, so disable these tests. |
- // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6666 |
+ // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6844 |
// TODO(zijiehe): Find the root cause of the border and failure, which cannot |
// reproduce on my dev machine. |
if (rtc::IsWindows8OrLater()) { |
@@ -331,10 +336,10 @@ TEST_F(ScreenCapturerIntegrationTest, |
TestCaptureUpdatedRegion(); |
} |
-TEST_F(ScreenCapturerIntegrationTest, DISABLED_TwoMagnifierCapturers) { |
+TEST_F(ScreenCapturerIntegrationTest, TwoMagnifierCapturers) { |
// On Windows 8 or later, magnifier APIs return a frame with a border on test |
// environment, so disable these tests. |
- // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6666 |
+ // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6844 |
// TODO(zijiehe): Find the root cause of the border and failure, which cannot |
// reproduce on my dev machine. |
if (rtc::IsWindows8OrLater()) { |
@@ -347,7 +352,15 @@ TEST_F(ScreenCapturerIntegrationTest, DISABLED_TwoMagnifierCapturers) { |
} |
TEST_F(ScreenCapturerIntegrationTest, |
- DISABLED_MaybeCaptureUpdatedRegionWithDirectxCapturer) { |
+ MaybeCaptureUpdatedRegionWithDirectxCapturer) { |
+ if (!rtc::IsWindows8OrLater()) { |
+ // ScreenCapturerWinGdi randomly returns blank screen, the root cause is |
+ // still unknown. Bug, |
+ // https://bugs.chromium.org/p/webrtc/issues/detail?id=6843. |
+ // On Windows 7 or early version, MaybeCreateDirectxCapturer() always |
+ // creates GDI capturer. |
+ return; |
+ } |
// Even DirectX capturer is not supported in current system, we should be able |
// to select a usable capturer. |
MaybeCreateDirectxCapturer(); |