<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[169053] trunk</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/169053">169053</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2014-05-19 11:33:26 -0700 (Mon, 19 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Images missing sometimes with composited clipping layers
https://bugs.webkit.org/show_bug.cgi?id=133065
&lt;rdar://problem/15224559&gt;

Reviewed by Beth Dakin.

Source/WebCore:

When support for solid colors on layers was added, a layer was considered a candidate
for the solid color optimization without regard to whether it had descendent layers
with &quot;paintsIntoCompositedAncestor&quot; requirements.

Fix hasVisibleNonCompositingDescendantLayers(), renaming it to isPaintDestinationForDescendentLayers()
and having it take into account whether descendent layers need to paint into an
ancestor.

Also, this test has to happen after those descendent layers have had their
compositing state updated, so move the isSimpleContainerCompositingLayer() to
a new updateAfterDescendents() function which is called from the various
places we do compositing-udpate-tree-walks.

Test: compositing/backing/solid-color-with-paints-into-ancestor.html

* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::updateGeometry):
(WebCore::RenderLayerBacking::updateAfterDescendents):
(WebCore::RenderLayerBacking::paintsChildren):
(WebCore::compositedWithOwnBackingStore):
(WebCore::descendentLayerPaintsIntoAncestor):
(WebCore::RenderLayerBacking::isPaintDestinationForDescendentLayers):
(WebCore::hasVisibleNonCompositingDescendant): Deleted.
(WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers): Deleted.
* rendering/RenderLayerBacking.h:
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
(WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
(WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):

LayoutTests:

* compositing/backing/solid-color-with-paints-into-ancestor-expected.html: Added.
* compositing/backing/solid-color-with-paints-into-ancestor.html: Added.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingh">trunk/Source/WebCore/rendering/RenderLayerBacking.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestscompositingbackingsolidcolorwithpaintsintoancestorexpectedhtml">trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor-expected.html</a></li>
<li><a href="#trunkLayoutTestscompositingbackingsolidcolorwithpaintsintoancestorhtml">trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor.html</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (169052 => 169053)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-05-19 18:14:09 UTC (rev 169052)
+++ trunk/LayoutTests/ChangeLog        2014-05-19 18:33:26 UTC (rev 169053)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2014-05-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Images missing sometimes with composited clipping layers
+        https://bugs.webkit.org/show_bug.cgi?id=133065
+        &lt;rdar://problem/15224559&gt;
+
+        Reviewed by Beth Dakin.
+
+        * compositing/backing/solid-color-with-paints-into-ancestor-expected.html: Added.
+        * compositing/backing/solid-color-with-paints-into-ancestor.html: Added.
+
</ins><span class="cx"> 2014-05-19  Jono Wells  &lt;jonowells@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Script include paths for js-test-pre.js and js-test-post.js were incorrect.
</span></span></pre></div>
<a id="trunkLayoutTestscompositingbackingsolidcolorwithpaintsintoancestorexpectedhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor-expected.html (0 => 169053)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor-expected.html                                (rev 0)
+++ trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor-expected.html        2014-05-19 18:33:26 UTC (rev 169053)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        .container {
+            position: absolute;
+            width: 400px;
+            height: 400px;
+            background: gray;
+            overflow: hidden;
+            z-index: 1;
+        }
+        
+        .clipping {
+            position: absolute;
+            z-index: 3;
+            left: 50px;
+            top: 50px;
+            width: 300px;
+            height: 300px;
+            background: url('../resources/simple_image.png');
+            background-size: 100% 100%;
+        }
+        
+        .inner {
+            position: absolute;
+            top: 50px;
+            left: 50px;
+            height: 200px;
+            width: 200px;
+            background-color: green;
+        }
+        
+        .composited {
+            -webkit-transform: translateZ(0);
+        }
+    &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div class=&quot;container&quot;&gt;
+        &lt;div class=&quot;clipping&quot;&gt;
+            &lt;div class=&quot;inner composited&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;pre id=&quot;layers&quot;&gt;Layer tree goes here in DRT&lt;/pre&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkLayoutTestscompositingbackingsolidcolorwithpaintsintoancestorhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor.html (0 => 169053)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor.html                                (rev 0)
+++ trunk/LayoutTests/compositing/backing/solid-color-with-paints-into-ancestor.html        2014-05-19 18:33:26 UTC (rev 169053)
</span><span class="lines">@@ -0,0 +1,49 @@
</span><ins>+&lt;!DOCTYPE html&gt;
+
+&lt;html&gt;
+&lt;head&gt;
+    &lt;style&gt;
+        .container {
+            position: absolute;
+            width: 400px;
+            height: 400px;
+            background: gray;
+            overflow: hidden;
+            z-index: 1;
+        }
+        
+        .clipping {
+            position: absolute;
+            z-index: 3;
+            left: 50px;
+            top: 50px;
+            width: 300px;
+            height: 300px;
+            overflow: hidden;
+            background: url('../resources/simple_image.png');
+            background-size: 100% 100%;
+        }
+        
+        .inner {
+            position: absolute;
+            top: 50px;
+            left: 50px;
+            height: 200px;
+            width: 200px;
+            background-color: green;
+        }
+        
+        .composited {
+            -webkit-transform: translateZ(0);
+        }
+    &lt;/style&gt;
+&lt;/head&gt;
+&lt;body&gt;
+    &lt;div class=&quot;container&quot;&gt;
+        &lt;div class=&quot;clipping&quot;&gt;
+            &lt;div class=&quot;inner composited&quot;&gt;&lt;/div&gt;
+        &lt;/div&gt;
+    &lt;/div&gt;
+&lt;pre id=&quot;layers&quot;&gt;Layer tree goes here in DRT&lt;/pre&gt;
+&lt;/body&gt;
+&lt;/html&gt;
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (169052 => 169053)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-05-19 18:14:09 UTC (rev 169052)
+++ trunk/Source/WebCore/ChangeLog        2014-05-19 18:33:26 UTC (rev 169053)
</span><span class="lines">@@ -1,3 +1,41 @@
</span><ins>+2014-05-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Images missing sometimes with composited clipping layers
+        https://bugs.webkit.org/show_bug.cgi?id=133065
+        &lt;rdar://problem/15224559&gt;
+
+        Reviewed by Beth Dakin.
+        
+        When support for solid colors on layers was added, a layer was considered a candidate
+        for the solid color optimization without regard to whether it had descendent layers
+        with &quot;paintsIntoCompositedAncestor&quot; requirements.
+        
+        Fix hasVisibleNonCompositingDescendantLayers(), renaming it to isPaintDestinationForDescendentLayers()
+        and having it take into account whether descendent layers need to paint into an
+        ancestor.
+        
+        Also, this test has to happen after those descendent layers have had their
+        compositing state updated, so move the isSimpleContainerCompositingLayer() to
+        a new updateAfterDescendents() function which is called from the various
+        places we do compositing-udpate-tree-walks.
+
+        Test: compositing/backing/solid-color-with-paints-into-ancestor.html
+
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::updateGeometry):
+        (WebCore::RenderLayerBacking::updateAfterDescendents):
+        (WebCore::RenderLayerBacking::paintsChildren):
+        (WebCore::compositedWithOwnBackingStore):
+        (WebCore::descendentLayerPaintsIntoAncestor):
+        (WebCore::RenderLayerBacking::isPaintDestinationForDescendentLayers):
+        (WebCore::hasVisibleNonCompositingDescendant): Deleted.
+        (WebCore::RenderLayerBacking::hasVisibleNonCompositingDescendantLayers): Deleted.
+        * rendering/RenderLayerBacking.h:
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::rebuildCompositingLayerTree):
+        (WebCore::RenderLayerCompositor::updateLayerTreeGeometry):
+        (WebCore::RenderLayerCompositor::updateCompositingDescendantGeometry):
+
</ins><span class="cx"> 2014-05-19  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r133351, sub-pixel layout): Right-to-left block with text-overflow: ellipsis truncates prematurely (breaks facebook.com Hebrew UI)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (169052 => 169053)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-05-19 18:14:09 UTC (rev 169052)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2014-05-19 18:33:26 UTC (rev 169053)
</span><span class="lines">@@ -670,15 +670,8 @@
</span><span class="cx">     updateBlendMode(style);
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><del>-    bool isSimpleContainer = isSimpleContainerCompositingLayer();
-    
</del><span class="cx">     m_owningLayer.updateDescendantDependentFlags();
</span><span class="cx"> 
</span><del>-    // m_graphicsLayer is the corresponding GraphicsLayer for this RenderLayer and its non-compositing
-    // descendants. So, the visibility flag for m_graphicsLayer should be true if there are any
-    // non-compositing visible layers.
-    m_graphicsLayer-&gt;setContentsVisible(m_owningLayer.hasVisibleContent() || hasVisibleNonCompositingDescendantLayers());
-
</del><span class="cx">     // FIXME: reflections should force transform-style to be flat in the style: https://bugs.webkit.org/show_bug.cgi?id=106959
</span><span class="cx">     bool preserves3D = style.transformStyle3D() == TransformStyle3DPreserve3D &amp;&amp; !renderer().hasReflection();
</span><span class="cx">     m_graphicsLayer-&gt;setPreserves3D(preserves3D);
</span><span class="lines">@@ -972,15 +965,22 @@
</span><span class="cx">     // If this layer was created just for clipping or to apply perspective, it doesn't need its own backing store.
</span><span class="cx">     setRequiresOwnBackingStore(compositor().requiresOwnBackingStore(m_owningLayer, compAncestor, enclosingRelativeCompositingBounds, ancestorCompositingBounds));
</span><span class="cx"> 
</span><ins>+    updateAfterWidgetResize();
+
+    compositor().updateScrollCoordinatedStatus(m_owningLayer);
+}
+
+void RenderLayerBacking::updateAfterDescendents()
+{
</ins><span class="cx">     bool didUpdateContentsRect = false;
</span><ins>+    bool isSimpleContainer = isSimpleContainerCompositingLayer();
</ins><span class="cx">     updateDirectlyCompositedContents(isSimpleContainer, didUpdateContentsRect);
</span><span class="cx">     if (!didUpdateContentsRect &amp;&amp; m_graphicsLayer-&gt;usesContentsLayer())
</span><span class="cx">         resetContentsRect();
</span><span class="cx"> 
</span><span class="cx">     updateDrawsContent(isSimpleContainer);
</span><del>-    updateAfterWidgetResize();
</del><span class="cx"> 
</span><del>-    compositor().updateScrollCoordinatedStatus(m_owningLayer);
</del><ins>+    m_graphicsLayer-&gt;setContentsVisible(m_owningLayer.hasVisibleContent() || isPaintDestinationForDescendentLayers());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderLayerBacking::adjustAncestorCompositingBoundsForFlowThread(LayoutRect&amp; ancestorCompositingBounds, const RenderLayer* compositingAncestor) const
</span><span class="lines">@@ -1680,7 +1680,7 @@
</span><span class="cx">     if (m_owningLayer.hasVisibleContent() &amp;&amp; m_owningLayer.hasNonEmptyChildRenderers())
</span><span class="cx">         return true;
</span><span class="cx"> 
</span><del>-    if (hasVisibleNonCompositingDescendantLayers())
</del><ins>+    if (isPaintDestinationForDescendentLayers())
</ins><span class="cx">         return true;
</span><span class="cx"> 
</span><span class="cx">     return false;
</span><span class="lines">@@ -1744,8 +1744,13 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static bool hasVisibleNonCompositingDescendant(RenderLayer&amp; parent)
</del><ins>+static bool compositedWithOwnBackingStore(const RenderLayer* layer)
</ins><span class="cx"> {
</span><ins>+    return layer-&gt;isComposited() &amp;&amp; !layer-&gt;backing()-&gt;paintsIntoCompositedAncestor();
+}
+
+static bool descendentLayerPaintsIntoAncestor(RenderLayer&amp; parent)
+{
</ins><span class="cx">     // FIXME: We shouldn't be called with a stale z-order lists. See bug 85512.
</span><span class="cx">     parent.updateLayerListsIfNeeded();
</span><span class="cx"> 
</span><span class="lines">@@ -1757,8 +1762,8 @@
</span><span class="cx">         size_t listSize = normalFlowList-&gt;size();
</span><span class="cx">         for (size_t i = 0; i &lt; listSize; ++i) {
</span><span class="cx">             RenderLayer* curLayer = normalFlowList-&gt;at(i);
</span><del>-            if (!curLayer-&gt;isComposited()
-                &amp;&amp; (curLayer-&gt;hasVisibleContent() || hasVisibleNonCompositingDescendant(*curLayer)))
</del><ins>+            if (!compositedWithOwnBackingStore(curLayer)
+                &amp;&amp; (curLayer-&gt;hasVisibleContent() || descendentLayerPaintsIntoAncestor(*curLayer)))
</ins><span class="cx">                 return true;
</span><span class="cx">         }
</span><span class="cx">     }
</span><span class="lines">@@ -1772,8 +1777,8 @@
</span><span class="cx">             size_t listSize = negZOrderList-&gt;size();
</span><span class="cx">             for (size_t i = 0; i &lt; listSize; ++i) {
</span><span class="cx">                 RenderLayer* curLayer = negZOrderList-&gt;at(i);
</span><del>-                if (!curLayer-&gt;isComposited()
-                    &amp;&amp; (curLayer-&gt;hasVisibleContent() || hasVisibleNonCompositingDescendant(*curLayer)))
</del><ins>+                if (!compositedWithOwnBackingStore(curLayer)
+                    &amp;&amp; (curLayer-&gt;hasVisibleContent() || descendentLayerPaintsIntoAncestor(*curLayer)))
</ins><span class="cx">                     return true;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -1782,8 +1787,8 @@
</span><span class="cx">             size_t listSize = posZOrderList-&gt;size();
</span><span class="cx">             for (size_t i = 0; i &lt; listSize; ++i) {
</span><span class="cx">                 RenderLayer* curLayer = posZOrderList-&gt;at(i);
</span><del>-                if (!curLayer-&gt;isComposited()
-                    &amp;&amp; (curLayer-&gt;hasVisibleContent() || hasVisibleNonCompositingDescendant(*curLayer)))
</del><ins>+                if (!compositedWithOwnBackingStore(curLayer)
+                    &amp;&amp; (curLayer-&gt;hasVisibleContent() || descendentLayerPaintsIntoAncestor(*curLayer)))
</ins><span class="cx">                     return true;
</span><span class="cx">             }
</span><span class="cx">         }
</span><span class="lines">@@ -1793,9 +1798,9 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Conservative test for having no rendered children.
</span><del>-bool RenderLayerBacking::hasVisibleNonCompositingDescendantLayers() const
</del><ins>+bool RenderLayerBacking::isPaintDestinationForDescendentLayers() const
</ins><span class="cx"> {
</span><del>-    return hasVisibleNonCompositingDescendant(m_owningLayer);
</del><ins>+    return descendentLayerPaintsIntoAncestor(m_owningLayer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool RenderLayerBacking::containsPaintedContent(bool isSimpleContainer) const
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.h (169052 => 169053)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.h        2014-05-19 18:14:09 UTC (rev 169052)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.h        2014-05-19 18:33:26 UTC (rev 169053)
</span><span class="lines">@@ -75,8 +75,13 @@
</span><span class="cx">     
</span><span class="cx">     // Returns true if layer configuration changed.
</span><span class="cx">     bool updateConfiguration();
</span><ins>+
</ins><span class="cx">     // Update graphics layer position and bounds.
</span><del>-    void updateGeometry(); // make private
</del><ins>+    void updateGeometry();
+
+    // Update state the requires that descendant layers have been updated.
+    void updateAfterDescendents();
+
</ins><span class="cx">     // Update contents and clipping structure.
</span><span class="cx">     void updateDrawsContent();
</span><span class="cx">     
</span><span class="lines">@@ -282,7 +287,7 @@
</span><span class="cx"> 
</span><span class="cx">     void resetContentsRect();
</span><span class="cx"> 
</span><del>-    bool hasVisibleNonCompositingDescendantLayers() const;
</del><ins>+    bool isPaintDestinationForDescendentLayers() const;
</ins><span class="cx"> 
</span><span class="cx">     bool shouldClipCompositedBounds() const;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (169052 => 169053)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-05-19 18:14:09 UTC (rev 169052)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-05-19 18:33:26 UTC (rev 169053)
</span><span class="lines">@@ -1517,6 +1517,9 @@
</span><span class="cx"> 
</span><span class="cx">         childLayersOfEnclosingLayer.append(layerBacking-&gt;childForSuperlayers());
</span><span class="cx">     }
</span><ins>+    
+    if (RenderLayerBacking* layerBacking = layer.backing())
+        layerBacking-&gt;updateAfterDescendents();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RenderLayerCompositor::rebuildRegionCompositingLayerTree(RenderNamedFlowFragment* region, Vector&lt;GraphicsLayer*&gt;&amp; childList, int depth)
</span><span class="lines">@@ -1751,6 +1754,9 @@
</span><span class="cx">                 updateLayerTreeGeometry(*posZOrderList-&gt;at(i), depth + 1);
</span><span class="cx">         }
</span><span class="cx">     }
</span><ins>+
+    if (RenderLayerBacking* layerBacking = layer.backing())
+        layerBacking-&gt;updateAfterDescendents();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> // Recurs down the RenderLayer tree until its finds the compositing descendants of compositingAncestor and updates their geometry.
</span><span class="lines">@@ -1766,8 +1772,10 @@
</span><span class="cx">             }
</span><span class="cx"> 
</span><span class="cx">             layerBacking-&gt;updateGeometry();
</span><del>-            if (compositedChildrenOnly)
</del><ins>+            if (compositedChildrenOnly) {
+                layerBacking-&gt;updateAfterDescendents();
</ins><span class="cx">                 return;
</span><ins>+            }
</ins><span class="cx">         }
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="lines">@@ -1802,9 +1810,13 @@
</span><span class="cx">                 updateCompositingDescendantGeometry(compositingAncestor, *posZOrderList-&gt;at(i), compositedChildrenOnly);
</span><span class="cx">         }
</span><span class="cx">     }
</span><ins>+    
+    if (&amp;layer != &amp;compositingAncestor) {
+        if (RenderLayerBacking* layerBacking = layer.backing())
+            layerBacking-&gt;updateAfterDescendents();
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-
</del><span class="cx"> void RenderLayerCompositor::repaintCompositedLayers(const IntRect* absRect)
</span><span class="cx"> {
</span><span class="cx">     recursiveRepaintLayer(rootRenderLayer(), absRect);
</span></span></pre>
</div>
</div>

</body>
</html>