Diff
Modified: trunk/LayoutTests/ChangeLog (92872 => 92873)
--- trunk/LayoutTests/ChangeLog 2011-08-11 19:24:50 UTC (rev 92872)
+++ trunk/LayoutTests/ChangeLog 2011-08-11 19:44:45 UTC (rev 92873)
@@ -1,3 +1,23 @@
+2011-08-10 Adrienne Walker <[email protected]>
+
+ Support creating compositing layers for scrollable frames and iframes
+ https://bugs.webkit.org/show_bug.cgi?id=55257
+
+ Reviewed by James Robinson.
+
+ * platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt: Added.
+ * platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer.html: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer.html: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing.html: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer.html: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing-expected.txt: Added.
+ * platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing.html: Added.
+ * platform/chromium/compositing/force-compositing-mode/resources/subframe-big.html: Added.
+ * platform/chromium/compositing/force-compositing-mode/resources/subframe-small.html: Added.
+
2011-08-11 David Hyatt <[email protected]>
https://bugs.webkit.org/show_bug.cgi?id=66075
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,10 @@
+
+(GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 800.00 600.00)
+ )
+ )
+)
+
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer.html (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer.html 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,27 @@
+<html>
+<head>
+ <style>
+ iframe {
+ height: 150px;
+ width: 150px;
+ }
+ </style>
+ <script>
+ function doTest()
+ {
+ if (window.layoutTestController) {
+ layoutTestController.dumpAsText(false);
+ document.getElementById('layertree').innerText = layoutTestController.layerTreeAsText();
+ }
+ }
+ window.addEventListener("load", doTest, false);
+ if (window.internals)
+ internals.setForceCompositingMode(document, true);
+ </script>
+</head>
+<body>
+ <!-- this should not generate a layer and the layer tree should be empty -->
+ <iframe src=""
+ <pre id="layertree"></pre>
+</body>
+</html>
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,10 @@
+
+(GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 800.00 600.00)
+ )
+ )
+)
+
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer.html (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer.html 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,31 @@
+<html>
+<head>
+ <style>
+ iframe {
+ height: 150px;
+ width: 150px;
+ }
+ </style>
+ <script>
+ if (window.internals)
+ internals.setForceCompositingMode(document, true);
+ function doTest()
+ {
+ if (window.layoutTestController)
+ layoutTestController.display();
+ var iframe = document.getElementById("parent-iframe");
+ iframe.contentDocument.body.setAttribute("style", "overflow:hidden");
+ iframe.contentDocument.body.offsetWidth; // See bug 41999
+ if (window.layoutTestController) {
+ layoutTestController.dumpAsText(false);
+ document.getElementById('layertree').innerText = layoutTestController.layerTreeAsText();
+ }
+ }
+ window.addEventListener("load", doTest, false);
+ </script>
+</head>
+<body>
+ <iframe id="parent-iframe" src=""
+ <pre id="layertree"></pre>
+</body>
+</html>
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,57 @@
+
+(GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (position 8.00 8.00)
+ (bounds 154.00 154.00)
+ (drawsContent 1)
+ (children 1
+ (GraphicsLayer
+ (position 2.00 2.00)
+ (children 4
+ (GraphicsLayer
+ (bounds 135.00 135.00)
+ (children 1
+ (GraphicsLayer
+ (children 1
+ (GraphicsLayer
+ (bounds 508.00 516.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 508.00 516.00)
+ (drawsContent 1)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (GraphicsLayer
+ (position 0.00 135.00)
+ (bounds 135.00 15.00)
+ (drawsContent 1)
+ )
+ (GraphicsLayer
+ (position 135.00 0.00)
+ (bounds 15.00 135.00)
+ (drawsContent 1)
+ )
+ (GraphicsLayer
+ (position 135.00 135.00)
+ (bounds 15.00 15.00)
+ (drawsContent 1)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing.html (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing.html 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,32 @@
+<html>
+<head>
+ <style>
+ iframe {
+ height: 150px;
+ width: 150px;
+ }
+ </style>
+ <script>
+ if (window.internals)
+ internals.setForceCompositingMode(document, true);
+ function doTest()
+ {
+ if (window.layoutTestController)
+ layoutTestController.display();
+ var iframe = document.getElementById("parent-iframe");
+ var box = iframe.contentDocument.getElementById("box");
+ box.setAttribute("style", "height:500px;width:500px;");
+ iframe.contentDocument.body.offsetWidth; // See bug 41999
+ if (window.layoutTestController) {
+ layoutTestController.dumpAsText(false);
+ document.getElementById('layertree').innerText = layoutTestController.layerTreeAsText();
+ }
+ }
+ window.addEventListener("load", doTest, false);
+ </script>
+</head>
+<body>
+ <iframe id="parent-iframe" src=""
+ <pre id="layertree"></p>
+</body>
+</html>
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,57 @@
+
+(GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (position 8.00 8.00)
+ (bounds 154.00 154.00)
+ (drawsContent 1)
+ (children 1
+ (GraphicsLayer
+ (position 2.00 2.00)
+ (children 4
+ (GraphicsLayer
+ (bounds 135.00 135.00)
+ (children 1
+ (GraphicsLayer
+ (children 1
+ (GraphicsLayer
+ (bounds 508.00 516.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 508.00 516.00)
+ (drawsContent 1)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ (GraphicsLayer
+ (position 0.00 135.00)
+ (bounds 135.00 15.00)
+ (drawsContent 1)
+ )
+ (GraphicsLayer
+ (position 135.00 0.00)
+ (bounds 15.00 135.00)
+ (drawsContent 1)
+ )
+ (GraphicsLayer
+ (position 135.00 135.00)
+ (bounds 15.00 15.00)
+ (drawsContent 1)
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+ )
+)
+
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer.html (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer.html 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,27 @@
+<html>
+<head>
+ <style>
+ iframe {
+ height: 150px;
+ width: 150px;
+ }
+ </style>
+ <script>
+ if (window.internals)
+ internals.setForceCompositingMode(document, true);
+ function doTest()
+ {
+ if (window.layoutTestController) {
+ layoutTestController.dumpAsText(false);
+ document.getElementById('layertree').innerText = layoutTestController.layerTreeAsText();
+ }
+ }
+ window.addEventListener("load", doTest, false);
+ </script>
+</head>
+<body>
+ <!-- this should generate a layer due to overflow -->
+ <iframe src=""
+ <pre id="layertree"></pre>
+</body>
+</html>
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing-expected.txt (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing-expected.txt (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing-expected.txt 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,10 @@
+
+(GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 800.00 600.00)
+ )
+ )
+)
+
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing-expected.txt
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing.html (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing.html 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,32 @@
+<html>
+<head>
+ <style>
+ iframe {
+ height: 150px;
+ width: 150px;
+ }
+ </style>
+ <script>
+ if (window.internals)
+ internals.setForceCompositingMode(document, true);
+ function doTest()
+ {
+ if (window.layoutTestController)
+ layoutTestController.display();
+ var iframe = document.getElementById("parent-iframe");
+ var box = iframe.contentDocument.getElementById("box");
+ box.setAttribute("style", "height:50px;width:50px;");
+ iframe.contentDocument.body.offsetWidth; // See bug 41999
+ if (window.layoutTestController) {
+ layoutTestController.dumpAsText(false);
+ document.getElementById('layertree').innerText = layoutTestController.layerTreeAsText();
+ }
+ }
+ window.addEventListener("load", doTest, false);
+ </script>
+</head>
+<body>
+ <iframe id="parent-iframe" src=""
+ <pre id="layertree"></p>
+</body>
+</html>
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-big.html (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-big.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-big.html 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,14 @@
+<html>
+<head>
+ <style>
+ div {
+ height: 500px;
+ width: 500px;
+ background-color: blue;
+ }
+ </style>
+</head>
+<body>
+ <div id="box"></div>
+</body>
+</html>
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-big.html
___________________________________________________________________
Added: svn:eol-style
Added: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-small.html (0 => 92873)
--- trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-small.html (rev 0)
+++ trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-small.html 2011-08-11 19:44:45 UTC (rev 92873)
@@ -0,0 +1,14 @@
+<html>
+<head>
+ <style>
+ div {
+ height: 50px;
+ width: 50px;
+ background-color: blue;
+ }
+ </style>
+</head>
+<body>
+ <div id="box"></div>
+</body>
+</html>
Property changes on: trunk/LayoutTests/platform/chromium/compositing/force-compositing-mode/resources/subframe-small.html
___________________________________________________________________
Added: svn:eol-style
Modified: trunk/Source/WebCore/ChangeLog (92872 => 92873)
--- trunk/Source/WebCore/ChangeLog 2011-08-11 19:24:50 UTC (rev 92872)
+++ trunk/Source/WebCore/ChangeLog 2011-08-11 19:44:45 UTC (rev 92873)
@@ -1,3 +1,26 @@
+2011-08-10 Adrienne Walker <[email protected]>
+
+ Support creating compositing layers for scrollable frames and iframes
+ https://bugs.webkit.org/show_bug.cgi?id=55257
+
+ Reviewed by James Robinson.
+
+ When force compositing mode is turned on, iframes with overflow will
+ become composited (in order to enable faster scrolling).
+
+ This patch was originally by Daniel Sievers <[email protected]>.
+
+ Tests: platform/chromium/compositing/force-compositing-mode/no-overflow-iframe-layer.html
+ platform/chromium/compositing/force-compositing-mode/overflow-hidden-iframe-layer.html
+ platform/chromium/compositing/force-compositing-mode/overflow-iframe-enter-compositing.html
+ platform/chromium/compositing/force-compositing-mode/overflow-iframe-layer.html
+ platform/chromium/compositing/force-compositing-mode/overflow-iframe-leave-compositing.html
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
+ (WebCore::RenderLayerCompositor::requiresCompositingForScrollableFrame):
+ * rendering/RenderLayerCompositor.h:
+
2011-08-11 Yong Li <[email protected]>
https://bugs.webkit.org/show_bug.cgi?id=65944
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (92872 => 92873)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2011-08-11 19:24:50 UTC (rev 92872)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2011-08-11 19:44:45 UTC (rev 92873)
@@ -139,9 +139,10 @@
hasAcceleratedCompositing = settings->acceleratedCompositingEnabled();
showDebugBorders = settings->showDebugBorders();
showRepaintCounter = settings->showRepaintCounter();
+ forceCompositingMode = settings->forceCompositingMode() && hasAcceleratedCompositing;
- if (!m_renderView->document()->frame()->tree()->parent())
- forceCompositingMode = settings->forceCompositingMode() && hasAcceleratedCompositing;
+ if (forceCompositingMode && m_renderView->document()->ownerElement())
+ forceCompositingMode = requiresCompositingForScrollableFrame();
}
// We allow the chrome to override the settings, in case the page is rendered
@@ -1358,6 +1359,15 @@
(layer->renderer()->hasOverflowClip() || layer->renderer()->hasClip());
}
+bool RenderLayerCompositor::requiresCompositingForScrollableFrame() const
+{
+ // Need this done first to determine overflow.
+ ASSERT(!m_renderView->needsLayout());
+
+ ScrollView* scrollView = m_renderView->frameView();
+ return scrollView->verticalScrollbar() || scrollView->horizontalScrollbar();
+}
+
bool RenderLayerCompositor::requiresCompositingForTransform(RenderObject* renderer) const
{
if (!(m_compositingTriggers & ChromeClient::ThreeDTransformTrigger))
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (92872 => 92873)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2011-08-11 19:24:50 UTC (rev 92872)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h 2011-08-11 19:44:45 UTC (rev 92873)
@@ -270,6 +270,7 @@
bool requiresCompositingForFrame(RenderObject*) const;
bool requiresCompositingWhenDescendantsAreCompositing(RenderObject*) const;
bool requiresCompositingForFullScreen(RenderObject*) const;
+ bool requiresCompositingForScrollableFrame() const;
bool requiresScrollLayer(RootLayerAttachment) const;
bool requiresHorizontalScrollbarLayer() const;