<!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>[164110] 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/164110">164110</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2014-02-14 11:13:54 -0800 (Fri, 14 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>Give ScrollingTree(State)Nodes a reference to another layer, which is used for moving overflow:scroll contents around
https://bugs.webkit.org/show_bug.cgi?id=128790

Reviewed by Beth Dakin.

Have scrolling tree nodes and state nodes track another layer, the
&quot;scrolled contents layer&quot;, for accelerated overflow:scroll.

When making ScrollingTreeScrollingNodes for overflow:scroll, the node's
layer will point to the composited element's primary layer, and its
scrolledContentsLayer to the layer that gets moved around by scrolling.

Do some other cleanup on AsyncScrollingCoordinator, removing
functions that just called through to nodes.

Source/WebCore:

* WebCore.exp.in:
* page/scrolling/AsyncScrollingCoordinator.cpp:
(WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
(WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
(WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
(WebCore::AsyncScrollingCoordinator::updateScrollingNode):
(WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
(WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
* page/scrolling/AsyncScrollingCoordinator.h:
* page/scrolling/ScrollingCoordinator.h:
(WebCore::ScrollingCoordinator::updateScrollingNode):
* page/scrolling/ScrollingStateScrollingNode.cpp:
(WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
(WebCore::ScrollingStateScrollingNode::setScrolledContentsLayer):
(WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
(WebCore::ScrollingStateScrollingNode::setHeaderLayer):
(WebCore::ScrollingStateScrollingNode::setFooterLayer):
* page/scrolling/ScrollingStateScrollingNode.h:
* page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
* page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
(WebCore::ScrollingTreeScrollingNodeIOS::updateBeforeChildren):
* page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
* page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
(WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
* rendering/RenderLayerCompositor.cpp:
(WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged):

Source/WebKit2:

* UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
(WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCoreexpin">trunk/Source/WebCore/WebCore.exp.in</a></li>
<li><a href="#trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorcpp">trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorh">trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingCoordinatorh">trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateScrollingNodecpp">trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingStateScrollingNodeh">trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSh">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSmm">trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMach">trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMacmm">trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm</a></li>
<li><a href="#trunkSourceWebCorerenderingRenderLayerCompositorcpp">trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessScrollingRemoteScrollingCoordinatorProxycpp">trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/ChangeLog        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2014-02-13  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Give ScrollingTree(State)Nodes a reference to another layer, which is used for moving overflow:scroll contents around
+        https://bugs.webkit.org/show_bug.cgi?id=128790
+
+        Reviewed by Beth Dakin.
+
+        Have scrolling tree nodes and state nodes track another layer, the
+        &quot;scrolled contents layer&quot;, for accelerated overflow:scroll.
+        
+        When making ScrollingTreeScrollingNodes for overflow:scroll, the node's
+        layer will point to the composited element's primary layer, and its
+        scrolledContentsLayer to the layer that gets moved around by scrolling.
+        
+        Do some other cleanup on AsyncScrollingCoordinator, removing
+        functions that just called through to nodes.
+
+        * WebCore.exp.in:
+        * page/scrolling/AsyncScrollingCoordinator.cpp:
+        (WebCore::AsyncScrollingCoordinator::frameViewLayoutUpdated):
+        (WebCore::AsyncScrollingCoordinator::frameViewNonFastScrollableRegionChanged):
+        (WebCore::AsyncScrollingCoordinator::frameViewRootLayerDidChange):
+        (WebCore::AsyncScrollingCoordinator::updateScrollingNode):
+        (WebCore::AsyncScrollingCoordinator::updateViewportConstrainedNode):
+        (WebCore::AsyncScrollingCoordinator::recomputeWheelEventHandlerCountForFrameView):
+        * page/scrolling/AsyncScrollingCoordinator.h:
+        * page/scrolling/ScrollingCoordinator.h:
+        (WebCore::ScrollingCoordinator::updateScrollingNode):
+        * page/scrolling/ScrollingStateScrollingNode.cpp:
+        (WebCore::ScrollingStateScrollingNode::ScrollingStateScrollingNode):
+        (WebCore::ScrollingStateScrollingNode::setScrolledContentsLayer):
+        (WebCore::ScrollingStateScrollingNode::setCounterScrollingLayer):
+        (WebCore::ScrollingStateScrollingNode::setHeaderLayer):
+        (WebCore::ScrollingStateScrollingNode::setFooterLayer):
+        * page/scrolling/ScrollingStateScrollingNode.h:
+        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h:
+        * page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm:
+        (WebCore::ScrollingTreeScrollingNodeIOS::updateBeforeChildren):
+        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.h:
+        * page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm:
+        (WebCore::ScrollingTreeScrollingNodeMac::updateBeforeChildren):
+        * rendering/RenderLayerCompositor.cpp:
+        (WebCore::RenderLayerCompositor::fixedRootBackgroundLayerChanged):
+
</ins><span class="cx"> 2014-02-14  Chris Fleizach  &lt;cfleizach@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         AX: WebKit needs heuristics to differentiate lists used for layout from semantic data lists, similar to the heuristics for layout tables versus data tables.
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCoreexpin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.exp.in (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.exp.in        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/WebCore.exp.in        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -3032,7 +3032,7 @@
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator17attachToStateTreeENS_17ScrollingNodeTypeEyy
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator18syncChildPositionsERKNS_10LayoutRectE
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator19detachFromStateTreeEy
</span><del>-__ZN7WebCore25AsyncScrollingCoordinator19updateScrollingNodeEyPNS_13GraphicsLayerES2_
</del><ins>+__ZN7WebCore25AsyncScrollingCoordinator19updateScrollingNodeEyPNS_13GraphicsLayerES2_S2_
</ins><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator22frameViewLayoutUpdatedEPNS_9FrameViewE
</span><span class="cx"> __ZNK7WebCore25AsyncScrollingCoordinator24scrollingStateTreeAsTextEv
</span><span class="cx"> __ZN7WebCore25AsyncScrollingCoordinator27frameViewRootLayerDidChangeEPNS_9FrameViewE
</span><span class="lines">@@ -3055,6 +3055,7 @@
</span><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode19setFrameScaleFactorEf
</span><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode20setTotalContentsSizeERKNS_7IntSizeE
</span><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode24setCounterScrollingLayerERKNS_19LayerRepresentationE
</span><ins>+__ZN7WebCore27ScrollingStateScrollingNode24setScrolledContentsLayerERKNS_19LayerRepresentationE
</ins><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode25setWheelEventHandlerCountEj
</span><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode26setNonFastScrollableRegionERKNS_6RegionE
</span><span class="cx"> __ZN7WebCore27ScrollingStateScrollingNode26setRequestedScrollPositionERKNS_10FloatPointEb
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.cpp        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -69,11 +69,9 @@
</span><span class="cx">     // Compute the region of the page that we can't do fast scrolling for. This currently includes
</span><span class="cx">     // all scrollable areas, such as subframes, overflow divs and list boxes. We need to do this even if the
</span><span class="cx">     // frame view whose layout was updated is not the main frame.
</span><del>-    Region nonFastScrollableRegion = computeNonFastScrollableRegion(&amp;m_page-&gt;mainFrame(), IntPoint());
-
</del><span class="cx">     // In the future, we may want to have the ability to set non-fast scrolling regions for more than
</span><span class="cx">     // just the root node. But right now, this concept only applies to the root.
</span><del>-    setNonFastScrollableRegionForNode(nonFastScrollableRegion, m_scrollingStateTree-&gt;rootStateNode());
</del><ins>+    m_scrollingStateTree-&gt;rootStateNode()-&gt;setNonFastScrollableRegion(computeNonFastScrollableRegion(&amp;m_page-&gt;mainFrame(), IntPoint()));
</ins><span class="cx"> 
</span><span class="cx">     if (!coordinatesScrollingForFrameView(frameView))
</span><span class="cx">         return;
</span><span class="lines">@@ -110,8 +108,7 @@
</span><span class="cx">     if (!m_scrollingStateTree-&gt;rootStateNode())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    Region nonFastScrollableRegion = computeNonFastScrollableRegion(&amp;m_page-&gt;mainFrame(), IntPoint());
-    setNonFastScrollableRegionForNode(nonFastScrollableRegion, m_scrollingStateTree-&gt;rootStateNode());
</del><ins>+    m_scrollingStateTree-&gt;rootStateNode()-&gt;setNonFastScrollableRegion(computeNonFastScrollableRegion(&amp;m_page-&gt;mainFrame(), IntPoint()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void AsyncScrollingCoordinator::frameViewRootLayerDidChange(FrameView* frameView)
</span><span class="lines">@@ -129,11 +126,11 @@
</span><span class="cx">     ScrollingCoordinator::frameViewRootLayerDidChange(frameView);
</span><span class="cx"> 
</span><span class="cx">     ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</span><del>-    setScrollLayerForNode(scrollLayerForFrameView(frameView), node);
-    setCounterScrollingLayerForNode(counterScrollingLayerForFrameView(frameView), node);
-    setHeaderLayerForNode(headerLayerForFrameView(frameView), node);
-    setFooterLayerForNode(footerLayerForFrameView(frameView), node);
-    setScrollBehaviorForFixedElementsForNode(frameView-&gt;scrollBehaviorForFixedElements(), node);
</del><ins>+    node-&gt;setLayer(scrollLayerForFrameView(frameView));
+    node-&gt;setCounterScrollingLayer(counterScrollingLayerForFrameView(frameView));
+    node-&gt;setHeaderLayer(headerLayerForFrameView(frameView));
+    node-&gt;setFooterLayer(footerLayerForFrameView(frameView));
+    node-&gt;setScrollBehaviorForFixedElements(frameView-&gt;scrollBehaviorForFixedElements());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool AsyncScrollingCoordinator::requestScrollPositionUpdate(FrameView* frameView, const IntPoint&amp; scrollPosition)
</span><span class="lines">@@ -290,14 +287,15 @@
</span><span class="cx">     attachToStateTree(ScrollingNode, frameView-&gt;scrollLayerID(), 0);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void AsyncScrollingCoordinator::updateScrollingNode(ScrollingNodeID nodeID, GraphicsLayer* scrollLayer, GraphicsLayer* counterScrollingLayer)
</del><ins>+void AsyncScrollingCoordinator::updateScrollingNode(ScrollingNodeID nodeID, GraphicsLayer* layer, GraphicsLayer* scrolledContentsLayer, GraphicsLayer* counterScrollingLayer)
</ins><span class="cx"> {
</span><span class="cx">     ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(nodeID));
</span><span class="cx">     ASSERT(node);
</span><span class="cx">     if (!node)
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    node-&gt;setLayer(scrollLayer);
</del><ins>+    node-&gt;setLayer(layer);
+    node-&gt;setScrolledContentsLayer(scrolledContentsLayer);
</ins><span class="cx">     node-&gt;setCounterScrollingLayer(counterScrollingLayer);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -312,58 +310,19 @@
</span><span class="cx">     switch (constraints.constraintType()) {
</span><span class="cx">     case ViewportConstraints::FixedPositionConstraint: {
</span><span class="cx">         ScrollingStateFixedNode* fixedNode = toScrollingStateFixedNode(node);
</span><del>-        setScrollLayerForNode(graphicsLayer, fixedNode);
</del><ins>+        fixedNode-&gt;setLayer(graphicsLayer);
</ins><span class="cx">         fixedNode-&gt;updateConstraints((const FixedPositionViewportConstraints&amp;)constraints);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     case ViewportConstraints::StickyPositionConstraint: {
</span><span class="cx">         ScrollingStateStickyNode* stickyNode = toScrollingStateStickyNode(node);
</span><del>-        setScrollLayerForNode(graphicsLayer, stickyNode);
</del><ins>+        stickyNode-&gt;setLayer(graphicsLayer);
</ins><span class="cx">         stickyNode-&gt;updateConstraints((const StickyPositionViewportConstraints&amp;)constraints);
</span><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void AsyncScrollingCoordinator::setScrollLayerForNode(GraphicsLayer* scrollLayer, ScrollingStateNode* node)
-{
-    node-&gt;setLayer(scrollLayer);
-}
-
-void AsyncScrollingCoordinator::setCounterScrollingLayerForNode(GraphicsLayer* layer, ScrollingStateScrollingNode* node)
-{
-    node-&gt;setCounterScrollingLayer(layer);
-}
-
-void AsyncScrollingCoordinator::setHeaderLayerForNode(GraphicsLayer* headerLayer, ScrollingStateScrollingNode* node)
-{
-    // Headers and footers are only supported on the root node.
-    ASSERT(node == m_scrollingStateTree-&gt;rootStateNode());
-    node-&gt;setHeaderLayer(headerLayer);
-}
-
-void AsyncScrollingCoordinator::setFooterLayerForNode(GraphicsLayer* footerLayer, ScrollingStateScrollingNode* node)
-{
-    // Headers and footers are only supported on the root node.
-    ASSERT(node == m_scrollingStateTree-&gt;rootStateNode());
-    node-&gt;setFooterLayer(footerLayer);
-}
-
-void AsyncScrollingCoordinator::setNonFastScrollableRegionForNode(const Region&amp; region, ScrollingStateScrollingNode* node)
-{
-    node-&gt;setNonFastScrollableRegion(region);
-}
-
-void AsyncScrollingCoordinator::setWheelEventHandlerCountForNode(unsigned wheelEventHandlerCount, ScrollingStateScrollingNode* node)
-{
-    node-&gt;setWheelEventHandlerCount(wheelEventHandlerCount);
-}
-
-void AsyncScrollingCoordinator::setScrollBehaviorForFixedElementsForNode(ScrollBehaviorForFixedElements behaviorForFixed, ScrollingStateScrollingNode* node)
-{
-    node-&gt;setScrollBehaviorForFixedElements(behaviorForFixed);
-}
-
</del><span class="cx"> // FIXME: not sure if this belongs here.
</span><span class="cx"> void AsyncScrollingCoordinator::setScrollbarPaintersFromScrollbarsForNode(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar, ScrollingStateScrollingNode* node)
</span><span class="cx"> {
</span><span class="lines">@@ -403,7 +362,7 @@
</span><span class="cx">     ScrollingStateScrollingNode* node = toScrollingStateScrollingNode(m_scrollingStateTree-&gt;stateNodeForID(frameView-&gt;scrollLayerID()));
</span><span class="cx">     if (!node)
</span><span class="cx">         return;
</span><del>-    setWheelEventHandlerCountForNode(computeCurrentWheelEventHandlerCount(), node);
</del><ins>+    node-&gt;setWheelEventHandlerCount(computeCurrentWheelEventHandlerCount());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool AsyncScrollingCoordinator::isRubberBandInProgress() const
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingAsyncScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/AsyncScrollingCoordinator.h        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -87,7 +87,7 @@
</span><span class="cx">     virtual void clearStateTree() override;
</span><span class="cx"> 
</span><span class="cx">     virtual void updateViewportConstrainedNode(ScrollingNodeID, const ViewportConstraints&amp;, GraphicsLayer*) override;
</span><del>-    virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer* scrollLayer, GraphicsLayer* counterScrollingLayer) override;
</del><ins>+    virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer*, GraphicsLayer* scrolledContentsLayer, GraphicsLayer* counterScrollingLayer) override;
</ins><span class="cx">     virtual String scrollingStateTreeAsText() const override;
</span><span class="cx">     virtual bool isRubberBandInProgress() const override;
</span><span class="cx">     virtual void setScrollPinningBehavior(ScrollPinningBehavior) override;
</span><span class="lines">@@ -103,13 +103,6 @@
</span><span class="cx">     void ensureRootStateNodeForFrameView(FrameView*);
</span><span class="cx">     void updateMainFrameScrollLayerPosition();
</span><span class="cx"> 
</span><del>-    void setScrollLayerForNode(GraphicsLayer*, ScrollingStateNode*);
-    void setCounterScrollingLayerForNode(GraphicsLayer*, ScrollingStateScrollingNode*);
-    void setHeaderLayerForNode(GraphicsLayer*, ScrollingStateScrollingNode*);
-    void setFooterLayerForNode(GraphicsLayer*, ScrollingStateScrollingNode*);
-    void setNonFastScrollableRegionForNode(const Region&amp;, ScrollingStateScrollingNode*);
-    void setWheelEventHandlerCountForNode(unsigned, ScrollingStateScrollingNode*);
-    void setScrollBehaviorForFixedElementsForNode(ScrollBehaviorForFixedElements, ScrollingStateScrollingNode*);
</del><span class="cx">     // FIXME: move somewhere else?
</span><span class="cx">     void setScrollbarPaintersFromScrollbarsForNode(Scrollbar* verticalScrollbar, Scrollbar* horizontalScrollbar, ScrollingStateScrollingNode*);
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -152,7 +152,7 @@
</span><span class="cx">     virtual void detachFromStateTree(ScrollingNodeID) { }
</span><span class="cx">     virtual void clearStateTree() { }
</span><span class="cx">     virtual void updateViewportConstrainedNode(ScrollingNodeID, const ViewportConstraints&amp;, GraphicsLayer*) { }
</span><del>-    virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer* /*scrollLayer*/, GraphicsLayer* /*counterScrollingLayer*/) { }
</del><ins>+    virtual void updateScrollingNode(ScrollingNodeID, GraphicsLayer* /*scrollLayer*/, GraphicsLayer* /*scrolledContentsLayer*/, GraphicsLayer* /*counterScrollingLayer*/) { }
</ins><span class="cx">     virtual void syncChildPositions(const LayoutRect&amp;) { }
</span><span class="cx">     virtual String scrollingStateTreeAsText() const;
</span><span class="cx">     virtual bool isRubberBandInProgress() const { return false; }
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateScrollingNodecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.cpp        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -76,6 +76,9 @@
</span><span class="cx">     , m_requestedScrollPosition(stateNode.requestedScrollPosition())
</span><span class="cx">     , m_requestedScrollPositionRepresentsProgrammaticScroll(stateNode.requestedScrollPositionRepresentsProgrammaticScroll())
</span><span class="cx"> {
</span><ins>+    if (hasChangedProperty(ScrolledContentsLayer))
+        setScrolledContentsLayer(stateNode.scrolledContentsLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
+
</ins><span class="cx">     if (hasChangedProperty(CounterScrollingLayer))
</span><span class="cx">         setCounterScrollingLayer(stateNode.counterScrollingLayer().toRepresentation(adoptiveTree.preferredLayerRepresentation()));
</span><span class="cx"> 
</span><span class="lines">@@ -211,13 +214,21 @@
</span><span class="cx">     setPropertyChanged(FooterHeight);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void ScrollingStateScrollingNode::setScrolledContentsLayer(const LayerRepresentation&amp; layerRepresentation)
+{
+    if (layerRepresentation == m_scrolledContentsLayer)
+        return;
+    
+    m_scrolledContentsLayer = layerRepresentation;
+    setPropertyChanged(ScrolledContentsLayer);
+}
+
</ins><span class="cx"> void ScrollingStateScrollingNode::setCounterScrollingLayer(const LayerRepresentation&amp; layerRepresentation)
</span><span class="cx"> {
</span><span class="cx">     if (layerRepresentation == m_counterScrollingLayer)
</span><span class="cx">         return;
</span><span class="cx">     
</span><span class="cx">     m_counterScrollingLayer = layerRepresentation;
</span><del>-
</del><span class="cx">     setPropertyChanged(CounterScrollingLayer);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -227,7 +238,6 @@
</span><span class="cx">         return;
</span><span class="cx">     
</span><span class="cx">     m_headerLayer = layerRepresentation;
</span><del>-
</del><span class="cx">     setPropertyChanged(HeaderLayer);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -238,7 +248,6 @@
</span><span class="cx">         return;
</span><span class="cx">     
</span><span class="cx">     m_footerLayer = layerRepresentation;
</span><del>-
</del><span class="cx">     setPropertyChanged(FooterLayer);
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingStateScrollingNodeh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/ScrollingStateScrollingNode.h        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -60,6 +60,7 @@
</span><span class="cx">         WheelEventHandlerCount,
</span><span class="cx">         ReasonsForSynchronousScrolling,
</span><span class="cx">         RequestedScrollPosition,
</span><ins>+        ScrolledContentsLayer,
</ins><span class="cx">         CounterScrollingLayer,
</span><span class="cx">         HeaderHeight,
</span><span class="cx">         FooterHeight,
</span><span class="lines">@@ -109,6 +110,10 @@
</span><span class="cx">     int footerHeight() const { return m_footerHeight; }
</span><span class="cx">     void setFooterHeight(int);
</span><span class="cx"> 
</span><ins>+    // This is a layer with the contents that move (only used for overflow:scroll).
+    const LayerRepresentation&amp; scrolledContentsLayer() const { return m_scrolledContentsLayer; }
+    void setScrolledContentsLayer(const LayerRepresentation&amp;);
+
</ins><span class="cx">     // This is a layer moved in the opposite direction to scrolling, for example for background-attachment:fixed
</span><span class="cx">     const LayerRepresentation&amp; counterScrollingLayer() const { return m_counterScrollingLayer; }
</span><span class="cx">     void setCounterScrollingLayer(const LayerRepresentation&amp;);
</span><span class="lines">@@ -133,6 +138,7 @@
</span><span class="cx">     ScrollingStateScrollingNode(ScrollingStateTree&amp;, ScrollingNodeID);
</span><span class="cx">     ScrollingStateScrollingNode(const ScrollingStateScrollingNode&amp;, ScrollingStateTree&amp;);
</span><span class="cx"> 
</span><ins>+    LayerRepresentation m_scrolledContentsLayer;
</ins><span class="cx">     LayerRepresentation m_counterScrollingLayer;
</span><span class="cx">     LayerRepresentation m_headerLayer;
</span><span class="cx">     LayerRepresentation m_footerLayer;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.h        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -61,6 +61,7 @@
</span><span class="cx">     void scrollByWithoutContentEdgeConstraints(const IntSize&amp;);
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;CALayer&gt; m_scrollLayer;
</span><ins>+    RetainPtr&lt;CALayer&gt; m_scrolledContentsLayer;
</ins><span class="cx">     RetainPtr&lt;CALayer&gt; m_counterScrollingLayer;
</span><span class="cx">     RetainPtr&lt;CALayer&gt; m_headerLayer;
</span><span class="cx">     RetainPtr&lt;CALayer&gt; m_footerLayer;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingiosScrollingTreeScrollingNodeIOSmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/ios/ScrollingTreeScrollingNodeIOS.mm        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -62,6 +62,9 @@
</span><span class="cx">     if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
</span><span class="cx">         m_scrollLayer = scrollingStateNode.layer();
</span><span class="cx"> 
</span><ins>+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
+        m_scrolledContentsLayer = scrollingStateNode.scrolledContentsLayer();
+
</ins><span class="cx">     if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
</span><span class="cx">         m_counterScrollingLayer = scrollingStateNode.counterScrollingLayer();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMach"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.h        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -85,6 +85,7 @@
</span><span class="cx">     RetainPtr&lt;CFRunLoopTimerRef&gt; m_snapRubberbandTimer;
</span><span class="cx"> 
</span><span class="cx">     RetainPtr&lt;CALayer&gt; m_scrollLayer;
</span><ins>+    RetainPtr&lt;CALayer&gt; m_scrolledContentsLayer;
</ins><span class="cx">     RetainPtr&lt;CALayer&gt; m_counterScrollingLayer;
</span><span class="cx">     RetainPtr&lt;CALayer&gt; m_headerLayer;
</span><span class="cx">     RetainPtr&lt;CALayer&gt; m_footerLayer;
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingmacScrollingTreeScrollingNodeMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/page/scrolling/mac/ScrollingTreeScrollingNodeMac.mm        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -78,6 +78,9 @@
</span><span class="cx">     if (scrollingStateNode.hasChangedProperty(ScrollingStateNode::ScrollLayer))
</span><span class="cx">         m_scrollLayer = scrollingStateNode.layer();
</span><span class="cx"> 
</span><ins>+    if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
+        m_scrolledContentsLayer = scrollingStateNode.scrolledContentsLayer();
+
</ins><span class="cx">     if (scrollingStateNode.hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
</span><span class="cx">         m_counterScrollingLayer = scrollingStateNode.counterScrollingLayer();
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingRenderLayerCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebCore/rendering/RenderLayerCompositor.cpp        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -1566,7 +1566,7 @@
</span><span class="cx">         if (!renderViewBacking)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><del>-        scrollingCoordinator-&gt;updateScrollingNode(renderViewBacking-&gt;scrollLayerID(), scrollLayer(), fixedRootBackgroundLayer());
</del><ins>+        scrollingCoordinator-&gt;updateScrollingNode(renderViewBacking-&gt;scrollLayerID(), scrollLayer(), nullptr, fixedRootBackgroundLayer());
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebKit2/ChangeLog        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -1,3 +1,23 @@
</span><ins>+2014-02-13  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Give ScrollingTree(State)Nodes a reference to another layer, which is used for moving overflow:scroll contents around
+        https://bugs.webkit.org/show_bug.cgi?id=128790
+
+        Reviewed by Beth Dakin.
+
+        Have scrolling tree nodes and state nodes track another layer, the
+        &quot;scrolled contents layer&quot;, for accelerated overflow:scroll.
+        
+        When making ScrollingTreeScrollingNodes for overflow:scroll, the node's
+        layer will point to the composited element's primary layer, and its
+        scrolledContentsLayer to the layer that gets moved around by scrolling.
+        
+        Do some other cleanup on AsyncScrollingCoordinator, removing
+        functions that just called through to nodes.
+
+        * UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp:
+        (WebKit::RemoteScrollingCoordinatorProxy::connectStateNodeLayers):
+
</ins><span class="cx"> 2014-02-14  Anders Carlsson  &lt;andersca@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Add -[WKWebView _handle]
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessScrollingRemoteScrollingCoordinatorProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp (164109 => 164110)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp        2014-02-14 18:59:06 UTC (rev 164109)
+++ trunk/Source/WebKit2/UIProcess/Scrolling/RemoteScrollingCoordinatorProxy.cpp        2014-02-14 19:13:54 UTC (rev 164110)
</span><span class="lines">@@ -100,6 +100,9 @@
</span><span class="cx">             if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateNode::ScrollLayer))
</span><span class="cx">                 scrollingStateNode-&gt;setLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;layer()));
</span><span class="cx"> 
</span><ins>+            if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::ScrolledContentsLayer))
+                scrollingStateNode-&gt;setScrolledContentsLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;scrolledContentsLayer()));
+
</ins><span class="cx">             if (scrollingStateNode-&gt;hasChangedProperty(ScrollingStateScrollingNode::CounterScrollingLayer))
</span><span class="cx">                 scrollingStateNode-&gt;setCounterScrollingLayer(layerTreeHost.getLayer(scrollingStateNode-&gt;counterScrollingLayer()));
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>