<!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>[173275] 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/173275">173275</a></dd>
<dt>Author</dt> <dd>bdakin@apple.com</dd>
<dt>Date</dt> <dd>2014-09-04 13:48:03 -0700 (Thu, 04 Sep 2014)</dd>
</dl>
<h3>Log Message</h3>
<pre>REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/172832">r172832</a>): Poor 2-finger scrolling performance at theverge.com articles
(all tiles repaint)
https://bugs.webkit.org/show_bug.cgi?id=136433
-and corresponding-
rdar://problem/18193942
Reviewed by Tim Horton.
Source/WebCore:
We should ensure that we are only setting scroll elasticity for layers that return
true for scrollsOverflow(). When overflow:scroll is set on the root element, we
wound up setting the ScrollElasticity for the root, which messed up with the
special way that the root is meant to scroll. Even though overflow:scroll has been
set on the root, scrollsOverflow() is still false because we knew not to set
hasOverflowClip() since it’s the root, which is why this check works.
* rendering/RenderLayer.cpp:
(WebCore::RenderLayer::setHasHorizontalScrollbar):
(WebCore::RenderLayer::setHasVerticalScrollbar):
Really, we should have never even called RenderLayer::setHasVerticalScrollbar or
RenderLayer::setHasHorizontalScrollbar since it’s wrong to be creating a scrollbar
on RenderLayer for the root. We should make sure, in addition to the other
requirements consulted, that the renderer has an overflow clip before we create
the scrollbars.
(WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
LayoutTests:
* platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt: Added.
* platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.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="#trunkSourceWebCorerenderingRenderLayercpp">trunk/Source/WebCore/rendering/RenderLayer.cpp</a></li>
</ul>
<h3>Added Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingrootoverflowwithmousewheelexpectedtxt">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt</a></li>
<li><a href="#trunkLayoutTestsplatformmacwk2tileddrawingscrollingrootoverflowwithmousewheelhtml">trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (173274 => 173275)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2014-09-04 20:23:54 UTC (rev 173274)
+++ trunk/LayoutTests/ChangeLog        2014-09-04 20:48:03 UTC (rev 173275)
</span><span class="lines">@@ -1,3 +1,16 @@
</span><ins>+2014-09-04 Beth Dakin <bdakin@apple.com>
+
+ REGRESSION (r172832): Poor 2-finger scrolling performance at theverge.com articles
+ (all tiles repaint)
+ https://bugs.webkit.org/show_bug.cgi?id=136433
+ -and corresponding-
+ rdar://problem/18193942
+
+ Reviewed by Tim Horton.
+
+ * platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt: Added.
+ * platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html: Added.
+
</ins><span class="cx"> 2014-09-04 Eva Balazsfalvi <evab.u-szeged@partner.samsung.com>
</span><span class="cx">
</span><span class="cx"> Remove CSS_FILTERS flag
</span></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingrootoverflowwithmousewheelexpectedtxt"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt (0 => 173275)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt         (rev 0)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel-expected.txt        2014-09-04 20:48:03 UTC (rev 173275)
</span><span class="lines">@@ -0,0 +1 @@
</span><ins>+Success!
</ins></span></pre></div>
<a id="trunkLayoutTestsplatformmacwk2tileddrawingscrollingrootoverflowwithmousewheelhtml"></a>
<div class="addfile"><h4>Added: trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html (0 => 173275)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html         (rev 0)
+++ trunk/LayoutTests/platform/mac-wk2/tiled-drawing/scrolling/root-overflow-with-mousewheel.html        2014-09-04 20:48:03 UTC (rev 173275)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+<html>
+<head>
+<style>
+html {
+ height: 2000px;
+ overflow: scroll;
+}
+</style>
+
+<script>
+function checkForScroll()
+{
+ var pageScrollPositionAfter = document.body.scrollTop;
+ var finishLog = document.getElementById("finishLog");
+ if (pageScrollPositionAfter > 50)
+ finishLog.innerHTML = "Success!";
+ else
+ finishLog.innerHTML = "Failure. Try running the test manually. If this proves to be flakey, and we might have to skip it.";
+ testRunner.notifyDone();
+}
+
+function scrollTest()
+{
+ eventSender.mouseMoveTo(50, 50);
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'began', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'changed', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'ended', 'none');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'begin');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, -1, 'none', 'continue');
+ eventSender.mouseScrollByWithWheelAndMomentumPhases(0, 0, 'none', 'end');
+ checkForScroll();
+}
+
+function onLoad() {
+ window.addEventListener('mousewheel', function() { }, false);
+
+ if (window.eventSender) {
+ testRunner.dumpAsText();
+ testRunner.waitUntilDone();
+ setTimeout(scrollTest, 0);
+ }
+}
+</script>
+</head>
+
+<body onload="onLoad();">
+ <pre id="finishLog">This test passes if you can scroll the page.</pre>
+</body>
+</html>
</ins></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (173274 => 173275)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-09-04 20:23:54 UTC (rev 173274)
+++ trunk/Source/WebCore/ChangeLog        2014-09-04 20:48:03 UTC (rev 173275)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2014-09-04 Beth Dakin <bdakin@apple.com>
+
+ REGRESSION (r172832): Poor 2-finger scrolling performance at theverge.com articles
+ (all tiles repaint)
+ https://bugs.webkit.org/show_bug.cgi?id=136433
+ -and corresponding-
+ rdar://problem/18193942
+
+ Reviewed by Tim Horton.
+
+ We should ensure that we are only setting scroll elasticity for layers that return
+ true for scrollsOverflow(). When overflow:scroll is set on the root element, we
+ wound up setting the ScrollElasticity for the root, which messed up with the
+ special way that the root is meant to scroll. Even though overflow:scroll has been
+ set on the root, scrollsOverflow() is still false because we knew not to set
+ hasOverflowClip() since it’s the root, which is why this check works.
+ * rendering/RenderLayer.cpp:
+ (WebCore::RenderLayer::setHasHorizontalScrollbar):
+ (WebCore::RenderLayer::setHasVerticalScrollbar):
+
+ Really, we should have never even called RenderLayer::setHasVerticalScrollbar or
+ RenderLayer::setHasHorizontalScrollbar since it’s wrong to be creating a scrollbar
+ on RenderLayer for the root. We should make sure, in addition to the other
+ requirements consulted, that the renderer has an overflow clip before we create
+ the scrollbars.
+ (WebCore::RenderLayer::updateScrollbarsAfterStyleChange):
+
</ins><span class="cx"> 2014-09-04 Antti Koivisto <antti@apple.com>
</span><span class="cx">
</span><span class="cx"> Remove ResourceResponse::m_suggestedFilename
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayer.cpp (173274 => 173275)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayer.cpp        2014-09-04 20:23:54 UTC (rev 173274)
+++ trunk/Source/WebCore/rendering/RenderLayer.cpp        2014-09-04 20:48:03 UTC (rev 173275)
</span><span class="lines">@@ -2991,7 +2991,8 @@
</span><span class="cx"> if (hasScrollbar) {
</span><span class="cx"> m_hBar = createScrollbar(HorizontalScrollbar);
</span><span class="cx"> #if ENABLE(RUBBER_BANDING)
</span><del>- ScrollableArea::setHorizontalScrollElasticity(renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone);
</del><ins>+ ScrollElasticity elasticity = scrollsOverflow() && renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone;
+ ScrollableArea::setHorizontalScrollElasticity(elasticity);
</ins><span class="cx"> #endif
</span><span class="cx"> } else {
</span><span class="cx"> destroyScrollbar(HorizontalScrollbar);
</span><span class="lines">@@ -3021,7 +3022,8 @@
</span><span class="cx"> if (hasScrollbar) {
</span><span class="cx"> m_vBar = createScrollbar(VerticalScrollbar);
</span><span class="cx"> #if ENABLE(RUBBER_BANDING)
</span><del>- ScrollableArea::setVerticalScrollElasticity((renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone));
</del><ins>+ ScrollElasticity elasticity = scrollsOverflow() && renderer().frame().settings().rubberBandingForOverflowScrollEnabled() ? ScrollElasticityAutomatic : ScrollElasticityNone;
+ ScrollableArea::setVerticalScrollElasticity(elasticity);
</ins><span class="cx"> #endif
</span><span class="cx"> } else {
</span><span class="cx"> destroyScrollbar(VerticalScrollbar);
</span><span class="lines">@@ -6364,8 +6366,8 @@
</span><span class="cx"> EOverflow overflowY = box->style().overflowY();
</span><span class="cx">
</span><span class="cx"> // To avoid doing a relayout in updateScrollbarsAfterLayout, we try to keep any automatic scrollbar that was already present.
</span><del>- bool needsHorizontalScrollbar = (hasHorizontalScrollbar() && overflowDefinesAutomaticScrollbar(overflowX)) || overflowRequiresScrollbar(overflowX);
- bool needsVerticalScrollbar = (hasVerticalScrollbar() && overflowDefinesAutomaticScrollbar(overflowY)) || overflowRequiresScrollbar(overflowY);
</del><ins>+ bool needsHorizontalScrollbar = box->hasOverflowClip() && ((hasHorizontalScrollbar() && overflowDefinesAutomaticScrollbar(overflowX)) || overflowRequiresScrollbar(overflowX));
+ bool needsVerticalScrollbar = box->hasOverflowClip() && ((hasVerticalScrollbar() && overflowDefinesAutomaticScrollbar(overflowY)) || overflowRequiresScrollbar(overflowY));
</ins><span class="cx"> setHasHorizontalScrollbar(needsHorizontalScrollbar);
</span><span class="cx"> setHasVerticalScrollbar(needsVerticalScrollbar);
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>