<!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>[185897] 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/185897">185897</a></dd>
<dt>Author</dt> <dd>akling@apple.com</dd>
<dt>Date</dt> <dd>2015-06-23 19:09:24 -0700 (Tue, 23 Jun 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Should reduce tile coverage for the first paint after a tab switch.
&lt;https://webkit.org/b/146252&gt;
&lt;rdar://problem/19821583&gt;

Reviewed by Darin Adler.

Reduce the number of tiles we need to paint after switching tabs,
to shorten the time it takes before we can flush pixels to screen.

We accomplish this by piggybacking on the &quot;speculative tiling enabled&quot;
mode of FrameView, which was previously only used to throttle painting
and layer flushes during page load.

When a FrameView becomes visible, which is what happens when you
switch to its tab, we revert the speculative tiling optimization to
its initial state, and reset the &quot;scrolled by user&quot; flag.

In practice this means that after switching tabs, we only generate
enough tiles to fill the viewport. Then, after 500ms has passed
or the user scrolls the page, we go back to the usual speculative
tiling mode.

* page/FrameView.cpp:
(WebCore::FrameView::show):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCorepageFrameViewcpp">trunk/Source/WebCore/page/FrameView.cpp</a></li>
<li><a href="#trunkSourceWebCorepageFrameViewh">trunk/Source/WebCore/page/FrameView.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (185896 => 185897)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-06-24 02:04:38 UTC (rev 185896)
+++ trunk/Source/WebCore/ChangeLog        2015-06-24 02:09:24 UTC (rev 185897)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2015-06-23  Andreas Kling  &lt;akling@apple.com&gt;
+
+        Should reduce tile coverage for the first paint after a tab switch.
+        &lt;https://webkit.org/b/146252&gt;
+        &lt;rdar://problem/19821583&gt;
+
+        Reviewed by Darin Adler.
+
+        Reduce the number of tiles we need to paint after switching tabs,
+        to shorten the time it takes before we can flush pixels to screen.
+
+        We accomplish this by piggybacking on the &quot;speculative tiling enabled&quot;
+        mode of FrameView, which was previously only used to throttle painting
+        and layer flushes during page load.
+
+        When a FrameView becomes visible, which is what happens when you
+        switch to its tab, we revert the speculative tiling optimization to
+        its initial state, and reset the &quot;scrolled by user&quot; flag.
+
+        In practice this means that after switching tabs, we only generate
+        enough tiles to fill the viewport. Then, after 500ms has passed
+        or the user scrolls the page, we go back to the usual speculative
+        tiling mode.
+
+        * page/FrameView.cpp:
+        (WebCore::FrameView::show):
+
</ins><span class="cx"> 2015-06-23  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove windowResizerRect code, nobody is using it anymore
</span></span></pre></div>
<a id="trunkSourceWebCorepageFrameViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/FrameView.cpp (185896 => 185897)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/FrameView.cpp        2015-06-24 02:04:38 UTC (rev 185896)
+++ trunk/Source/WebCore/page/FrameView.cpp        2015-06-24 02:09:24 UTC (rev 185897)
</span><span class="lines">@@ -2485,6 +2485,19 @@
</span><span class="cx">     adjustTiledBackingCoverage();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void FrameView::show()
+{
+    ScrollView::show();
+
+    if (frame().isMainFrame()) {
+        // Turn off speculative tiling for a brief moment after a FrameView appears on screen.
+        // Note that adjustTiledBackingCoverage() kicks the (500ms) timer to re-enable it.
+        m_speculativeTilingEnabled = false;
+        m_wasScrolledByUser = false;
+        adjustTiledBackingCoverage();
+    }
+}
+
</ins><span class="cx"> void FrameView::layoutTimerFired()
</span><span class="cx"> {
</span><span class="cx"> #ifdef INSTRUMENT_LAYOUT_SCHEDULING
</span></span></pre></div>
<a id="trunkSourceWebCorepageFrameViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/FrameView.h (185896 => 185897)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/FrameView.h        2015-06-24 02:04:38 UTC (rev 185896)
+++ trunk/Source/WebCore/page/FrameView.h        2015-06-24 02:09:24 UTC (rev 185897)
</span><span class="lines">@@ -544,6 +544,8 @@
</span><span class="cx"> 
</span><span class="cx">     void didChangeScrollOffset();
</span><span class="cx"> 
</span><ins>+    void show() override;
+
</ins><span class="cx"> protected:
</span><span class="cx">     virtual bool scrollContentsFastPath(const IntSize&amp; scrollDelta, const IntRect&amp; rectToScroll, const IntRect&amp; clipRect) override;
</span><span class="cx">     virtual void scrollContentsSlowPath(const IntRect&amp; updateRect) override;
</span></span></pre>
</div>
</div>

</body>
</html>