Index: content/browser/renderer_host/render_widget_host_view_browsertest.cc |
diff --git a/content/browser/renderer_host/render_widget_host_view_browsertest.cc b/content/browser/renderer_host/render_widget_host_view_browsertest.cc |
index 2235486de06d10e9c562f9f8a73b9eebf561fc14..394adfb04df98e3fd0e4bc9237809c4c7fac776f 100644 |
--- a/content/browser/renderer_host/render_widget_host_view_browsertest.cc |
+++ b/content/browser/renderer_host/render_widget_host_view_browsertest.cc |
@@ -38,7 +38,7 @@ class RenderWidgetHostViewBrowserTest : public ContentBrowserTest { |
ui::DisableTestCompositor(); |
} |
- bool CheckAcceleratedCompositingActive() { |
+ bool IsAcceleratedCompositingActive() { |
RenderWidgetHostImpl* impl = |
RenderWidgetHostImpl::From( |
shell()->web_contents()->GetRenderWidgetHostView()-> |
@@ -46,7 +46,7 @@ class RenderWidgetHostViewBrowserTest : public ContentBrowserTest { |
return impl->is_accelerated_compositing_active(); |
} |
- bool CheckCompositingSurface() { |
+ bool IsCompositingSurfaceReady() { |
#if defined(OS_WIN) |
if (!GpuDataManagerImpl::GetInstance()->IsUsingAcceleratedSurface()) |
return false; |
@@ -63,6 +63,30 @@ class RenderWidgetHostViewBrowserTest : public ContentBrowserTest { |
return ret; |
} |
+ bool IsBackingStoreReady() { |
+ RenderWidgetHostImpl* const rwh = RenderWidgetHostImpl::From( |
+ shell()->web_contents()->GetRenderWidgetHostView()-> |
+ GetRenderWidgetHost()); |
+ // Note: Passing false to GetBackingStore() asks for the backing store |
+ // without forcing its creation. We want to the browser to create it via |
+ // its normal mechanism. |
+ return rwh->GetBackingStore(false) != NULL; |
+ } |
+ |
+ // Waits until either the compositing surface or the backing store is ready as |
+ // a source for copying. |
+ void WaitForCopySourceReady(bool is_compositing_surface) { |
+ while ((is_compositing_surface && !IsCompositingSurfaceReady()) || |
+ (!is_compositing_surface && !IsBackingStoreReady())) { |
+ base::RunLoop run_loop; |
+ MessageLoop::current()->PostDelayedTask( |
+ FROM_HERE, |
+ run_loop.QuitClosure(), |
+ base::TimeDelta::FromMilliseconds(10)); |
+ run_loop.Run(); |
+ } |
+ } |
+ |
bool SetupCompositingSurface() { |
#if defined(OS_MACOSX) |
if (!IOSurfaceSupport::Initialize()) |
@@ -70,26 +94,22 @@ class RenderWidgetHostViewBrowserTest : public ContentBrowserTest { |
#endif |
NavigateToURL(shell(), net::FilePathToFileURL( |
test_dir_.AppendASCII("rwhv_compositing_animation.html"))); |
- if (!CheckAcceleratedCompositingActive()) |
+ if (!IsAcceleratedCompositingActive()) |
return false; |
// The page is now accelerated composited but a compositing surface might |
// not be available immediately so wait for it. |
- while (!CheckCompositingSurface()) { |
- base::RunLoop run_loop; |
- MessageLoop::current()->PostDelayedTask( |
- FROM_HERE, |
- run_loop.QuitClosure(), |
- base::TimeDelta::FromMilliseconds(10)); |
- run_loop.Run(); |
- } |
+ WaitForCopySourceReady(true); |
return true; |
} |
bool SetupNonCompositing() { |
+ // Assumption: Static HTML pages with only text will cause the RenderWidget |
+ // to turn on compositing. |
ncarter (slow)
2013/04/29 23:34:21
The text here describes the opposite of what the n
|
NavigateToURL(shell(), net::FilePathToFileURL( |
test_dir_.AppendASCII("rwhv_compositing_static.html"))); |
- return !CheckCompositingSurface(); |
+ WaitForCopySourceReady(false); |
+ return true; |
} |
void FinishCopyFromBackingStore(bool expected_result, |
@@ -255,18 +275,12 @@ IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewBrowserTest, |
EXPECT_TRUE(frame_captured); |
} |
-// Test copying from backing store when page is non-accelerated-composited. |
-// Flaky. http://crbug.com/224351 |
-#if defined(OS_MACOSX) || defined(OS_WIN) |
-#define MAYBE_CopyFromBackingStore DISABLED_CopyFromBackingStore |
-#else |
-#define MAYBE_CopyFromBackingStore CopyFromBackingStore |
-#endif |
-IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewBrowserTest, |
- MAYBE_CopyFromBackingStore) { |
+IN_PROC_BROWSER_TEST_F(RenderWidgetHostViewBrowserTest, CopyFromBackingStore) { |
SetupNonCompositing(); |
- base::RunLoop run_loop; |
+ LOG_IF(WARNING, IsCompositingSurfaceReady()) |
+ << "Accelerated compositing is still running for a static HTML page."; |
Ken Russell (switch to Gerrit)
2013/04/29 23:08:54
It looks to me like this test's assumptions are br
ncarter (slow)
2013/04/29 23:34:21
Agree, and I'm not such a big fan of a LOG_WARNING
|
+ base::RunLoop run_loop; |
shell()->web_contents()->GetRenderViewHost()->CopyFromBackingStore( |
gfx::Rect(), |
size_, |