<!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>[244509] trunk/Source/WebCore</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/244509">244509</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2019-04-22 12:57:58 -0700 (Mon, 22 Apr 2019)</dd>
</dl>

<h3>Log Message</h3>
<pre>Introduce the concept of "opportunistic" stacking contexts
https://bugs.webkit.org/show_bug.cgi?id=197077

Reviewed by Zalan Bujtas.

Bring back a variant of some code removed in <a href="http://trac.webkit.org/projects/webkit/changeset/236424">r236424</a>, which allows a RenderLayer
to be stacking context for painting, without actually being on in terms of CSS.

Internally, RenderLayer will call setIsOpportunisticStackingContext() to make a layer
into a stacking context for painting. External callers deal with isStackingContext()
or isCSSStackingContext().

Sadly we can't make m_forcedStackingContext (set on media element layers) trigger a
non-CSS stacking context; media controls use mix-blend-mode, and rely on the fake-stacking
media layer to be the "isolateBlending" ancestor.

No code uses this yet.

* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::RenderLayer):
(WebCore::RenderLayer::shouldBeCSSStackingContext const):
(WebCore::RenderLayer::isStackingContextChanged):
(WebCore::RenderLayer::setIsOpportunisticStackingContext):
(WebCore::RenderLayer::setIsCSSStackingContext):
(WebCore::RenderLayer::updateAncestorChainHasBlendingDescendants):
(WebCore::RenderLayer::dirtyAncestorChainHasBlendingDescendants):
(WebCore::RenderLayer::beginTransparencyLayers):
(WebCore::RenderLayer::calculateClipRects const):
(WebCore::outputPaintOrderTreeLegend):
(WebCore::outputPaintOrderTreeRecursive):
(WebCore::RenderLayer::shouldBeStackingContext const): Deleted.
(WebCore::RenderLayer::setIsStackingContext): Deleted.
* rendering/RenderLayer.h:
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::compositingOpacity const):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayercpp">trunk/Source/WebCore/rendering/RenderLayer.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerh">trunk/Source/WebCore/rendering/RenderLayer.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderTreeAsTextcpp">trunk/Source/WebCore/rendering/RenderTreeAsText.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (244508 => 244509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog   2019-04-22 19:51:38 UTC (rev 244508)
+++ trunk/Source/WebCore/ChangeLog      2019-04-22 19:57:58 UTC (rev 244509)
</span><span class="lines">@@ -1,3 +1,41 @@
</span><ins>+2019-04-22  Simon Fraser  <simon.fraser@apple.com>
+
+        Introduce the concept of "opportunistic" stacking contexts
+        https://bugs.webkit.org/show_bug.cgi?id=197077
+
+        Reviewed by Zalan Bujtas.
+
+        Bring back a variant of some code removed in r236424, which allows a RenderLayer
+        to be stacking context for painting, without actually being on in terms of CSS.
+        
+        Internally, RenderLayer will call setIsOpportunisticStackingContext() to make a layer
+        into a stacking context for painting. External callers deal with isStackingContext()
+        or isCSSStackingContext().
+
+        Sadly we can't make m_forcedStackingContext (set on media element layers) trigger a
+        non-CSS stacking context; media controls use mix-blend-mode, and rely on the fake-stacking
+        media layer to be the "isolateBlending" ancestor.
+
+        No code uses this yet.
+
+        * rendering/RenderLayer.cpp:
+        (WebCore::RenderLayer::RenderLayer):
+        (WebCore::RenderLayer::shouldBeCSSStackingContext const):
+        (WebCore::RenderLayer::isStackingContextChanged):
+        (WebCore::RenderLayer::setIsOpportunisticStackingContext):
+        (WebCore::RenderLayer::setIsCSSStackingContext):
+        (WebCore::RenderLayer::updateAncestorChainHasBlendingDescendants):
+        (WebCore::RenderLayer::dirtyAncestorChainHasBlendingDescendants):
+        (WebCore::RenderLayer::beginTransparencyLayers):
+        (WebCore::RenderLayer::calculateClipRects const):
+        (WebCore::outputPaintOrderTreeLegend):
+        (WebCore::outputPaintOrderTreeRecursive):
+        (WebCore::RenderLayer::shouldBeStackingContext const): Deleted.
+        (WebCore::RenderLayer::setIsStackingContext): Deleted.
+        * rendering/RenderLayer.h:
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::compositingOpacity const):
+
</ins><span class="cx"> 2019-04-22  Justin Fan  <justin_fan@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [WebGPU] Move swap chain methods from GPUDevice to GPUCanvasContext
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (244508 => 244509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.cpp   2019-04-22 19:51:38 UTC (rev 244508)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp      2019-04-22 19:57:58 UTC (rev 244509)
</span><span class="lines">@@ -271,6 +271,7 @@
</span><span class="cx"> RenderLayer::RenderLayer(RenderLayerModelObject& rendererLayerModelObject)
</span><span class="cx">     : m_isRenderViewLayer(rendererLayerModelObject.isRenderView())
</span><span class="cx">     , m_forcedStackingContext(rendererLayerModelObject.isMedia())
</span><ins>+    , m_isOpportunisticStackingContext(false)
</ins><span class="cx">     , m_zOrderListsDirty(false)
</span><span class="cx">     , m_normalFlowListDirty(true)
</span><span class="cx">     , m_hadNegativeZOrderList(false)
</span><span class="lines">@@ -317,7 +318,7 @@
</span><span class="cx">     , m_renderer(rendererLayerModelObject)
</span><span class="cx"> {
</span><span class="cx">     setIsNormalFlowOnly(shouldBeNormalFlowOnly());
</span><del>-    setIsStackingContext(shouldBeStackingContext());
</del><ins>+    setIsCSSStackingContext(shouldBeCSSStackingContext());
</ins><span class="cx"> 
</span><span class="cx">     m_isSelfPaintingLayer = shouldBeSelfPaintingLayer();
</span><span class="cx"> 
</span><span class="lines">@@ -560,9 +561,9 @@
</span><span class="cx">         || renderer().isInFlowRenderFragmentedFlow();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool RenderLayer::shouldBeStackingContext() const
</del><ins>+bool RenderLayer::shouldBeCSSStackingContext() const
</ins><span class="cx"> {
</span><del>-    return !renderer().style().hasAutoZIndex() || isRenderViewLayer() || isForcedStackingContext();
</del><ins>+    return !renderer().style().hasAutoZIndex() || isRenderViewLayer();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool RenderLayer::setIsNormalFlowOnly(bool isNormalFlowOnly)
</span><span class="lines">@@ -578,22 +579,37 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-bool RenderLayer::setIsStackingContext(bool isStackingContext)
</del><ins>+void RenderLayer::isStackingContextChanged()
</ins><span class="cx"> {
</span><del>-    if (isStackingContext == m_isStackingContext)
-        return false;
-    
-    m_isStackingContext = isStackingContext;
-
</del><span class="cx">     dirtyStackingContextZOrderLists();
</span><del>-    if (isStackingContext)
</del><ins>+    if (isStackingContext())
</ins><span class="cx">         dirtyZOrderLists();
</span><span class="cx">     else
</span><span class="cx">         clearZOrderLists();
</span><ins>+}
</ins><span class="cx"> 
</span><ins>+bool RenderLayer::setIsOpportunisticStackingContext(bool isStacking)
+{
+    bool wasStacking = isStackingContext();
+    m_isOpportunisticStackingContext = isStacking;
+    if (wasStacking == isStackingContext())
+        return false;
+
+    isStackingContextChanged();
</ins><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool RenderLayer::setIsCSSStackingContext(bool isCSSStackingContext)
+{
+    bool wasStacking = isStackingContext();
+    m_isCSSStackingContext = isCSSStackingContext;
+    if (wasStacking == isStackingContext())
+        return false;
+
+    isStackingContextChanged();
+    return true;
+}
+
</ins><span class="cx"> void RenderLayer::setParent(RenderLayer* parent)
</span><span class="cx"> {
</span><span class="cx">     if (parent == m_parent)
</span><span class="lines">@@ -1135,7 +1151,7 @@
</span><span class="cx"> 
</span><span class="cx">         layer->updateSelfPaintingLayer();
</span><span class="cx"> 
</span><del>-        if (layer->isStackingContext())
</del><ins>+        if (layer->isCSSStackingContext())
</ins><span class="cx">             break;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -1148,7 +1164,7 @@
</span><span class="cx">         
</span><span class="cx">         layer->m_hasNotIsolatedBlendingDescendantsStatusDirty = true;
</span><span class="cx"> 
</span><del>-        if (layer->isStackingContext())
</del><ins>+        if (layer->isCSSStackingContext())
</ins><span class="cx">             break;
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="lines">@@ -1979,7 +1995,7 @@
</span><span class="cx">         ancestor->beginTransparencyLayers(context, paintingInfo, dirtyRect);
</span><span class="cx">     
</span><span class="cx">     if (paintsWithTransparency(paintingInfo.paintBehavior)) {
</span><del>-        ASSERT(isStackingContext());
</del><ins>+        ASSERT(isCSSStackingContext());
</ins><span class="cx">         m_usedTransparency = true;
</span><span class="cx">         context.save();
</span><span class="cx">         LayoutRect adjustedClipRect = paintingExtent(*this, paintingInfo.rootLayer, dirtyRect, paintingInfo.paintBehavior);
</span><span class="lines">@@ -6364,10 +6380,10 @@
</span><span class="cx"> {
</span><span class="cx">     setIsNormalFlowOnly(shouldBeNormalFlowOnly());
</span><span class="cx"> 
</span><del>-    if (setIsStackingContext(shouldBeStackingContext())) {
</del><ins>+    if (setIsCSSStackingContext(shouldBeCSSStackingContext())) {
</ins><span class="cx"> #if ENABLE(CSS_COMPOSITING)
</span><span class="cx">         if (parent()) {
</span><del>-            if (isStackingContext()) {
</del><ins>+            if (isCSSStackingContext()) {
</ins><span class="cx">                 if (!hasNotIsolatedBlendingDescendantsStatusDirty() && hasNotIsolatedBlendingDescendants())
</span><span class="cx">                     parent()->dirtyAncestorChainHasBlendingDescendants();
</span><span class="cx">             } else {
</span><span class="lines">@@ -6755,7 +6771,7 @@
</span><span class="cx"> static void outputPaintOrderTreeLegend(TextStream& stream)
</span><span class="cx"> {
</span><span class="cx">     stream.nextLine();
</span><del>-    stream << "(S)tacking Context, (N)ormal flow only, (O)verflow clip, (A)lpha (opacity or mask), has (B)lend mode, (I)solates blending, (T)ransform-ish, (F)ilter, Fi(X)ed position, (C)omposited, (c)omposited descendant, (s)scrolling ancestor\n"
</del><ins>+    stream << "(S)tacking Context/(F)orced SC/O(P)portunistic SC, (N)ormal flow only, (O)verflow clip, (A)lpha (opacity or mask), has (B)lend mode, (I)solates blending, (T)ransform-ish, (F)ilter, Fi(X)ed position, (C)omposited, (c)omposited descendant, (s)scrolling ancestor\n"
</ins><span class="cx">         "Dirty (z)-lists, Dirty (n)ormal flow lists\n"
</span><span class="cx">         "Traversal needs: requirements (t)raversal on descendants, (b)acking or hierarchy traversal on descendants, (r)equirements traversal on all descendants, requirements traversal on all (s)ubsequent layers, (h)ierarchy traversal on all descendants, update of paint (o)rder children\n"
</span><span class="cx">         "Update needs:    post-(l)ayout requirements, (g)eometry, (k)ids geometry, (c)onfig, layer conne(x)ion, (s)crolling tree\n";
</span><span class="lines">@@ -6771,7 +6787,7 @@
</span><span class="cx"> 
</span><span class="cx"> static void outputPaintOrderTreeRecursive(TextStream& stream, const WebCore::RenderLayer& layer, const char* prefix, unsigned depth = 0)
</span><span class="cx"> {
</span><del>-    stream << (layer.isStackingContext() ? "S" : "-");
</del><ins>+    stream << (layer.isCSSStackingContext() ? "S" : (layer.isForcedStackingContext() ? "F" : (layer.isOpportunisticStackingContext() ? "P" : "-")));
</ins><span class="cx">     stream << (layer.isNormalFlowOnly() ? "N" : "-");
</span><span class="cx">     stream << (layer.renderer().hasOverflowClip() ? "O" : "-");
</span><span class="cx">     stream << (layer.isTransparent() ? "A" : "-");
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.h (244508 => 244509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.h     2019-04-22 19:51:38 UTC (rev 244508)
+++ trunk/Source/WebCore/rendering/RenderLayer.h        2019-04-22 19:57:58 UTC (rev 244509)
</span><span class="lines">@@ -166,8 +166,16 @@
</span><span class="cx">     void removeOnlyThisLayer();
</span><span class="cx"> 
</span><span class="cx">     bool isNormalFlowOnly() const { return m_isNormalFlowOnly; }
</span><del>-    bool isStackingContext() const { return m_isStackingContext; }
</del><span class="cx"> 
</span><ins>+    // isStackingContext is true for layers that we've determined should be stacking contexts for painting.
+    // Not all stacking contexts are CSS stacking contexts.
+    bool isStackingContext() const { return isCSSStackingContext() || m_isOpportunisticStackingContext; }
+
+    // isCSSStackingContext is true for layers that are stacking contexts from a CSS perspective.
+    // isCSSStackingContext() => isStackingContext().
+    // FIXME: m_forcedStackingContext should affect isStackingContext(), not isCSSStackingContext(), but doing so breaks media control mix-blend-mode.
+    bool isCSSStackingContext() const { return m_isCSSStackingContext || m_forcedStackingContext; }
+
</ins><span class="cx">     // Gets the enclosing stacking context for this layer, excluding this layer itself.
</span><span class="cx">     RenderLayer* stackingContext() const;
</span><span class="cx"> 
</span><span class="lines">@@ -500,6 +508,7 @@
</span><span class="cx"> 
</span><span class="cx">     bool isRenderViewLayer() const { return m_isRenderViewLayer; }
</span><span class="cx">     bool isForcedStackingContext() const { return m_forcedStackingContext; }
</span><ins>+    bool isOpportunisticStackingContext() const { return m_isOpportunisticStackingContext; }
</ins><span class="cx"> 
</span><span class="cx">     RenderLayerCompositor& compositor() const;
</span><span class="cx">     
</span><span class="lines">@@ -781,7 +790,7 @@
</span><span class="cx">     bool hasBlendMode() const { return renderer().hasBlendMode(); }
</span><span class="cx">     BlendMode blendMode() const { return static_cast<BlendMode>(m_blendMode); }
</span><span class="cx"> 
</span><del>-    bool isolatesCompositedBlending() const { return m_hasNotIsolatedCompositedBlendingDescendants && isStackingContext(); }
</del><ins>+    bool isolatesCompositedBlending() const { return m_hasNotIsolatedCompositedBlendingDescendants && isCSSStackingContext(); }
</ins><span class="cx">     bool hasNotIsolatedCompositedBlendingDescendants() const { return m_hasNotIsolatedCompositedBlendingDescendants; }
</span><span class="cx">     void setHasNotIsolatedCompositedBlendingDescendants(bool hasNotIsolatedCompositedBlendingDescendants)
</span><span class="cx">     {
</span><span class="lines">@@ -788,7 +797,7 @@
</span><span class="cx">         m_hasNotIsolatedCompositedBlendingDescendants = hasNotIsolatedCompositedBlendingDescendants;
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    bool isolatesBlending() const { return hasNotIsolatedBlendingDescendants() && isStackingContext(); }
</del><ins>+    bool isolatesBlending() const { return hasNotIsolatedBlendingDescendants() && isCSSStackingContext(); }
</ins><span class="cx">     
</span><span class="cx">     // FIXME: We should ASSERT(!m_hasNotIsolatedBlendingDescendantsStatusDirty); here but we hit the same bugs as visible content above.
</span><span class="cx">     bool hasNotIsolatedBlendingDescendants() const { return m_hasNotIsolatedBlendingDescendants; }
</span><span class="lines">@@ -882,12 +891,16 @@
</span><span class="cx">     void dirtyPaintOrderListsOnChildChange(RenderLayer&);
</span><span class="cx"> 
</span><span class="cx">     bool shouldBeNormalFlowOnly() const;
</span><del>-    bool shouldBeStackingContext() const;
-    
</del><ins>+    bool shouldBeCSSStackingContext() const;
+
</ins><span class="cx">     // Return true if changed.
</span><span class="cx">     bool setIsNormalFlowOnly(bool);
</span><del>-    bool setIsStackingContext(bool);
</del><span class="cx"> 
</span><ins>+    bool setIsOpportunisticStackingContext(bool);
+    bool setIsCSSStackingContext(bool);
+    
+    void isStackingContextChanged();
+
</ins><span class="cx">     bool isDirtyStackingContext() const { return m_zOrderListsDirty && isStackingContext(); }
</span><span class="cx"> 
</span><span class="cx">     void updateZOrderLists();
</span><span class="lines">@@ -1169,7 +1182,8 @@
</span><span class="cx">     const bool m_forcedStackingContext : 1;
</span><span class="cx"> 
</span><span class="cx">     bool m_isNormalFlowOnly : 1;
</span><del>-    bool m_isStackingContext : 1;
</del><ins>+    bool m_isCSSStackingContext : 1;
+    bool m_isOpportunisticStackingContext : 1;
</ins><span class="cx"> 
</span><span class="cx">     bool m_zOrderListsDirty : 1;
</span><span class="cx">     bool m_normalFlowListDirty: 1;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (244508 => 244509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp    2019-04-22 19:51:38 UTC (rev 244508)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp       2019-04-22 19:57:58 UTC (rev 244509)
</span><span class="lines">@@ -1897,7 +1897,7 @@
</span><span class="cx">     for (auto* curr = m_owningLayer.parent(); curr; curr = curr->parent()) {
</span><span class="cx">         // We only care about parents that are stacking contexts.
</span><span class="cx">         // Recall that opacity creates stacking context.
</span><del>-        if (!curr->isStackingContext())
</del><ins>+        if (!curr->isCSSStackingContext())
</ins><span class="cx">             continue;
</span><span class="cx">         
</span><span class="cx">         // If we found a compositing layer, we want to compute opacity
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderTreeAsTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderTreeAsText.cpp (244508 => 244509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderTreeAsText.cpp      2019-04-22 19:51:38 UTC (rev 244508)
+++ trunk/Source/WebCore/rendering/RenderTreeAsText.cpp 2019-04-22 19:57:58 UTC (rev 244509)
</span><span class="lines">@@ -712,7 +712,7 @@
</span><span class="cx">         
</span><span class="cx">     if (negativeZOrderLayers.size()) {
</span><span class="cx">         if (behavior & RenderAsTextShowLayerNesting) {
</span><del>-            ts << indent << " negative z-order list(" << negativeZOrderLayers.size() << ")\n";
</del><ins>+            ts << indent << " negative z-order list (" << negativeZOrderLayers.size() << ")\n";
</ins><span class="cx">             ts.increaseIndent();
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -745,7 +745,7 @@
</span><span class="cx">     auto normalFlowLayers = layer.normalFlowLayers();
</span><span class="cx">     if (normalFlowLayers.size()) {
</span><span class="cx">         if (behavior & RenderAsTextShowLayerNesting) {
</span><del>-            ts << indent << " normal flow list(" << normalFlowLayers.size() << ")\n";
</del><ins>+            ts << indent << " normal flow list (" << normalFlowLayers.size() << ")\n";
</ins><span class="cx">             ts.increaseIndent();
</span><span class="cx">         }
</span><span class="cx">         
</span><span class="lines">@@ -762,7 +762,7 @@
</span><span class="cx"> 
</span><span class="cx">         if (layerCount) {
</span><span class="cx">             if (behavior & RenderAsTextShowLayerNesting) {
</span><del>-                ts << indent << " positive z-order list(" << layerCount << ")\n";
</del><ins>+                ts << indent << " positive z-order list (" << layerCount << ")\n";
</ins><span class="cx">                 ts.increaseIndent();
</span><span class="cx">             }
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>