Title: [140593] trunk
- Revision
- 140593
- Author
- [email protected]
- Date
- 2013-01-23 14:24:49 -0800 (Wed, 23 Jan 2013)
Log Message
Should update compositing state when an out-of-view fixed position element becomes in-view
https://bugs.webkit.org/show_bug.cgi?id=107410
Reviewed by Simon Fraser.
Source/WebCore:
When a non-compositing page contains some not-composited fixed position element because of bounds out-of-view, when the element changes position and RenderLayerCompositor::updateCompositingLayers() is called, the function may return early because of "if (!m_reevaluateCompositingAfterLayout && !m_compositing)" without updating the compositing layers.
Set m_reevaluateCompositingAfterLayout when a fixed position element is not composited because of bounds out-of-view.
Test: compositing/layer-creation/fixed-position-change-out-of-view-in-view.html
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::requiresCompositingForPosition):
LayoutTests:
Tests if compositing status is properly updated when fixed position elements change from out-of-view to in-view and back.
* compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt: Added.
* compositing/layer-creation/fixed-position-change-out-of-view-in-view.html: Added.
Modified Paths
Added Paths
Diff
Modified: trunk/LayoutTests/ChangeLog (140592 => 140593)
--- trunk/LayoutTests/ChangeLog 2013-01-23 22:20:08 UTC (rev 140592)
+++ trunk/LayoutTests/ChangeLog 2013-01-23 22:24:49 UTC (rev 140593)
@@ -1,3 +1,15 @@
+2013-01-23 Xianzhu Wang <[email protected]>
+
+ Should update compositing state when an out-of-view fixed position element becomes in-view
+ https://bugs.webkit.org/show_bug.cgi?id=107410
+
+ Reviewed by Simon Fraser.
+
+ Tests if compositing status is properly updated when fixed position elements change from out-of-view to in-view and back.
+
+ * compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt: Added.
+ * compositing/layer-creation/fixed-position-change-out-of-view-in-view.html: Added.
+
2013-01-23 Erik Arvidsson <[email protected]>
Layout Test platform/chromium-win/fast/events/panScroll-panIcon.html is failing
Added: trunk/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt (0 => 140593)
--- trunk/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt (rev 0)
+++ trunk/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view-expected.txt 2013-01-23 22:24:49 UTC (rev 140593)
@@ -0,0 +1,22 @@
+Layer tree when the fixed elements are out-of-view (should be blank):
+Layer tree when the fixed elements are in-view (both fixed elements should have layers):
+(GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 1
+ (GraphicsLayer
+ (bounds 800.00 600.00)
+ (children 2
+ (GraphicsLayer
+ (position 100.00 50.00)
+ (bounds 10.00 10.00)
+ )
+ (GraphicsLayer
+ (position 100.00 100.00)
+ (bounds 10.00 10.00)
+ )
+ )
+ )
+ )
+)
+Layer tree when the fixed elements are out-of-view again (should be blank):
+
Added: trunk/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view.html (0 => 140593)
--- trunk/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view.html (rev 0)
+++ trunk/LayoutTests/compositing/layer-creation/fixed-position-change-out-of-view-in-view.html 2013-01-23 22:24:49 UTC (rev 140593)
@@ -0,0 +1,35 @@
+<!DOCTYPE html>
+
+<html>
+<head>
+ <script type="text/_javascript_">
+ if (window.testRunner && window.internals) {
+ testRunner.dumpAsText();
+ internals.settings.setAcceleratedCompositingForFixedPositionEnabled(true);
+ internals.settings.setFixedPositionCreatesStackingContext(true);
+
+ addEventListener("load", function() {
+ document.getElementById("layerTree1").innerText = internals.layerTreeAsText(document);
+ document.getElementById("fixed1").style.top = "50px";
+ document.getElementById("fixed2").style.height = "10px";
+ document.getElementById("layerTree2").innerText = internals.layerTreeAsText(document);
+ document.getElementById("fixed1").style.top = "-100px";
+ document.getElementById("fixed2").style.height = "0px";
+ document.getElementById("layerTree3").innerText = internals.layerTreeAsText(document);
+ }, false);
+ }
+ </script>
+</head>
+
+<body>
+ Layer tree when the fixed elements are out-of-view (should be blank):
+ <pre id="layerTree1"></pre>
+ Layer tree when the fixed elements are in-view (both fixed elements should have layers):
+ <pre id="layerTree2"></pre>
+ Layer tree when the fixed elements are out-of-view again (should be blank):
+ <pre id="layerTree3"></pre>
+ <div id="fixed1" style="position: fixed; top: -100px; left: 100px; width: 10px; height: 10px"></div>
+ <div id="fixed2" style="position: fixed; top: 100px; left: 100px; width: 10px; height: 0px"></div>
+</body>
+</html>
+
Modified: trunk/Source/WebCore/ChangeLog (140592 => 140593)
--- trunk/Source/WebCore/ChangeLog 2013-01-23 22:20:08 UTC (rev 140592)
+++ trunk/Source/WebCore/ChangeLog 2013-01-23 22:24:49 UTC (rev 140593)
@@ -1,3 +1,19 @@
+2013-01-23 Xianzhu Wang <[email protected]>
+
+ Should update compositing state when an out-of-view fixed position element becomes in-view
+ https://bugs.webkit.org/show_bug.cgi?id=107410
+
+ Reviewed by Simon Fraser.
+
+ When a non-compositing page contains some not-composited fixed position element because of bounds out-of-view, when the element changes position and RenderLayerCompositor::updateCompositingLayers() is called, the function may return early because of "if (!m_reevaluateCompositingAfterLayout && !m_compositing)" without updating the compositing layers.
+
+ Set m_reevaluateCompositingAfterLayout when a fixed position element is not composited because of bounds out-of-view.
+
+ Test: compositing/layer-creation/fixed-position-change-out-of-view-in-view.html
+
+ * rendering/RenderLayerCompositor.cpp:
+ (WebCore::RenderLayerCompositor::requiresCompositingForPosition):
+
2013-01-23 Tony Chang <[email protected]>
Unreviewed, set svn:eol-style to CRLF on Windows .sln files.
Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (140592 => 140593)
--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2013-01-23 22:20:08 UTC (rev 140592)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp 2013-01-23 22:24:49 UTC (rev 140593)
@@ -2072,6 +2072,8 @@
if (!viewBounds.intersects(enclosingIntRect(layerBounds))) {
if (viewportConstrainedNotCompositedReason)
*viewportConstrainedNotCompositedReason = RenderLayer::NotCompositedForBoundsOutOfView;
+ // Reevaluate compositing after layout because the layer bounds may change and become composited.
+ m_reevaluateCompositingAfterLayout = true;
return false;
}
}
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes