<!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>[194825] 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/194825">194825</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2016-01-09 22:39:43 -0800 (Sat, 09 Jan 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Hook up display-list drawing in GraphicsLayerCA
https://bugs.webkit.org/show_bug.cgi?id=152946

Reviewed by Zalan Bujtas.

Have GraphicsLayerCA hold a DisplayList. If enabled, do a display-list record
in GraphicsLayerCA::recursiveCommitChanges(), and a playback in GraphicsLayerCA::platformCALayerPaintContents().

GraphicsLayerCA needs to maintain a m_hasEverPainted flag to know to do a full record
at first paint (when there are no dirty rects).

Plumb 'isUsingDisplayListDrawing' through to TileGrid via PlatformCALayer{Client}
so that we can decorate the tile paint counters with an outline.

Have RenderLayerCompositor push the displayListDrawingEnabled state down through
RenderLayerBackings to GraphicsLayers.

Convert RenderLayerCompositor to use initializers.

* platform/graphics/GraphicsLayer.cpp:
(WebCore::GraphicsLayer::GraphicsLayer):
* platform/graphics/GraphicsLayer.h:
(WebCore::GraphicsLayer::usesDisplayListDrawing):
(WebCore::GraphicsLayer::setUsesDisplayListDrawing):
* platform/graphics/ca/GraphicsLayerCA.cpp:
(WebCore::GraphicsLayerCA::GraphicsLayerCA):
(WebCore::GraphicsLayerCA::setUsesDisplayListDrawing):
(WebCore::GraphicsLayerCA::recursiveCommitChanges):
(WebCore::GraphicsLayerCA::platformCALayerPaintContents):
(WebCore::GraphicsLayerCA::updateDrawsContent):
(WebCore::GraphicsLayerCA::dumpAdditionalProperties):
* platform/graphics/ca/GraphicsLayerCA.h:
* platform/graphics/ca/PlatformCALayer.cpp:
(WebCore::PlatformCALayer::drawRepaintIndicator):
* platform/graphics/ca/PlatformCALayerClient.h:
(WebCore::PlatformCALayerClient::isUsingDisplayListDrawing):
* platform/graphics/ca/TileGrid.cpp:
(WebCore::TileGrid::platformCALayerShowRepaintCounter):
(WebCore::TileGrid::isUsingDisplayListDrawing):
* platform/graphics/ca/TileGrid.h:
* platform/graphics/displaylists/DisplayList.h: Sadly need to include DisplayListItems.h
to get things to compile. I wasn't able to avoid this even when making functions non-inline.
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::createGraphicsLayer):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::RenderLayerCompositor):
(WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
* rendering/RenderLayerCompositor.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayercpp">trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayerh">trunk/Source/WebCore/platform/graphics/GraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh">trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCALayercpp">trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCALayerClienth">trunk/Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileGridcpp">trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileGridh">trunk/Source/WebCore/platform/graphics/ca/TileGrid.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsdisplaylistsDisplayListh">trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorh">trunk/Source/WebCore/rendering/RenderLayerCompositor.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/ChangeLog        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -1,3 +1,54 @@
</span><ins>+2016-01-09  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Hook up display-list drawing in GraphicsLayerCA
+        https://bugs.webkit.org/show_bug.cgi?id=152946
+
+        Reviewed by Zalan Bujtas.
+
+        Have GraphicsLayerCA hold a DisplayList. If enabled, do a display-list record
+        in GraphicsLayerCA::recursiveCommitChanges(), and a playback in GraphicsLayerCA::platformCALayerPaintContents().
+        
+        GraphicsLayerCA needs to maintain a m_hasEverPainted flag to know to do a full record
+        at first paint (when there are no dirty rects).
+        
+        Plumb 'isUsingDisplayListDrawing' through to TileGrid via PlatformCALayer{Client}
+        so that we can decorate the tile paint counters with an outline.
+        
+        Have RenderLayerCompositor push the displayListDrawingEnabled state down through
+        RenderLayerBackings to GraphicsLayers.
+        
+        Convert RenderLayerCompositor to use initializers.
+
+        * platform/graphics/GraphicsLayer.cpp:
+        (WebCore::GraphicsLayer::GraphicsLayer):
+        * platform/graphics/GraphicsLayer.h:
+        (WebCore::GraphicsLayer::usesDisplayListDrawing):
+        (WebCore::GraphicsLayer::setUsesDisplayListDrawing):
+        * platform/graphics/ca/GraphicsLayerCA.cpp:
+        (WebCore::GraphicsLayerCA::GraphicsLayerCA):
+        (WebCore::GraphicsLayerCA::setUsesDisplayListDrawing):
+        (WebCore::GraphicsLayerCA::recursiveCommitChanges):
+        (WebCore::GraphicsLayerCA::platformCALayerPaintContents):
+        (WebCore::GraphicsLayerCA::updateDrawsContent):
+        (WebCore::GraphicsLayerCA::dumpAdditionalProperties):
+        * platform/graphics/ca/GraphicsLayerCA.h:
+        * platform/graphics/ca/PlatformCALayer.cpp:
+        (WebCore::PlatformCALayer::drawRepaintIndicator):
+        * platform/graphics/ca/PlatformCALayerClient.h:
+        (WebCore::PlatformCALayerClient::isUsingDisplayListDrawing):
+        * platform/graphics/ca/TileGrid.cpp:
+        (WebCore::TileGrid::platformCALayerShowRepaintCounter):
+        (WebCore::TileGrid::isUsingDisplayListDrawing):
+        * platform/graphics/ca/TileGrid.h:
+        * platform/graphics/displaylists/DisplayList.h: Sadly need to include DisplayListItems.h
+        to get things to compile. I wasn't able to avoid this even when making functions non-inline.
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::createGraphicsLayer):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::RenderLayerCompositor):
+        (WebCore::RenderLayerCompositor::cacheAcceleratedCompositingFlags):
+        * rendering/RenderLayerCompositor.h:
+
</ins><span class="cx"> 2016-01-09  Zalan Bujtas  &lt;zalan@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         REGRESSION (r194426): First email field is not autofilled on amazon.com
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -122,6 +122,7 @@
</span><span class="cx">     , m_drawsContent(false)
</span><span class="cx">     , m_contentsVisible(true)
</span><span class="cx">     , m_acceleratesDrawing(false)
</span><ins>+    , m_usesDisplayListDrawing(false)
</ins><span class="cx">     , m_appliesPageScale(false)
</span><span class="cx">     , m_showDebugBorder(false)
</span><span class="cx">     , m_showRepaintCounter(false)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -345,6 +345,9 @@
</span><span class="cx">     bool acceleratesDrawing() const { return m_acceleratesDrawing; }
</span><span class="cx">     virtual void setAcceleratesDrawing(bool b) { m_acceleratesDrawing = b; }
</span><span class="cx"> 
</span><ins>+    bool usesDisplayListDrawing() const { return m_usesDisplayListDrawing; }
+    virtual void setUsesDisplayListDrawing(bool b) { m_usesDisplayListDrawing = b; }
+
</ins><span class="cx">     bool needsBackdrop() const { return !m_backdropFilters.isEmpty(); }
</span><span class="cx"> 
</span><span class="cx">     // The color used to paint the layer background. Pass an invalid color to remove it.
</span><span class="lines">@@ -606,6 +609,7 @@
</span><span class="cx">     bool m_drawsContent : 1;
</span><span class="cx">     bool m_contentsVisible : 1;
</span><span class="cx">     bool m_acceleratesDrawing : 1;
</span><ins>+    bool m_usesDisplayListDrawing : 1;
</ins><span class="cx">     bool m_appliesPageScale : 1; // Set for the layer which has the page scale applied to it.
</span><span class="cx">     bool m_showDebugBorder : 1;
</span><span class="cx">     bool m_showRepaintCounter : 1;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.cpp        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -28,6 +28,8 @@
</span><span class="cx"> #include &quot;GraphicsLayerCA.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;Animation.h&quot;
</span><ins>+#include &quot;DisplayListRecorder.h&quot;
+#include &quot;DisplayListReplayer.h&quot;
</ins><span class="cx"> #include &quot;FloatConversion.h&quot;
</span><span class="cx"> #include &quot;FloatRect.h&quot;
</span><span class="cx"> #include &quot;GraphicsLayerFactory.h&quot;
</span><span class="lines">@@ -360,6 +362,7 @@
</span><span class="cx">     , m_usingBackdropLayerType(false)
</span><span class="cx">     , m_isViewportConstrained(false)
</span><span class="cx">     , m_intersectsCoverageRect(false)
</span><ins>+    , m_hasEverPainted(false)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -666,6 +669,14 @@
</span><span class="cx">     noteLayerPropertyChanged(AcceleratesDrawingChanged);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void GraphicsLayerCA::setUsesDisplayListDrawing(bool usesDisplayListDrawing)
+{
+    if (usesDisplayListDrawing == m_usesDisplayListDrawing)
+        return;
+
+    GraphicsLayer::setUsesDisplayListDrawing(usesDisplayListDrawing);
+}
+
</ins><span class="cx"> void GraphicsLayerCA::setBackgroundColor(const Color&amp; color)
</span><span class="cx"> {
</span><span class="cx">     if (m_backgroundColor == color)
</span><span class="lines">@@ -1384,6 +1395,7 @@
</span><span class="cx">     if (GraphicsLayerCA* maskLayer = downcast&lt;GraphicsLayerCA&gt;(m_maskLayer))
</span><span class="cx">         maskLayer-&gt;commitLayerChangesAfterSublayers(childCommitState);
</span><span class="cx"> 
</span><ins>+    bool hadDirtyRects = m_uncommittedChanges &amp; DirtyRectsChanged;
</ins><span class="cx">     commitLayerChangesAfterSublayers(childCommitState);
</span><span class="cx"> 
</span><span class="cx">     if (affectedByTransformAnimation &amp;&amp; m_layer-&gt;layerType() == PlatformCALayer::LayerTypeTiledBackingLayer)
</span><span class="lines">@@ -1391,6 +1403,24 @@
</span><span class="cx"> 
</span><span class="cx">     if (hadChanges)
</span><span class="cx">         client().didCommitChangesForLayer(this);
</span><ins>+
+    if (usesDisplayListDrawing() &amp;&amp; m_drawsContent &amp;&amp; (!m_hasEverPainted || hadDirtyRects)) {
+#ifdef LOG_RECORDING_TIME
+        double startTime = currentTime();
+#endif
+        m_displayList = std::make_unique&lt;DisplayList::DisplayList&gt;();
+        
+        FloatRect initialClip(boundsOrigin(), size());
+
+        GraphicsContext context;
+        DisplayList::Recorder recorder(context, *m_displayList, initialClip, AffineTransform());
+        context.setDisplayListRecorder(&amp;recorder);
+        paintGraphicsLayerContents(context, FloatRect(FloatPoint(), size()));
+#ifdef LOG_RECORDING_TIME
+        double duration = currentTime() - startTime;
+        WTFLogAlways(&quot;Recording took %.5fms&quot;, duration * 1000.0);
+#endif
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void GraphicsLayerCA::platformCALayerCustomSublayersChanged(PlatformCALayer*)
</span><span class="lines">@@ -1410,6 +1440,12 @@
</span><span class="cx"> 
</span><span class="cx"> void GraphicsLayerCA::platformCALayerPaintContents(PlatformCALayer*, GraphicsContext&amp; context, const FloatRect&amp; clip)
</span><span class="cx"> {
</span><ins>+    m_hasEverPainted = true;
+    if (m_displayList) {
+        DisplayList::Replayer replayer(context, *m_displayList);
+        replayer.replay(clip);
+        return;
+    }
</ins><span class="cx">     paintGraphicsLayerContents(context, clip);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -2021,9 +2057,10 @@
</span><span class="cx"> 
</span><span class="cx"> void GraphicsLayerCA::updateDrawsContent()
</span><span class="cx"> {
</span><del>-    if (m_drawsContent)
</del><ins>+    if (m_drawsContent) {
</ins><span class="cx">         m_layer-&gt;setNeedsDisplay();
</span><del>-    else {
</del><ins>+        m_hasEverPainted = false;
+    } else {
</ins><span class="cx">         m_layer-&gt;setContents(0);
</span><span class="cx">         if (m_layerClones) {
</span><span class="cx">             LayerMap::const_iterator end = m_layerClones-&gt;end();
</span><span class="lines">@@ -3309,6 +3346,13 @@
</span><span class="cx">         dumpInnerLayer(textStream, &quot;contents shape mask layer&quot;, m_contentsShapeMaskLayer.get(), indent, behavior);
</span><span class="cx">         dumpInnerLayer(textStream, &quot;backdrop layer&quot;, m_backdropLayer.get(), indent, behavior);
</span><span class="cx">     }
</span><ins>+
+    if (behavior &amp; LayerTreeAsTextDebug) {
+        writeIndent(textStream, indent + 1);
+        textStream &lt;&lt; &quot;(acceleratetes drawing &quot; &lt;&lt; m_acceleratesDrawing &lt;&lt; &quot;)\n&quot;;
+        writeIndent(textStream, indent + 1);
+        textStream &lt;&lt; &quot;(uses display-list drawing &quot; &lt;&lt; m_usesDisplayListDrawing &lt;&lt; &quot;)\n&quot;;
+    }
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void GraphicsLayerCA::setDebugBorder(const Color&amp; color, float borderWidth)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaGraphicsLayerCAh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/ca/GraphicsLayerCA.h        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -41,6 +41,10 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+namespace DisplayList {
+class DisplayList;
+}
+
</ins><span class="cx"> class FloatRoundedRect;
</span><span class="cx"> class Image;
</span><span class="cx"> class TransformState;
</span><span class="lines">@@ -86,6 +90,7 @@
</span><span class="cx">     WEBCORE_EXPORT virtual void setDrawsContent(bool) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void setContentsVisible(bool) override;
</span><span class="cx">     WEBCORE_EXPORT virtual void setAcceleratesDrawing(bool) override;
</span><ins>+    WEBCORE_EXPORT virtual void setUsesDisplayListDrawing(bool) override;
</ins><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT virtual void setBackgroundColor(const Color&amp;) override;
</span><span class="cx"> 
</span><span class="lines">@@ -198,6 +203,7 @@
</span><span class="cx">     WEBCORE_EXPORT virtual IntSize platformCALayerTileSize() const override;
</span><span class="cx"> 
</span><span class="cx">     virtual bool isCommittingChanges() const override { return m_isCommittingChanges; }
</span><ins>+    virtual bool isUsingDisplayListDrawing(PlatformCALayer*) const override { return m_usesDisplayListDrawing; }
</ins><span class="cx"> 
</span><span class="cx">     WEBCORE_EXPORT virtual void setIsViewportConstrained(bool) override;
</span><span class="cx">     virtual bool isViewportConstrained() const override { return m_isViewportConstrained; }
</span><span class="lines">@@ -521,6 +527,7 @@
</span><span class="cx">     bool m_usingBackdropLayerType : 1;
</span><span class="cx">     bool m_isViewportConstrained : 1;
</span><span class="cx">     bool m_intersectsCoverageRect : 1;
</span><ins>+    bool m_hasEverPainted : 1;
</ins><span class="cx"> 
</span><span class="cx">     Color m_contentsSolidColor;
</span><span class="cx"> 
</span><span class="lines">@@ -568,6 +575,8 @@
</span><span class="cx">     AnimationsMap m_runningAnimations;
</span><span class="cx"> 
</span><span class="cx">     Vector&lt;FloatRect&gt; m_dirtyRects;
</span><ins>+    
+    std::unique_ptr&lt;DisplayList::DisplayList&gt; m_displayList;
</ins><span class="cx"> 
</span><span class="cx">     FloatSize m_pixelAlignmentOffset;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCALayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -27,6 +27,7 @@
</span><span class="cx"> #include &quot;PlatformCALayer.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &quot;LayerPool.h&quot;
</span><ins>+#include &quot;PlatformCALayerClient.h&quot;
</ins><span class="cx"> #include &quot;TextStream.h&quot;
</span><span class="cx"> #include &lt;wtf/StringExtras.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -84,6 +85,12 @@
</span><span class="cx">         CGContextSetRGBFillColor(context, 1, 0, 0, 1);
</span><span class="cx">     else
</span><span class="cx">         CGContextSetRGBFillColor(context, 1, 1, 1, 1);
</span><ins>+
+    if (platformCALayer-&gt;owner()-&gt;isUsingDisplayListDrawing(platformCALayer)) {
+        CGContextSetRGBStrokeColor(context, 0, 0, 0, 0.65);
+        CGContextSetLineWidth(context, 2);
+        CGContextStrokeRect(context, indicatorBox);
+    }
</ins><span class="cx">     
</span><span class="cx">     platformCALayer-&gt;drawTextAtPoint(context, indicatorBox.origin.x + 5, indicatorBox.origin.y + 22, CGSizeMake(1, -1), 22, text, strlen(text));
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCALayerClienth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCALayerClient.h        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -64,6 +64,8 @@
</span><span class="cx"> 
</span><span class="cx">     virtual bool isCommittingChanges() const { return false; }
</span><span class="cx"> 
</span><ins>+    virtual bool isUsingDisplayListDrawing(PlatformCALayer*) const { return false; }
+
</ins><span class="cx"> protected:
</span><span class="cx">     virtual ~PlatformCALayerClient() {}
</span><span class="cx"> };
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -693,9 +693,14 @@
</span><span class="cx"> 
</span><span class="cx"> bool TileGrid::platformCALayerShowRepaintCounter(PlatformCALayer*) const
</span><span class="cx"> {
</span><del>-    return m_controller.rootLayer().owner()-&gt;platformCALayerShowRepaintCounter(0);
</del><ins>+    return m_controller.rootLayer().owner()-&gt;platformCALayerShowRepaintCounter(nullptr);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+bool TileGrid::isUsingDisplayListDrawing(PlatformCALayer*) const
+{
+    return m_controller.rootLayer().owner()-&gt;isUsingDisplayListDrawing(nullptr);
+}
+
</ins><span class="cx"> bool TileGrid::platformCALayerContentsOpaque() const
</span><span class="cx"> {
</span><span class="cx">     return m_controller.tilesAreOpaque();
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileGridh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileGrid.h (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileGrid.h        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/ca/TileGrid.h        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -143,6 +143,7 @@
</span><span class="cx">     virtual bool platformCALayerContentsOpaque() const override;
</span><span class="cx">     virtual bool platformCALayerDrawsContent() const override { return true; }
</span><span class="cx">     virtual float platformCALayerDeviceScaleFactor() const override;
</span><ins>+    virtual bool isUsingDisplayListDrawing(PlatformCALayer*) const override;
</ins><span class="cx"> 
</span><span class="cx">     TileController&amp; m_controller;
</span><span class="cx">     Ref&lt;PlatformCALayer&gt; m_containerLayer;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsdisplaylistsDisplayListh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/platform/graphics/displaylists/DisplayList.h        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -26,6 +26,7 @@
</span><span class="cx"> #ifndef DisplayList_h
</span><span class="cx"> #define DisplayList_h
</span><span class="cx"> 
</span><ins>+#include &quot;DisplayListItems.h&quot;
</ins><span class="cx"> #include &lt;wtf/FastMalloc.h&gt;
</span><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -176,7 +176,8 @@
</span><span class="cx"> #endif
</span><span class="cx"> #if PLATFORM(COCOA) &amp;&amp; USE(CA)
</span><span class="cx">     graphicsLayer-&gt;setAcceleratesDrawing(compositor().acceleratedDrawingEnabled());
</span><del>-#endif    
</del><ins>+    graphicsLayer-&gt;setUsesDisplayListDrawing(compositor().displayListDrawingEnabled());
+#endif
</ins><span class="cx">     
</span><span class="cx">     return graphicsLayer;
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -273,26 +273,8 @@
</span><span class="cx"> RenderLayerCompositor::RenderLayerCompositor(RenderView&amp; renderView)
</span><span class="cx">     : m_renderView(renderView)
</span><span class="cx">     , m_updateCompositingLayersTimer(*this, &amp;RenderLayerCompositor::updateCompositingLayersTimerFired)
</span><del>-    , m_hasAcceleratedCompositing(true)
-    , m_compositingTriggers(static_cast&lt;ChromeClient::CompositingTriggerFlags&gt;(ChromeClient::AllTriggers))
-    , m_showDebugBorders(false)
-    , m_showRepaintCounter(false)
-    , m_acceleratedDrawingEnabled(false)
-    , m_reevaluateCompositingAfterLayout(false)
-    , m_compositing(false)
-    , m_compositingLayersNeedRebuild(false)
-    , m_flushingLayers(false)
-    , m_shouldFlushOnReattach(false)
-    , m_forceCompositingMode(false)
-    , m_inPostLayoutUpdate(false)
-    , m_subframeScrollLayersNeedReattach(false)
-    , m_isTrackingRepaints(false)
-    , m_rootLayerAttachment(RootLayerUnattached)
-    , m_layerFlushTimer(*this, &amp;RenderLayerCompositor::layerFlushTimerFired)
-    , m_layerFlushThrottlingEnabled(false)
-    , m_layerFlushThrottlingTemporarilyDisabledForInteraction(false)
-    , m_hasPendingLayerFlush(false)
</del><span class="cx">     , m_paintRelatedMilestonesTimer(*this, &amp;RenderLayerCompositor::paintRelatedMilestonesTimerFired)
</span><ins>+    , m_layerFlushTimer(*this, &amp;RenderLayerCompositor::layerFlushTimerFired)
</ins><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -324,6 +306,7 @@
</span><span class="cx">     bool showRepaintCounter = false;
</span><span class="cx">     bool forceCompositingMode = false;
</span><span class="cx">     bool acceleratedDrawingEnabled = false;
</span><ins>+    bool displayListDrawingEnabled = false;
</ins><span class="cx"> 
</span><span class="cx">     const Settings&amp; settings = m_renderView.frameView().frame().settings();
</span><span class="cx">     hasAcceleratedCompositing = settings.acceleratedCompositingEnabled();
</span><span class="lines">@@ -345,7 +328,8 @@
</span><span class="cx">         forceCompositingMode = requiresCompositingForScrollableFrame();
</span><span class="cx"> 
</span><span class="cx">     acceleratedDrawingEnabled = settings.acceleratedDrawingEnabled();
</span><del>-
</del><ins>+    displayListDrawingEnabled = settings.displayListDrawingEnabled();
+    
</ins><span class="cx">     if (hasAcceleratedCompositing != m_hasAcceleratedCompositing || showDebugBorders != m_showDebugBorders || showRepaintCounter != m_showRepaintCounter || forceCompositingMode != m_forceCompositingMode)
</span><span class="cx">         setCompositingLayersNeedRebuild();
</span><span class="cx"> 
</span><span class="lines">@@ -355,6 +339,7 @@
</span><span class="cx">     m_showRepaintCounter = showRepaintCounter;
</span><span class="cx">     m_forceCompositingMode = forceCompositingMode;
</span><span class="cx">     m_acceleratedDrawingEnabled = acceleratedDrawingEnabled;
</span><ins>+    m_displayListDrawingEnabled = displayListDrawingEnabled;
</ins><span class="cx">     
</span><span class="cx">     if (debugBordersChanged) {
</span><span class="cx">         if (m_layerForHorizontalScrollbar)
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.h (194824 => 194825)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.h        2016-01-10 04:15:59 UTC (rev 194824)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.h        2016-01-10 06:39:43 UTC (rev 194825)
</span><span class="lines">@@ -260,6 +260,7 @@
</span><span class="cx">     void layerTiledBackingUsageChanged(const GraphicsLayer*, bool /*usingTiledBacking*/);
</span><span class="cx">     
</span><span class="cx">     bool acceleratedDrawingEnabled() const { return m_acceleratedDrawingEnabled; }
</span><ins>+    bool displayListDrawingEnabled() const { return m_displayListDrawingEnabled; }
</ins><span class="cx"> 
</span><span class="cx">     void deviceOrPageScaleFactorChanged();
</span><span class="cx"> 
</span><span class="lines">@@ -489,33 +490,34 @@
</span><span class="cx">     std::unique_ptr&lt;GraphicsLayer&gt; m_rootContentLayer;
</span><span class="cx">     Timer m_updateCompositingLayersTimer;
</span><span class="cx"> 
</span><del>-    bool m_hasAcceleratedCompositing;
-    ChromeClient::CompositingTriggerFlags m_compositingTriggers;
</del><ins>+    ChromeClient::CompositingTriggerFlags m_compositingTriggers { static_cast&lt;ChromeClient::CompositingTriggerFlags&gt;(ChromeClient::AllTriggers) };
+    bool m_hasAcceleratedCompositing { true };
</ins><span class="cx"> 
</span><del>-    bool m_showDebugBorders;
-    bool m_showRepaintCounter;
-    bool m_acceleratedDrawingEnabled;
</del><ins>+    bool m_showDebugBorders { false };
+    bool m_showRepaintCounter { false };
+    bool m_acceleratedDrawingEnabled { false };
+    bool m_displayListDrawingEnabled { false };
</ins><span class="cx"> 
</span><span class="cx">     // When true, we have to wait until layout has happened before we can decide whether to enter compositing mode,
</span><span class="cx">     // because only then do we know the final size of plugins and iframes.
</span><del>-    mutable bool m_reevaluateCompositingAfterLayout;
</del><ins>+    mutable bool m_reevaluateCompositingAfterLayout { false };
</ins><span class="cx"> 
</span><del>-    bool m_compositing;
-    bool m_compositingLayersNeedRebuild;
-    bool m_flushingLayers;
-    bool m_shouldFlushOnReattach;
-    bool m_forceCompositingMode;
-    bool m_inPostLayoutUpdate; // true when it's OK to trust layout information (e.g. layer sizes and positions)
-    bool m_subframeScrollLayersNeedReattach;
</del><ins>+    bool m_compositing { false };
+    bool m_compositingLayersNeedRebuild { false };
+    bool m_flushingLayers { false };
+    bool m_shouldFlushOnReattach { false };
+    bool m_forceCompositingMode { false };
+    bool m_inPostLayoutUpdate { false }; // true when it's OK to trust layout information (e.g. layer sizes and positions)
+    bool m_subframeScrollLayersNeedReattach { false };
</ins><span class="cx"> 
</span><del>-    bool m_isTrackingRepaints; // Used for testing.
</del><ins>+    bool m_isTrackingRepaints { false }; // Used for testing.
</ins><span class="cx"> 
</span><span class="cx">     int m_compositedLayerCount { 0 };
</span><span class="cx">     unsigned m_layersWithTiledBackingCount { 0 };
</span><span class="cx">     unsigned m_layerFlushCount { 0 };
</span><span class="cx">     unsigned m_compositingUpdateCount { 0 };
</span><span class="cx"> 
</span><del>-    RootLayerAttachment m_rootLayerAttachment;
</del><ins>+    RootLayerAttachment m_rootLayerAttachment { RootLayerUnattached };
</ins><span class="cx"> 
</span><span class="cx">     // Enclosing clipping layer for iframe content
</span><span class="cx">     std::unique_ptr&lt;GraphicsLayer&gt; m_clipLayer;
</span><span class="lines">@@ -546,15 +548,15 @@
</span><span class="cx"> 
</span><span class="cx">     std::unique_ptr&lt;GraphicsLayerUpdater&gt; m_layerUpdater; // Updates tiled layer visible area periodically while animations are running.
</span><span class="cx"> 
</span><ins>+    Timer m_paintRelatedMilestonesTimer;
</ins><span class="cx">     Timer m_layerFlushTimer;
</span><del>-    bool m_layerFlushThrottlingEnabled;
-    bool m_layerFlushThrottlingTemporarilyDisabledForInteraction;
-    bool m_hasPendingLayerFlush;
</del><ins>+
+    bool m_layerFlushThrottlingEnabled { false };
+    bool m_layerFlushThrottlingTemporarilyDisabledForInteraction { false };
+    bool m_hasPendingLayerFlush { false };
</ins><span class="cx">     bool m_layerNeedsCompositingUpdate { false };
</span><span class="cx">     bool m_viewBackgroundIsTransparent { false };
</span><span class="cx"> 
</span><del>-    Timer m_paintRelatedMilestonesTimer;
-
</del><span class="cx"> #if !LOG_DISABLED
</span><span class="cx">     int m_rootLayerUpdateCount { 0 };
</span><span class="cx">     int m_obligateCompositedLayerCount { 0 }; // count of layer that have to be composited.
</span></span></pre>
</div>
</div>

</body>
</html>