| OLD | NEW |
| 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2013 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/message_loop/message_loop_proxy.h" | 6 #include "base/message_loop/message_loop_proxy.h" |
| 7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
| 8 #include "base/run_loop.h" | 8 #include "base/run_loop.h" |
| 9 #include "content/browser/gpu/compositor_util.h" | 9 #include "content/browser/gpu/compositor_util.h" |
| 10 #include "content/browser/gpu/gpu_data_manager_impl.h" | 10 #include "content/browser/gpu/gpu_data_manager_impl.h" |
| (...skipping 259 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 WaitForCopySourceReady(); | 270 WaitForCopySourceReady(); |
| 271 return true; | 271 return true; |
| 272 } | 272 } |
| 273 | 273 |
| 274 private: | 274 private: |
| 275 const CompositingMode compositing_mode_; | 275 const CompositingMode compositing_mode_; |
| 276 | 276 |
| 277 DISALLOW_COPY_AND_ASSIGN(CompositingRenderWidgetHostViewBrowserTest); | 277 DISALLOW_COPY_AND_ASSIGN(CompositingRenderWidgetHostViewBrowserTest); |
| 278 }; | 278 }; |
| 279 | 279 |
| 280 class NonCompositingRenderWidgetHostViewBrowserTest | |
| 281 : public RenderWidgetHostViewBrowserTest { | |
| 282 public: | |
| 283 NonCompositingRenderWidgetHostViewBrowserTest() {} | |
| 284 | |
| 285 virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE { | |
| 286 // Note: Appending the kDisableAcceleratedCompositing switch here, but there | |
| 287 // are some builds that only use compositing and will ignore this switch. | |
| 288 // Therefore, the call to SetUpSourceSurface() later on will detect whether | |
| 289 // compositing mode is actually off. If it's on, the tests will pass | |
| 290 // blindly, logging a warning message, since we cannot test what the | |
| 291 // platform/implementation does not support. | |
| 292 command_line->AppendSwitch(switches::kDisableAcceleratedCompositing); | |
| 293 RenderWidgetHostViewBrowserTest::SetUpCommandLine(command_line); | |
| 294 } | |
| 295 | |
| 296 virtual GURL TestUrl() { | |
| 297 return GURL(kAboutBlankURL); | |
| 298 } | |
| 299 | |
| 300 virtual bool SetUpSourceSurface(const char* wait_message) OVERRIDE { | |
| 301 if (IsForceCompositingModeEnabled()) | |
| 302 return false; // See comment in SetUpCommandLine(). | |
| 303 | |
| 304 content::DOMMessageQueue message_queue; | |
| 305 NavigateToURL(shell(), TestUrl()); | |
| 306 if (wait_message != NULL) { | |
| 307 std::string result(wait_message); | |
| 308 if (!message_queue.WaitForMessage(&result)) { | |
| 309 EXPECT_TRUE(false) << "WaitForMessage " << result << " failed."; | |
| 310 return false; | |
| 311 } | |
| 312 } | |
| 313 | |
| 314 WaitForCopySourceReady(); | |
| 315 // Return whether the renderer left accelerated compositing turned off. | |
| 316 return !GetRenderWidgetHost()->is_accelerated_compositing_active(); | |
| 317 } | |
| 318 | |
| 319 private: | |
| 320 DISALLOW_COPY_AND_ASSIGN(NonCompositingRenderWidgetHostViewBrowserTest); | |
| 321 }; | |
| 322 | |
| 323 class FakeFrameSubscriber : public RenderWidgetHostViewFrameSubscriber { | 280 class FakeFrameSubscriber : public RenderWidgetHostViewFrameSubscriber { |
| 324 public: | 281 public: |
| 325 FakeFrameSubscriber( | 282 FakeFrameSubscriber( |
| 326 RenderWidgetHostViewFrameSubscriber::DeliverFrameCallback callback) | 283 RenderWidgetHostViewFrameSubscriber::DeliverFrameCallback callback) |
| 327 : callback_(callback) { | 284 : callback_(callback) { |
| 328 } | 285 } |
| 329 | 286 |
| 330 virtual bool ShouldCaptureFrame(base::TimeTicks present_time, | 287 virtual bool ShouldCaptureFrame(base::TimeTicks present_time, |
| 331 scoped_refptr<media::VideoFrame>* storage, | 288 scoped_refptr<media::VideoFrame>* storage, |
| 332 DeliverFrameCallback* callback) OVERRIDE { | 289 DeliverFrameCallback* callback) OVERRIDE { |
| (...skipping 18 matching lines...) Expand all Loading... |
| 351 // implementation. | 308 // implementation. |
| 352 #if !defined(OS_ANDROID) && !defined(OS_IOS) | 309 #if !defined(OS_ANDROID) && !defined(OS_IOS) |
| 353 | 310 |
| 354 // The CopyFromBackingStore() API should work on all platforms when compositing | 311 // The CopyFromBackingStore() API should work on all platforms when compositing |
| 355 // is enabled. | 312 // is enabled. |
| 356 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest, | 313 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest, |
| 357 CopyFromBackingStore) { | 314 CopyFromBackingStore) { |
| 358 RunBasicCopyFromBackingStoreTest(); | 315 RunBasicCopyFromBackingStoreTest(); |
| 359 } | 316 } |
| 360 | 317 |
| 361 // The CopyFromBackingStore() API should work on all platforms when compositing | |
| 362 // is disabled. | |
| 363 IN_PROC_BROWSER_TEST_F(NonCompositingRenderWidgetHostViewBrowserTest, | |
| 364 CopyFromBackingStore) { | |
| 365 RunBasicCopyFromBackingStoreTest(); | |
| 366 } | |
| 367 | |
| 368 // Tests that the callback passed to CopyFromBackingStore is always called, | 318 // Tests that the callback passed to CopyFromBackingStore is always called, |
| 369 // even when the RenderWidgetHost is deleting in the middle of an async copy. | 319 // even when the RenderWidgetHost is deleting in the middle of an async copy. |
| 370 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest, | 320 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest, |
| 371 CopyFromBackingStore_CallbackDespiteDelete) { | 321 CopyFromBackingStore_CallbackDespiteDelete) { |
| 372 SET_UP_SURFACE_OR_PASS_TEST(NULL); | 322 SET_UP_SURFACE_OR_PASS_TEST(NULL); |
| 373 | 323 |
| 374 base::RunLoop run_loop; | 324 base::RunLoop run_loop; |
| 375 GetRenderViewHost()->CopyFromBackingStore( | 325 GetRenderViewHost()->CopyFromBackingStore( |
| 376 gfx::Rect(), | 326 gfx::Rect(), |
| 377 frame_size(), | 327 frame_size(), |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 416 gfx::Rect(view->GetViewBounds().size()), dest, base::Bind( | 366 gfx::Rect(view->GetViewBounds().size()), dest, base::Bind( |
| 417 &RenderWidgetHostViewBrowserTest::FinishCopyFromCompositingSurface, | 367 &RenderWidgetHostViewBrowserTest::FinishCopyFromCompositingSurface, |
| 418 base::Unretained(this), run_loop.QuitClosure())); | 368 base::Unretained(this), run_loop.QuitClosure())); |
| 419 // Delete the surface before the callback is run. | 369 // Delete the surface before the callback is run. |
| 420 view->AcceleratedSurfaceRelease(); | 370 view->AcceleratedSurfaceRelease(); |
| 421 run_loop.Run(); | 371 run_loop.Run(); |
| 422 | 372 |
| 423 EXPECT_EQ(1, callback_invoke_count()); | 373 EXPECT_EQ(1, callback_invoke_count()); |
| 424 } | 374 } |
| 425 | 375 |
| 426 // With compositing turned off, no platforms should support the | |
| 427 // CopyFromCompositingSurfaceToVideoFrame() API. | |
| 428 IN_PROC_BROWSER_TEST_F(NonCompositingRenderWidgetHostViewBrowserTest, | |
| 429 CopyFromCompositingSurfaceToVideoFrameCallbackTest) { | |
| 430 SET_UP_SURFACE_OR_PASS_TEST(NULL); | |
| 431 EXPECT_FALSE(GetRenderWidgetHostViewPort()->CanCopyToVideoFrame()); | |
| 432 } | |
| 433 | |
| 434 // Test basic frame subscription functionality. We subscribe, and then run | 376 // Test basic frame subscription functionality. We subscribe, and then run |
| 435 // until at least one DeliverFrameCallback has been invoked. | 377 // until at least one DeliverFrameCallback has been invoked. |
| 436 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest, | 378 IN_PROC_BROWSER_TEST_P(CompositingRenderWidgetHostViewBrowserTest, |
| 437 FrameSubscriberTest) { | 379 FrameSubscriberTest) { |
| 438 SET_UP_SURFACE_OR_PASS_TEST(NULL); | 380 SET_UP_SURFACE_OR_PASS_TEST(NULL); |
| 439 RenderWidgetHostViewPort* const view = GetRenderWidgetHostViewPort(); | 381 RenderWidgetHostViewPort* const view = GetRenderWidgetHostViewPort(); |
| 440 if (!view->CanSubscribeFrame()) { | 382 if (!view->CanSubscribeFrame()) { |
| 441 LOG(WARNING) << ("Blindly passing this test: Frame subscription not " | 383 LOG(WARNING) << ("Blindly passing this test: Frame subscription not " |
| 442 "supported on this platform."); | 384 "supported on this platform."); |
| 443 return; | 385 return; |
| (...skipping 502 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 946 CompositingRenderWidgetHostViewBrowserTestTabCapture, | 888 CompositingRenderWidgetHostViewBrowserTestTabCapture, |
| 947 testing::ValuesIn(kAllCompositingModes)); | 889 testing::ValuesIn(kAllCompositingModes)); |
| 948 INSTANTIATE_TEST_CASE_P(GLAndSoftwareCompositing, | 890 INSTANTIATE_TEST_CASE_P(GLAndSoftwareCompositing, |
| 949 CompositingRenderWidgetHostViewTabCaptureHighDPI, | 891 CompositingRenderWidgetHostViewTabCaptureHighDPI, |
| 950 testing::ValuesIn(kAllCompositingModes)); | 892 testing::ValuesIn(kAllCompositingModes)); |
| 951 | 893 |
| 952 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) | 894 #endif // !defined(OS_ANDROID) && !defined(OS_IOS) |
| 953 | 895 |
| 954 } // namespace | 896 } // namespace |
| 955 } // namespace content | 897 } // namespace content |
| OLD | NEW |