<!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>[211688] trunk/Source</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/211688">211688</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2017-02-05 15:04:48 -0800 (Sun, 05 Feb 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>Remove unparentsOffscreenTiles logic in TileController
https://bugs.webkit.org/show_bug.cgi?id=167823

Reviewed by Tim Horton.
Source/WebCore:

Give all TileGrids the &quot;unparents offscreen tiles&quot; behavior. This was enabled for
only the page tiles in WK2 on Mac and iOS, but there's no reason to not use it for
tiled composited layers also.

Also use more modern C++ idioms in a few places.

* platform/graphics/TiledBacking.h:
* platform/graphics/ca/TileController.h:
* platform/graphics/ca/TileGrid.cpp:
(WebCore::TileGrid::revalidateTiles):
(WebCore::TileGrid::ensureTilesForRect):
* rendering/RenderLayerBacking.cpp:
(WebCore::RenderLayerBacking::RenderLayerBacking):

Source/WebKit2:

Drive-by fix: make sure we put the tiled scrolling indicator's layer back when switching tabs.

* WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
(WebKit::TiledCoreAnimationDrawingArea::updateRootLayers):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsTiledBackingh">trunk/Source/WebCore/platform/graphics/TiledBacking.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileControllerh">trunk/Source/WebCore/platform/graphics/ca/TileController.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaTileGridcpp">trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerBackingcpp">trunk/Source/WebCore/rendering/RenderLayerBacking.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacTiledCoreAnimationDrawingAreamm">trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (211687 => 211688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2017-02-05 20:55:21 UTC (rev 211687)
+++ trunk/Source/WebCore/ChangeLog        2017-02-05 23:04:48 UTC (rev 211688)
</span><span class="lines">@@ -1,3 +1,24 @@
</span><ins>+2017-02-05  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Remove unparentsOffscreenTiles logic in TileController
+        https://bugs.webkit.org/show_bug.cgi?id=167823
+
+        Reviewed by Tim Horton.
+
+        Give all TileGrids the &quot;unparents offscreen tiles&quot; behavior. This was enabled for
+        only the page tiles in WK2 on Mac and iOS, but there's no reason to not use it for
+        tiled composited layers also.
+
+        Also use more modern C++ idioms in a few places.
+
+        * platform/graphics/TiledBacking.h:
+        * platform/graphics/ca/TileController.h:
+        * platform/graphics/ca/TileGrid.cpp:
+        (WebCore::TileGrid::revalidateTiles):
+        (WebCore::TileGrid::ensureTilesForRect):
+        * rendering/RenderLayerBacking.cpp:
+        (WebCore::RenderLayerBacking::RenderLayerBacking):
+
</ins><span class="cx"> 2017-02-05  Antoine Quint  &lt;graouts@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [Modern Media Controls] PiP button is not visible with a live broadcast video
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsTiledBackingh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/TiledBacking.h (211687 => 211688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/TiledBacking.h        2017-02-05 20:55:21 UTC (rev 211687)
+++ trunk/Source/WebCore/platform/graphics/TiledBacking.h        2017-02-05 23:04:48 UTC (rev 211688)
</span><span class="lines">@@ -123,9 +123,6 @@
</span><span class="cx">     virtual void setScrollingPerformanceLoggingEnabled(bool) = 0;
</span><span class="cx">     virtual bool scrollingPerformanceLoggingEnabled() const = 0;
</span><span class="cx">     
</span><del>-    virtual void setUnparentsOffscreenTiles(bool) = 0;
-    virtual bool unparentsOffscreenTiles() const = 0;
-    
</del><span class="cx">     virtual double retainedTileBackingStoreMemory() const = 0;
</span><span class="cx"> 
</span><span class="cx">     virtual void setHasMargins(bool marginTop, bool marginBottom, bool marginLeft, bool marginRight) = 0;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileControllerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileController.h (211687 => 211688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileController.h        2017-02-05 20:55:21 UTC (rev 211687)
+++ trunk/Source/WebCore/platform/graphics/ca/TileController.h        2017-02-05 23:04:48 UTC (rev 211688)
</span><span class="lines">@@ -113,7 +113,6 @@
</span><span class="cx">     int rightMarginWidth() const override;
</span><span class="cx">     TileCoverage tileCoverage() const override { return m_tileCoverage; }
</span><span class="cx">     void adjustTileCoverageRect(FloatRect&amp; coverageRect, const FloatSize&amp; newSize, const FloatRect&amp; previousVisibleRect, const FloatRect&amp; currentVisibleRect, float contentsScale) const override;
</span><del>-    bool unparentsOffscreenTiles() const override { return m_unparentsOffscreenTiles; }
</del><span class="cx">     bool scrollingPerformanceLoggingEnabled() const override { return m_scrollingPerformanceLoggingEnabled; }
</span><span class="cx"> 
</span><span class="cx">     IntRect boundsAtLastRevalidate() const { return m_boundsAtLastRevalidate; }
</span><span class="lines">@@ -155,7 +154,6 @@
</span><span class="cx">     void forceRepaint() override;
</span><span class="cx">     IntRect tileGridExtent() const override;
</span><span class="cx">     void setScrollingPerformanceLoggingEnabled(bool flag) override { m_scrollingPerformanceLoggingEnabled = flag; }
</span><del>-    void setUnparentsOffscreenTiles(bool flag) override { m_unparentsOffscreenTiles = flag; }
</del><span class="cx">     double retainedTileBackingStoreMemory() const override;
</span><span class="cx">     IntRect tileCoverageRect() const override;
</span><span class="cx"> #if USE(CA)
</span><span class="lines">@@ -216,7 +214,6 @@
</span><span class="cx">     
</span><span class="cx">     bool m_isInWindow { false };
</span><span class="cx">     bool m_scrollingPerformanceLoggingEnabled { false };
</span><del>-    bool m_unparentsOffscreenTiles { false };
</del><span class="cx">     bool m_acceleratesDrawing { false };
</span><span class="cx">     bool m_tilesAreOpaque { false };
</span><span class="cx">     bool m_hasTilesWithTemporaryScaleFactor { false }; // Used to make low-res tiles when zooming.
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaTileGridcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp (211687 => 211688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp        2017-02-05 20:55:21 UTC (rev 211687)
+++ trunk/Source/WebCore/platform/graphics/ca/TileGrid.cpp        2017-02-05 23:04:48 UTC (rev 211688)
</span><span class="lines">@@ -352,9 +352,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // Move tiles newly outside the coverage rect into the cohort map.
</span><del>-    for (TileMap::iterator it = m_tiles.begin(), end = m_tiles.end(); it != end; ++it) {
-        TileInfo&amp; tileInfo = it-&gt;value;
-        TileIndex tileIndex = it-&gt;key;
</del><ins>+    for (auto&amp; entry : m_tiles) {
+        TileInfo&amp; tileInfo = entry.value;
+        TileIndex tileIndex = entry.key;
</ins><span class="cx"> 
</span><span class="cx">         PlatformCALayer* tileLayer = tileInfo.layer.get();
</span><span class="cx">         IntRect tileRect = rectForTileIndex(tileIndex);
</span><span class="lines">@@ -371,10 +371,8 @@
</span><span class="cx">             if (tileInfo.cohort == VisibleTileCohort) {
</span><span class="cx">                 tileInfo.cohort = currCohort;
</span><span class="cx">                 ++tilesInCohort;
</span><del>-
-                if (m_controller.unparentsOffscreenTiles())
-                    tileLayer-&gt;removeFromSuperlayer();
-            } else if (m_controller.unparentsOffscreenTiles() &amp;&amp; m_controller.shouldAggressivelyRetainTiles() &amp;&amp; tileLayer-&gt;superlayer()) {
</del><ins>+                tileLayer-&gt;removeFromSuperlayer();
+            } else if (m_controller.shouldAggressivelyRetainTiles() &amp;&amp; tileLayer-&gt;superlayer()) {
</ins><span class="cx">                 // Aggressive tile retention means we'll never remove cohorts, but we need to make sure they're unparented.
</span><span class="cx">                 // We can't immediately unparent cohorts comprised of secondary tiles that never touch the primary coverage rect,
</span><span class="cx">                 // because that would defeat the usefulness of prepopulateRect(); instead, age prepopulated tiles out as if they were being removed.
</span><span class="lines">@@ -413,9 +411,9 @@
</span><span class="cx">         m_cohortList.clear();
</span><span class="cx">     }
</span><span class="cx"> 
</span><del>-    if (m_controller.unparentsOffscreenTiles() &amp;&amp; (validationPolicy &amp; UnparentAllTiles)) {
-        for (TileMap::iterator it = m_tiles.begin(), end = m_tiles.end(); it != end; ++it)
-            it-&gt;value.layer-&gt;removeFromSuperlayer();
</del><ins>+    if (validationPolicy &amp; UnparentAllTiles) {
+        for (auto&amp; tile : m_tiles.values())
+            tile.layer-&gt;removeFromSuperlayer();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     auto boundsAtLastRevalidate = m_controller.boundsAtLastRevalidate();
</span><span class="lines">@@ -533,7 +531,7 @@
</span><span class="cx"> 
</span><span class="cx"> IntRect TileGrid::ensureTilesForRect(const FloatRect&amp; rect, CoverageType newTileType)
</span><span class="cx"> {
</span><del>-    if (m_controller.unparentsOffscreenTiles() &amp;&amp; !m_controller.isInWindow())
</del><ins>+    if (!m_controller.isInWindow())
</ins><span class="cx">         return IntRect();
</span><span class="cx"> 
</span><span class="cx">     FloatRect scaledRect(rect);
</span><span class="lines">@@ -581,9 +579,7 @@
</span><span class="cx">                 ++tilesInCohort;
</span><span class="cx">             }
</span><span class="cx"> 
</span><del>-            bool shouldParentTileLayer = (!m_controller.unparentsOffscreenTiles() || m_controller.isInWindow()) &amp;&amp; !tileInfo.layer-&gt;superlayer();
-
-            if (shouldParentTileLayer)
</del><ins>+            if (!tileInfo.layer-&gt;superlayer())
</ins><span class="cx">                 m_containerLayer.get().appendSublayer(*tileInfo.layer);
</span><span class="cx">         }
</span><span class="cx">     }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerBackingcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerBacking.cpp (211687 => 211688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2017-02-05 20:55:21 UTC (rev 211687)
+++ trunk/Source/WebCore/rendering/RenderLayerBacking.cpp        2017-02-05 23:04:48 UTC (rev 211688)
</span><span class="lines">@@ -105,7 +105,6 @@
</span><span class="cx">         tiledBacking-&gt;setIsInWindow(renderer().page().isInWindow());
</span><span class="cx"> 
</span><span class="cx">         if (m_isMainFrameLayerWithTiledBacking) {
</span><del>-            tiledBacking-&gt;setUnparentsOffscreenTiles(true);
</del><span class="cx">             tiledBacking-&gt;setScrollingPerformanceLoggingEnabled(renderer().settings().scrollingPerformanceLoggingEnabled());
</span><span class="cx">             adjustTiledBackingCoverage();
</span><span class="cx">         }
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (211687 => 211688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-02-05 20:55:21 UTC (rev 211687)
+++ trunk/Source/WebKit2/ChangeLog        2017-02-05 23:04:48 UTC (rev 211688)
</span><span class="lines">@@ -1,3 +1,15 @@
</span><ins>+2017-02-05  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Remove unparentsOffscreenTiles logic in TileController
+        https://bugs.webkit.org/show_bug.cgi?id=167823
+
+        Reviewed by Tim Horton.
+        
+        Drive-by fix: make sure we put the tiled scrolling indicator's layer back when switching tabs.
+
+        * WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm:
+        (WebKit::TiledCoreAnimationDrawingArea::updateRootLayers):
+
</ins><span class="cx"> 2017-02-04  Wenson Hsieh  &lt;wenson_hsieh@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Data interaction on an image should make it stand out when presenting the action sheet
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacTiledCoreAnimationDrawingAreamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm (211687 => 211688)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm        2017-02-05 20:55:21 UTC (rev 211687)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/TiledCoreAnimationDrawingArea.mm        2017-02-05 23:04:48 UTC (rev 211688)
</span><span class="lines">@@ -226,6 +226,9 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     [m_hostingLayer setSublayers:m_viewOverlayRootLayer ? @[ m_rootLayer.get(), m_viewOverlayRootLayer-&gt;platformLayer() ] : @[ m_rootLayer.get() ]];
</span><ins>+    
+    if (m_debugInfoLayer)
+        [m_hostingLayer addSublayer:m_debugInfoLayer.get()];
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void TiledCoreAnimationDrawingArea::attachViewOverlayGraphicsLayer(Frame* frame, GraphicsLayer* viewOverlayRootLayer)
</span></span></pre>
</div>
</div>

</body>
</html>