<!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>[168175] trunk/Source/WebKit2</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/168175">168175</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2014-05-02 10:29:22 -0700 (Fri, 02 May 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[iOS WK2] Animations on vox.com look wrong
https://bugs.webkit.org/show_bug.cgi?id=132462
&lt;rdar://problem/16731884&gt;

Reviewed by Sam Weinig.

PlatformCALayerRemote was managing animations incorrectly; aninations
would stick around in m_properties.addedAnimations and get added a second
time by mistake.

Animations have to be managed a little differently to other properties,
since they are not steady-state things. A given commit has to send over
the added and removed animations, and then clear the layer properties.

Do this by adding PlatformCALayerRemote::didCommit(), which is called
after the layer properties have been encoded, and have it clear the lists
of added and removed animations.

removeAnimationForKey() also has to remove the animation from addedAnimations
so that an add/remove in the same commit doesn't send the animation to the
UI process.

* WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
(WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
(WebKit::PlatformCALayerRemote::didCommit):
(WebKit::PlatformCALayerRemote::removeAnimationForKey):
* WebProcess/WebPage/mac/PlatformCALayerRemote.h:
* WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
(WebKit::RemoteLayerTreeDrawingArea::flushLayers):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacPlatformCALayerRemotecpp">trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacPlatformCALayerRemoteh">trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacRemoteLayerTreeDrawingAreamm">trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (168174 => 168175)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-05-02 17:29:20 UTC (rev 168174)
+++ trunk/Source/WebKit2/ChangeLog        2014-05-02 17:29:22 UTC (rev 168175)
</span><span class="lines">@@ -1,5 +1,37 @@
</span><span class="cx"> 2014-05-01  Simon Fraser  &lt;simon.fraser@apple.com&gt;
</span><span class="cx"> 
</span><ins>+        [iOS WK2] Animations on vox.com look wrong
+        https://bugs.webkit.org/show_bug.cgi?id=132462
+        &lt;rdar://problem/16731884&gt;
+
+        Reviewed by Sam Weinig.
+        
+        PlatformCALayerRemote was managing animations incorrectly; aninations
+        would stick around in m_properties.addedAnimations and get added a second
+        time by mistake.
+        
+        Animations have to be managed a little differently to other properties,
+        since they are not steady-state things. A given commit has to send over
+        the added and removed animations, and then clear the layer properties.
+        
+        Do this by adding PlatformCALayerRemote::didCommit(), which is called
+        after the layer properties have been encoded, and have it clear the lists
+        of added and removed animations.
+        
+        removeAnimationForKey() also has to remove the animation from addedAnimations
+        so that an add/remove in the same commit doesn't send the animation to the
+        UI process.
+
+        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
+        (WebKit::PlatformCALayerRemote::recursiveBuildTransaction):
+        (WebKit::PlatformCALayerRemote::didCommit):
+        (WebKit::PlatformCALayerRemote::removeAnimationForKey):
+        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
+        * WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm:
+        (WebKit::RemoteLayerTreeDrawingArea::flushLayers):
+
+2014-05-01  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
</ins><span class="cx">         [iOS WK2] Can't scroll on gatesnotes.com 
</span><span class="cx">         https://bugs.webkit.org/show_bug.cgi?id=132459
</span><span class="cx">         &lt;rdar://problem/16770909&gt;
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacPlatformCALayerRemotecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp (168174 => 168175)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp        2014-05-02 17:29:20 UTC (rev 168174)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp        2014-05-02 17:29:22 UTC (rev 168175)
</span><span class="lines">@@ -135,7 +135,7 @@
</span><span class="cx"> 
</span><span class="cx">         if (m_layerType == LayerTypeCustom) {
</span><span class="cx">             RemoteLayerTreePropertyApplier::applyProperties(platformLayer(), nullptr, m_properties, RemoteLayerTreePropertyApplier::RelatedLayerMap());
</span><del>-            m_properties.resetChangedProperties();
</del><ins>+            didCommit();
</ins><span class="cx">             return;
</span><span class="cx">         }
</span><span class="cx"> 
</span><span class="lines">@@ -152,6 +152,13 @@
</span><span class="cx">         m_maskLayer-&gt;recursiveBuildTransaction(transaction);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void PlatformCALayerRemote::didCommit()
+{
+    m_properties.addedAnimations.clear();
+    m_properties.keyPathsOfAnimationsToRemove.clear();
+    m_properties.resetChangedProperties();
+}
+
</ins><span class="cx"> void PlatformCALayerRemote::animationStarted(CFTimeInterval beginTime)
</span><span class="cx"> {
</span><span class="cx">     if (m_owner)
</span><span class="lines">@@ -297,7 +304,7 @@
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::removeAnimationForKey(const String&amp; key)
</span><span class="cx"> {
</span><del>-    // FIXME: remove from m_properties.addedAnimations ?
</del><ins>+    m_properties.addedAnimations.remove(key);
</ins><span class="cx">     m_properties.keyPathsOfAnimationsToRemove.add(key);
</span><span class="cx">     m_properties.notePropertiesChanged(RemoteLayerTreeTransaction::AnimationsChanged);
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacPlatformCALayerRemoteh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h (168174 => 168175)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h        2014-05-02 17:29:20 UTC (rev 168174)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h        2014-05-02 17:29:22 UTC (rev 168175)
</span><span class="lines">@@ -157,6 +157,8 @@
</span><span class="cx"> 
</span><span class="cx">     RemoteLayerTreeTransaction::LayerProperties&amp; properties() { return m_properties; }
</span><span class="cx"> 
</span><ins>+    void didCommit();
+
</ins><span class="cx">     void clearContext() { m_context = nullptr; }
</span><span class="cx"> 
</span><span class="cx"> protected:
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacRemoteLayerTreeDrawingAreamm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm (168174 => 168175)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm        2014-05-02 17:29:20 UTC (rev 168174)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/RemoteLayerTreeDrawingArea.mm        2014-05-02 17:29:22 UTC (rev 168175)
</span><span class="lines">@@ -278,7 +278,7 @@
</span><span class="cx">     for (auto&amp; layer : layerTransaction.changedLayers()) {
</span><span class="cx">         if (layer-&gt;properties().changedProperties &amp; RemoteLayerTreeTransaction::LayerChanges::BackingStoreChanged)
</span><span class="cx">             hadAnyChangedBackingStore = true;
</span><del>-        layer-&gt;properties().resetChangedProperties();
</del><ins>+        layer-&gt;didCommit();
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (hadAnyChangedBackingStore)
</span></span></pre>
</div>
</div>

</body>
</html>