Chromium Code Reviews| OLD | NEW | 
|---|---|
| 1 /* | 1 /* | 
| 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 2 * Copyright (c) 2016 The WebRTC project authors. All Rights Reserved. | 
| 3 * | 3 * | 
| 4 * Use of this source code is governed by a BSD-style license | 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 | 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 | 6 * tree. An additional intellectual property rights grant can be found | 
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may | 
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. | 
| 9 */ | 9 */ | 
| 10 | 10 | 
| (...skipping 24 matching lines...) Expand all Loading... | |
| 35 #include "webrtc/base/win32.h" | 35 #include "webrtc/base/win32.h" | 
| 36 #include "webrtc/modules/desktop_capture/win/screen_capturer_win_directx.h" | 36 #include "webrtc/modules/desktop_capture/win/screen_capturer_win_directx.h" | 
| 37 #endif // defined(WEBRTC_WIN) | 37 #endif // defined(WEBRTC_WIN) | 
| 38 | 38 | 
| 39 using ::testing::_; | 39 using ::testing::_; | 
| 40 | 40 | 
| 41 namespace webrtc { | 41 namespace webrtc { | 
| 42 | 42 | 
| 43 namespace { | 43 namespace { | 
| 44 | 44 | 
| 45 ACTION_P(SaveUniquePtrArg, dest) { | 45 ACTION_P2(SaveCaptureResult, result, dest) { | 
| 46 *result = arg0; | |
| 46 *dest = std::move(*arg1); | 47 *dest = std::move(*arg1); | 
| 47 } | 48 } | 
| 48 | 49 | 
| 49 // Returns true if color in |rect| of |frame| is |color|. | 50 // Returns true if color in |rect| of |frame| is |color|. | 
| 50 bool ArePixelsColoredBy(const DesktopFrame& frame, | 51 bool ArePixelsColoredBy(const DesktopFrame& frame, | 
| 51 DesktopRect rect, | 52 DesktopRect rect, | 
| 52 RgbaColor color, | 53 RgbaColor color, | 
| 53 bool may_partially_draw) { | 54 bool may_partially_draw) { | 
| 54 if (!may_partially_draw) { | 55 if (!may_partially_draw) { | 
| 55 // updated_region() should cover the painted area. | 56 // updated_region() should cover the painted area. | 
| (...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 259 if (succeeded_capturers == capturers.size()) { | 260 if (succeeded_capturers == capturers.size()) { | 
| 260 break; | 261 break; | 
| 261 } | 262 } | 
| 262 } | 263 } | 
| 263 | 264 | 
| 264 ASSERT_EQ(succeeded_capturers, capturers.size()); | 265 ASSERT_EQ(succeeded_capturers, capturers.size()); | 
| 265 } | 266 } | 
| 266 | 267 | 
| 267 // Expects |capturer| to successfully capture a frame, and returns it. | 268 // Expects |capturer| to successfully capture a frame, and returns it. | 
| 268 std::unique_ptr<DesktopFrame> CaptureFrame(DesktopCapturer* capturer) { | 269 std::unique_ptr<DesktopFrame> CaptureFrame(DesktopCapturer* capturer) { | 
| 269 std::unique_ptr<DesktopFrame> frame; | 270 for (int i = 0; i < 10; i++) { | 
| 270 EXPECT_CALL(callback_, | 271 std::unique_ptr<DesktopFrame> frame; | 
| 271 OnCaptureResultPtr(DesktopCapturer::Result::SUCCESS, _)) | 272 DesktopCapturer::Result result; | 
| 272 .WillOnce(SaveUniquePtrArg(&frame)); | 273 EXPECT_CALL(callback_, OnCaptureResultPtr(_, _)) | 
| 273 capturer->CaptureFrame(); | 274 .WillOnce(SaveCaptureResult(&result, &frame)); | 
| 274 EXPECT_TRUE(frame); | 275 capturer->CaptureFrame(); | 
| 275 return frame; | 276 if (result == DesktopCapturer::Result::SUCCESS) { | 
| 
 
Sergey Ulanov
2016/12/07 19:45:05
Verify that the callback was called, e.g. by calli
 
Hzj_jie
2016/12/07 20:09:30
Done.
 
 | |
| 277 EXPECT_TRUE(frame); | |
| 278 return frame; | |
| 279 } else { | |
| 280 EXPECT_FALSE(frame); | |
| 281 } | |
| 282 } | |
| 283 | |
| 284 EXPECT_TRUE(false); | |
| 285 return nullptr; | |
| 276 } | 286 } | 
| 277 }; | 287 }; | 
| 278 | 288 | 
| 279 #if defined(WEBRTC_WIN) | 289 TEST_F(ScreenCapturerIntegrationTest, CaptureUpdatedRegion) { | 
| 280 #define MAYBE_CaptureUpdatedRegion DISABLED_CaptureUpdatedRegion | 290 #if !defined(WEBRTC_WIN) | 
| 281 #else | 291 // ScreenCapturerWinGdi randomly returns blank screen, the root cause is still | 
| 282 #define MAYBE_CaptureUpdatedRegion CaptureUpdatedRegion | 292 // unknown. Bug, https://bugs.chromium.org/p/webrtc/issues/detail?id=6843. | 
| 293 TestCaptureUpdatedRegion(); | |
| 283 #endif | 294 #endif | 
| 284 TEST_F(ScreenCapturerIntegrationTest, MAYBE_CaptureUpdatedRegion) { | |
| 285 TestCaptureUpdatedRegion(); | |
| 286 } | 295 } | 
| 287 | 296 | 
| 288 #if defined(WEBRTC_WIN) | 297 TEST_F(ScreenCapturerIntegrationTest, TwoCapturers) { | 
| 289 #define MAYBE_TwoCapturers DISABLED_TwoCapturers | 298 #if !defined(WEBRTC_WIN) | 
| 290 #else | 299 // ScreenCapturerWinGdi randomly returns blank screen, the root cause is still | 
| 291 #define MAYBE_TwoCapturers TwoCapturers | 300 // unknown. Bug, https://bugs.chromium.org/p/webrtc/issues/detail?id=6843. | 
| 292 #endif | |
| 293 TEST_F(ScreenCapturerIntegrationTest, MAYBE_TwoCapturers) { | |
| 294 std::unique_ptr<DesktopCapturer> capturer2 = std::move(capturer_); | 301 std::unique_ptr<DesktopCapturer> capturer2 = std::move(capturer_); | 
| 295 SetUp(); | 302 SetUp(); | 
| 296 TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); | 303 TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); | 
| 304 #endif | |
| 297 } | 305 } | 
| 298 | 306 | 
| 299 #if defined(WEBRTC_WIN) | 307 #if defined(WEBRTC_WIN) | 
| 300 | 308 | 
| 301 TEST_F(ScreenCapturerIntegrationTest, | 309 TEST_F(ScreenCapturerIntegrationTest, CaptureUpdatedRegionWithDirectxCapturer) { | 
| 302 DISABLED_CaptureUpdatedRegionWithDirectxCapturer) { | |
| 303 if (!CreateDirectxCapturer()) { | 310 if (!CreateDirectxCapturer()) { | 
| 304 return; | 311 return; | 
| 305 } | 312 } | 
| 306 | 313 | 
| 307 TestCaptureUpdatedRegion(); | 314 TestCaptureUpdatedRegion(); | 
| 308 } | 315 } | 
| 309 | 316 | 
| 310 TEST_F(ScreenCapturerIntegrationTest, DISABLED_TwoDirectxCapturers) { | 317 TEST_F(ScreenCapturerIntegrationTest, TwoDirectxCapturers) { | 
| 311 if (!CreateDirectxCapturer()) { | 318 if (!CreateDirectxCapturer()) { | 
| 312 return; | 319 return; | 
| 313 } | 320 } | 
| 314 | 321 | 
| 315 std::unique_ptr<DesktopCapturer> capturer2 = std::move(capturer_); | 322 std::unique_ptr<DesktopCapturer> capturer2 = std::move(capturer_); | 
| 316 RTC_CHECK(CreateDirectxCapturer()); | 323 RTC_CHECK(CreateDirectxCapturer()); | 
| 317 TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); | 324 TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); | 
| 318 } | 325 } | 
| 319 | 326 | 
| 320 TEST_F(ScreenCapturerIntegrationTest, | 327 TEST_F(ScreenCapturerIntegrationTest, | 
| 321 DISABLED_CaptureUpdatedRegionWithMagnifierCapturer) { | 328 CaptureUpdatedRegionWithMagnifierCapturer) { | 
| 322 // On Windows 8 or later, magnifier APIs return a frame with a border on test | 329 // On Windows 8 or later, magnifier APIs return a frame with a border on test | 
| 323 // environment, so disable these tests. | 330 // environment, so disable these tests. | 
| 324 // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6666 | 331 // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6844 | 
| 325 // TODO(zijiehe): Find the root cause of the border and failure, which cannot | 332 // TODO(zijiehe): Find the root cause of the border and failure, which cannot | 
| 326 // reproduce on my dev machine. | 333 // reproduce on my dev machine. | 
| 327 if (rtc::IsWindows8OrLater()) { | 334 if (rtc::IsWindows8OrLater()) { | 
| 328 return; | 335 return; | 
| 329 } | 336 } | 
| 330 CreateMagnifierCapturer(); | 337 CreateMagnifierCapturer(); | 
| 331 TestCaptureUpdatedRegion(); | 338 TestCaptureUpdatedRegion(); | 
| 332 } | 339 } | 
| 333 | 340 | 
| 334 TEST_F(ScreenCapturerIntegrationTest, DISABLED_TwoMagnifierCapturers) { | 341 TEST_F(ScreenCapturerIntegrationTest, TwoMagnifierCapturers) { | 
| 335 // On Windows 8 or later, magnifier APIs return a frame with a border on test | 342 // On Windows 8 or later, magnifier APIs return a frame with a border on test | 
| 336 // environment, so disable these tests. | 343 // environment, so disable these tests. | 
| 337 // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6666 | 344 // Bug https://bugs.chromium.org/p/webrtc/issues/detail?id=6844 | 
| 338 // TODO(zijiehe): Find the root cause of the border and failure, which cannot | 345 // TODO(zijiehe): Find the root cause of the border and failure, which cannot | 
| 339 // reproduce on my dev machine. | 346 // reproduce on my dev machine. | 
| 340 if (rtc::IsWindows8OrLater()) { | 347 if (rtc::IsWindows8OrLater()) { | 
| 341 return; | 348 return; | 
| 342 } | 349 } | 
| 343 CreateMagnifierCapturer(); | 350 CreateMagnifierCapturer(); | 
| 344 std::unique_ptr<DesktopCapturer> capturer2 = std::move(capturer_); | 351 std::unique_ptr<DesktopCapturer> capturer2 = std::move(capturer_); | 
| 345 CreateMagnifierCapturer(); | 352 CreateMagnifierCapturer(); | 
| 346 TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); | 353 TestCaptureUpdatedRegion({capturer_.get(), capturer2.get()}); | 
| 347 } | 354 } | 
| 348 | 355 | 
| 349 TEST_F(ScreenCapturerIntegrationTest, | 356 TEST_F(ScreenCapturerIntegrationTest, | 
| 350 DISABLED_MaybeCaptureUpdatedRegionWithDirectxCapturer) { | 357 MaybeCaptureUpdatedRegionWithDirectxCapturer) { | 
| 358 if (!rtc::IsWindows8OrLater()) { | |
| 359 // ScreenCapturerWinGdi randomly returns blank screen, the root cause is | |
| 360 // still unknown. Bug, | |
| 361 // https://bugs.chromium.org/p/webrtc/issues/detail?id=6843. | |
| 362 // On Windows 7 or early version, MaybeCreateDirectxCapturer() always | |
| 363 // creates GDI capturer. | |
| 364 return; | |
| 365 } | |
| 351 // Even DirectX capturer is not supported in current system, we should be able | 366 // Even DirectX capturer is not supported in current system, we should be able | 
| 352 // to select a usable capturer. | 367 // to select a usable capturer. | 
| 353 MaybeCreateDirectxCapturer(); | 368 MaybeCreateDirectxCapturer(); | 
| 354 TestCaptureUpdatedRegion(); | 369 TestCaptureUpdatedRegion(); | 
| 355 } | 370 } | 
| 356 | 371 | 
| 357 #endif // defined(WEBRTC_WIN) | 372 #endif // defined(WEBRTC_WIN) | 
| 358 | 373 | 
| 359 } // namespace webrtc | 374 } // namespace webrtc | 
| OLD | NEW |