Title: [89394] trunk
Revision
89394
Author
[email protected]
Date
2011-06-21 16:52:04 -0700 (Tue, 21 Jun 2011)

Log Message

2011-06-21  Adrienne Walker  <[email protected]>

        Reviewed by Simon Fraser.

        Add child layers to the overlap map if their parent belatedly becomes composited
        https://bugs.webkit.org/show_bug.cgi?id=62181

        * compositing/layer-creation/overlap-transformed-layer-expected.txt: Added.
        * compositing/layer-creation/overlap-transformed-layer.html: Added.
2011-06-21  Adrienne Walker  <[email protected]>

        Reviewed by Simon Fraser.

        Add child layers to the overlap map if their parent belatedly becomes composited
        https://bugs.webkit.org/show_bug.cgi?id=62181

        * rendering/RenderLayerCompositor.cpp:
        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
        * rendering/RenderLayerCompositor.h:

Modified Paths

Added Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (89393 => 89394)


--- trunk/LayoutTests/ChangeLog	2011-06-21 23:46:49 UTC (rev 89393)
+++ trunk/LayoutTests/ChangeLog	2011-06-21 23:52:04 UTC (rev 89394)
@@ -1,3 +1,13 @@
+2011-06-21  Adrienne Walker  <[email protected]>
+
+        Reviewed by Simon Fraser.
+
+        Add child layers to the overlap map if their parent belatedly becomes composited
+        https://bugs.webkit.org/show_bug.cgi?id=62181
+
+        * compositing/layer-creation/overlap-transformed-layer-expected.txt: Added.
+        * compositing/layer-creation/overlap-transformed-layer.html: Added.
+
 2011-06-21  Zhenyao Mo  <[email protected]>
 
         Reviewed by Kenneth Russell.

Added: trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.png


(Binary files differ)
Property changes on: trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.png ___________________________________________________________________

Added: svn:mime-type

Added: trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt (0 => 89394)


--- trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt	                        (rev 0)
+++ trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt	2011-06-21 23:52:04 UTC (rev 89394)
@@ -0,0 +1,27 @@
+(GraphicsLayer
+  (bounds 800.00 600.00)
+  (children 1
+    (GraphicsLayer
+      (bounds 800.00 600.00)
+      (children 2
+        (GraphicsLayer
+          (position 23.00 8.00)
+          (anchor 1.47 0.00)
+          (bounds 256.00 256.00)
+          (drawsContent 1)
+          (transform [1.00 0.00 0.00 0.00] [0.00 1.00 0.00 0.00] [0.00 0.00 1.00 0.00] [-10.00 0.00 0.00 1.00])
+          (children 1
+            (GraphicsLayer
+              (position 385.00 0.00)
+            )
+          )
+        )
+        (GraphicsLayer
+          (bounds 300.00 300.00)
+          (drawsContent 1)
+        )
+      )
+    )
+  )
+)
+
Property changes on: trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer-expected.txt
___________________________________________________________________

Added: svn:eol-style

Added: trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer.html (0 => 89394)


--- trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer.html	                        (rev 0)
+++ trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer.html	2011-06-21 23:52:04 UTC (rev 89394)
@@ -0,0 +1,65 @@
+<html>
+<head>
+<style>
+    #container {
+        -webkit-transform: translate(-10px, 0px);
+    }
+
+    #indicator {
+        position: absolute;
+        left: 15px;
+        top: 0px;
+        height: 256px;
+        width: 256px;
+        background-color: red;
+    }
+
+    #green {
+        position: absolute;
+        left: 0px;
+        top: 0px;
+        width: 300px;
+        height: 300px;
+        background-color: green;
+    }
+
+    #composited {
+        position: absolute;
+        left: 400px;
+        -webkit-transform:translateZ(0);
+    }
+
+    #layertree {
+        position: absolute;
+        left: 10000px;
+        top: 0px;
+    }
+
+    body {
+        overflow: hidden;
+    }
+
+</style>
+
+<script>
+    if (window.layoutTestController) {
+        layoutTestController.dumpAsText(true);
+        window.addEventListener('load', function() {
+            document.getElementById("layertree").innerText = layoutTestController.layerTreeAsText();
+        }, false);
+    }
+</script>
+
+<body>
+    <div id="container">
+        <!-- This red square should not be visible -->
+        <div id="indicator"></div>
+        <div id="composited"></div>
+    </div>
+
+    <!-- This green square should render completely on top of the red one -->
+    <div id="green"></div>
+
+    <pre id="layertree"></pre>
+</body>
+</html>
Property changes on: trunk/LayoutTests/compositing/layer-creation/overlap-transformed-layer.html
___________________________________________________________________

Added: svn:eol-style

Modified: trunk/Source/WebCore/ChangeLog (89393 => 89394)


--- trunk/Source/WebCore/ChangeLog	2011-06-21 23:46:49 UTC (rev 89393)
+++ trunk/Source/WebCore/ChangeLog	2011-06-21 23:52:04 UTC (rev 89394)
@@ -1,3 +1,15 @@
+2011-06-21  Adrienne Walker  <[email protected]>
+
+        Reviewed by Simon Fraser.
+
+        Add child layers to the overlap map if their parent belatedly becomes composited
+        https://bugs.webkit.org/show_bug.cgi?id=62181
+
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::addToOverlapMapRecursive):
+        (WebCore::RenderLayerCompositor::computeCompositingRequirements):
+        * rendering/RenderLayerCompositor.h:
+
 2011-06-21  Zhenyao Mo  <[email protected]>
 
         Reviewed by Kenneth Russell.

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (89393 => 89394)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2011-06-21 23:46:49 UTC (rev 89393)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp	2011-06-21 23:52:04 UTC (rev 89394)
@@ -569,6 +569,45 @@
     overlapMap.add(layer, layerBounds);
 }
 
+void RenderLayerCompositor::addToOverlapMapRecursive(OverlapMap& overlapMap, RenderLayer* layer)
+{
+    if (!canBeComposited(layer) || overlapMap.contains(layer))
+        return;
+
+    IntRect bounds;
+    bool haveComputedBounds = false;
+    addToOverlapMap(overlapMap, layer, bounds, haveComputedBounds);
+
+    if (layer->isStackingContext()) {
+        if (Vector<RenderLayer*>* negZOrderList = layer->negZOrderList()) {
+            size_t listSize = negZOrderList->size();
+            for (size_t i = 0; i < listSize; ++i) {
+                RenderLayer* curLayer = negZOrderList->at(i);
+                addToOverlapMapRecursive(overlapMap, curLayer);
+            }
+        }
+    }
+
+    ASSERT(!layer->m_normalFlowListDirty);
+    if (Vector<RenderLayer*>* normalFlowList = layer->normalFlowList()) {
+        size_t listSize = normalFlowList->size();
+        for (size_t i = 0; i < listSize; ++i) {
+            RenderLayer* curLayer = normalFlowList->at(i);
+            addToOverlapMapRecursive(overlapMap, curLayer);
+        }
+    }
+
+    if (layer->isStackingContext()) {
+        if (Vector<RenderLayer*>* posZOrderList = layer->posZOrderList()) {
+            size_t listSize = posZOrderList->size();
+            for (size_t i = 0; i < listSize; ++i) {
+                RenderLayer* curLayer = posZOrderList->at(i);
+                addToOverlapMapRecursive(overlapMap, curLayer);
+            }
+        }
+    }
+}
+
 bool RenderLayerCompositor::overlapsCompositedLayers(OverlapMap& overlapMap, const IntRect& layerBounds)
 {
     RenderLayerCompositor::OverlapMap::const_iterator end = overlapMap.end();
@@ -698,7 +737,7 @@
     if (!willBeComposited && canBeComposited(layer) && childState.m_subtreeIsCompositing && requiresCompositingWhenDescendantsAreCompositing(layer->renderer())) {
         layer->setMustOverlapCompositedLayers(true);
         if (overlapMap)
-            addToOverlapMap(*overlapMap, layer, absBounds, haveComputedBounds);
+            addToOverlapMapRecursive(*overlapMap, layer);
         willBeComposited = true;
     }
 
@@ -717,7 +756,7 @@
     // so test that again.
     if (!willBeComposited && canBeComposited(layer) && clipsCompositingDescendants(layer)) {
         if (overlapMap)
-            addToOverlapMap(*overlapMap, layer, absBounds, haveComputedBounds);
+            addToOverlapMapRecursive(*overlapMap, layer);
         willBeComposited = true;
     }
 
@@ -1820,4 +1859,3 @@
 } // namespace WebCore
 
 #endif // USE(ACCELERATED_COMPOSITING)
-

Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (89393 => 89394)


--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2011-06-21 23:46:49 UTC (rev 89393)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h	2011-06-21 23:52:04 UTC (rev 89394)
@@ -214,6 +214,7 @@
 
     typedef HashMap<RenderLayer*, IntRect> OverlapMap;
     static void addToOverlapMap(OverlapMap&, RenderLayer*, IntRect& layerBounds, bool& boundsComputed);
+    void addToOverlapMapRecursive(OverlapMap&, RenderLayer*);
     static bool overlapsCompositedLayers(OverlapMap&, const IntRect& layerBounds);
 
     void updateCompositingLayersTimerFired(Timer<RenderLayerCompositor>*);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo.cgi/webkit-changes

Reply via email to