<!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>[164405] 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/164405">164405</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2014-02-19 18:03:37 -0800 (Wed, 19 Feb 2014)</dd>
</dl>

<h3>Log Message</h3>
<pre>[UI-Side Compositing] 6% of main thread time spent copying LayerProperties when adding to hash table
https://bugs.webkit.org/show_bug.cgi?id=129074

Reviewed by Tim Horton.

Make RemoteLayerTreeTransaction::LayerProperties smaller and not copied by
value everywhere.

Put some big members into unique_ptrs, and store unique_ptrs
in the hash of layerID to properties.

Clean up member variable order of LayerProperties to improve packing.

Also have applyPropertiesToLayer() take references to things to avoid
copies.

* Shared/mac/RemoteLayerTreePropertyApplier.h:
* Shared/mac/RemoteLayerTreePropertyApplier.mm:
(WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
* Shared/mac/RemoteLayerTreeTransaction.h:
(WebKit::RemoteLayerTreeTransaction::changedLayers):
* Shared/mac/RemoteLayerTreeTransaction.mm:
(WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
(WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
(WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
(WebKit::RemoteLayerTreeTransaction::encode):
(WebKit::RemoteLayerTreeTransaction::decode):
(WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
(WebKit::dumpChangedLayers):
* UIProcess/mac/RemoteLayerTreeHost.h:
* UIProcess/mac/RemoteLayerTreeHost.mm:
(WebKit::RemoteLayerTreeHost::updateLayerTree):
(WebKit::RemoteLayerTreeHost::createLayer):
* WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
(PlatformCALayerRemote::create):
(PlatformCALayerRemote::PlatformCALayerRemote):
(PlatformCALayerRemote::clone):
(PlatformCALayerRemote::recursiveBuildTransaction):
(PlatformCALayerRemote::ensureBackingStore):
(PlatformCALayerRemote::setNeedsDisplay):
(PlatformCALayerRemote::transform):
(PlatformCALayerRemote::setTransform):
(PlatformCALayerRemote::sublayerTransform):
(PlatformCALayerRemote::setSublayerTransform):
(PlatformCALayerRemote::setFilters):
(PlatformCALayerRemote::enumerateRectsBeingDrawn):
* WebProcess/WebPage/mac/PlatformCALayerRemote.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreePropertyApplierh">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreePropertyAppliermm">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.mm</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionh">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacRemoteLayerTreeHosth">trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessmacRemoteLayerTreeHostmm">trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm</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>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/ChangeLog        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -1,3 +1,53 @@
</span><ins>+2014-02-19  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        [UI-Side Compositing] 6% of main thread time spent copying LayerProperties when adding to hash table
+        https://bugs.webkit.org/show_bug.cgi?id=129074
+
+        Reviewed by Tim Horton.
+        
+        Make RemoteLayerTreeTransaction::LayerProperties smaller and not copied by
+        value everywhere.
+        
+        Put some big members into unique_ptrs, and store unique_ptrs
+        in the hash of layerID to properties.
+        
+        Clean up member variable order of LayerProperties to improve packing.
+        
+        Also have applyPropertiesToLayer() take references to things to avoid
+        copies.
+        
+        * Shared/mac/RemoteLayerTreePropertyApplier.h:
+        * Shared/mac/RemoteLayerTreePropertyApplier.mm:
+        (WebKit::RemoteLayerTreePropertyApplier::applyPropertiesToLayer):
+        * Shared/mac/RemoteLayerTreeTransaction.h:
+        (WebKit::RemoteLayerTreeTransaction::changedLayers):
+        * Shared/mac/RemoteLayerTreeTransaction.mm:
+        (WebKit::RemoteLayerTreeTransaction::LayerProperties::LayerProperties):
+        (WebKit::RemoteLayerTreeTransaction::LayerProperties::encode):
+        (WebKit::RemoteLayerTreeTransaction::LayerProperties::decode):
+        (WebKit::RemoteLayerTreeTransaction::encode):
+        (WebKit::RemoteLayerTreeTransaction::decode):
+        (WebKit::RemoteLayerTreeTransaction::layerPropertiesChanged):
+        (WebKit::dumpChangedLayers):
+        * UIProcess/mac/RemoteLayerTreeHost.h:
+        * UIProcess/mac/RemoteLayerTreeHost.mm:
+        (WebKit::RemoteLayerTreeHost::updateLayerTree):
+        (WebKit::RemoteLayerTreeHost::createLayer):
+        * WebProcess/WebPage/mac/PlatformCALayerRemote.cpp:
+        (PlatformCALayerRemote::create):
+        (PlatformCALayerRemote::PlatformCALayerRemote):
+        (PlatformCALayerRemote::clone):
+        (PlatformCALayerRemote::recursiveBuildTransaction):
+        (PlatformCALayerRemote::ensureBackingStore):
+        (PlatformCALayerRemote::setNeedsDisplay):
+        (PlatformCALayerRemote::transform):
+        (PlatformCALayerRemote::setTransform):
+        (PlatformCALayerRemote::sublayerTransform):
+        (PlatformCALayerRemote::setSublayerTransform):
+        (PlatformCALayerRemote::setFilters):
+        (PlatformCALayerRemote::enumerateRectsBeingDrawn):
+        * WebProcess/WebPage/mac/PlatformCALayerRemote.h:
+
</ins><span class="cx"> 2014-02-19  Benjamin Poulain  &lt;bpoulain@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove -[WKContentView setViewportSize:]
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreePropertyApplierh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.h        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -34,7 +34,7 @@
</span><span class="cx"> class RemoteLayerTreePropertyApplier {
</span><span class="cx"> public:
</span><span class="cx">     typedef HashMap&lt;WebCore::GraphicsLayer::PlatformLayerID, CALayer *&gt; RelatedLayerMap;
</span><del>-    static void applyPropertiesToLayer(CALayer *, RemoteLayerTreeTransaction::LayerProperties, RelatedLayerMap);
</del><ins>+    static void applyPropertiesToLayer(CALayer *, const RemoteLayerTreeTransaction::LayerProperties&amp;, const RelatedLayerMap&amp;);
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreePropertyAppliermm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.mm (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.mm        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreePropertyApplier.mm        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -79,7 +79,7 @@
</span><span class="cx"> #endif
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RemoteLayerTreePropertyApplier::applyPropertiesToLayer(CALayer *layer, RemoteLayerTreeTransaction::LayerProperties properties, RelatedLayerMap relatedLayers)
</del><ins>+void RemoteLayerTreePropertyApplier::applyPropertiesToLayer(CALayer *layer, const RemoteLayerTreeTransaction::LayerProperties&amp; properties, const RelatedLayerMap&amp; relatedLayers)
</ins><span class="cx"> {
</span><span class="cx">     if (properties.changedProperties &amp; RemoteLayerTreeTransaction::NameChanged)
</span><span class="cx">         layer.name = properties.name;
</span><span class="lines">@@ -117,10 +117,10 @@
</span><span class="cx">         layer.opacity = properties.opacity;
</span><span class="cx"> 
</span><span class="cx">     if (properties.changedProperties &amp; RemoteLayerTreeTransaction::TransformChanged)
</span><del>-        layer.transform = properties.transform;
</del><ins>+        layer.transform = properties.transform ? (CATransform3D)*properties.transform.get() : CATransform3DIdentity;
</ins><span class="cx"> 
</span><span class="cx">     if (properties.changedProperties &amp; RemoteLayerTreeTransaction::SublayerTransformChanged)
</span><del>-        layer.sublayerTransform = properties.sublayerTransform;
</del><ins>+        layer.sublayerTransform = properties.sublayerTransform ? (CATransform3D)*properties.sublayerTransform.get() : CATransform3DIdentity;
</ins><span class="cx"> 
</span><span class="cx">     if (properties.changedProperties &amp; RemoteLayerTreeTransaction::HiddenChanged)
</span><span class="cx">         layer.hidden = properties.hidden;
</span><span class="lines">@@ -168,17 +168,17 @@
</span><span class="cx"> 
</span><span class="cx">     if (properties.changedProperties &amp; RemoteLayerTreeTransaction::BackingStoreChanged) {
</span><span class="cx"> #if USE(IOSURFACE)
</span><del>-        if (properties.backingStore.acceleratesDrawing())
-            layer.contents = (id)properties.backingStore.surface().get();
</del><ins>+        if (properties.backingStore-&gt;acceleratesDrawing())
+            layer.contents = (id)properties.backingStore-&gt;surface().get();
</ins><span class="cx">         else
</span><span class="cx"> #else
</span><del>-            ASSERT(!properties.backingStore.acceleratesDrawing());
</del><ins>+            ASSERT(!properties.backingStore || !properties.backingStore-&gt;acceleratesDrawing());
</ins><span class="cx"> #endif
</span><del>-        layer.contents = (id)properties.backingStore.image().get();
</del><ins>+        layer.contents = properties.backingStore ? (id)properties.backingStore-&gt;image().get() : nil;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (properties.changedProperties &amp; RemoteLayerTreeTransaction::FiltersChanged)
</span><del>-        PlatformCAFilters::setFiltersOnLayer(layer, properties.filters);
</del><ins>+        PlatformCAFilters::setFiltersOnLayer(layer, properties.filters ? *properties.filters : FilterOperations());
</ins><span class="cx"> 
</span><span class="cx">     if (properties.changedProperties &amp; RemoteLayerTreeTransaction::EdgeAntialiasingMaskChanged)
</span><span class="cx">         layer.edgeAntialiasingMask = properties.edgeAntialiasingMask;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.h        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -92,6 +92,7 @@
</span><span class="cx"> 
</span><span class="cx">     struct LayerProperties {
</span><span class="cx">         LayerProperties();
</span><ins>+        LayerProperties(const LayerProperties&amp; other);
</ins><span class="cx"> 
</span><span class="cx">         void encode(IPC::ArgumentEncoder&amp;) const;
</span><span class="cx">         static bool decode(IPC::ArgumentDecoder&amp;, LayerProperties&amp;);
</span><span class="lines">@@ -106,32 +107,32 @@
</span><span class="cx">         LayerChange everChangedProperties;
</span><span class="cx"> 
</span><span class="cx">         String name;
</span><ins>+        std::unique_ptr&lt;WebCore::TransformationMatrix&gt; transform;
+        std::unique_ptr&lt;WebCore::TransformationMatrix&gt; sublayerTransform;
</ins><span class="cx">         Vector&lt;WebCore::GraphicsLayer::PlatformLayerID&gt; children;
</span><span class="cx">         WebCore::FloatPoint3D position;
</span><ins>+        WebCore::FloatPoint3D anchorPoint;
</ins><span class="cx">         WebCore::FloatSize size;
</span><ins>+        WebCore::FloatRect contentsRect;
+        std::unique_ptr&lt;RemoteLayerBackingStore&gt; backingStore;
+        std::unique_ptr&lt;WebCore::FilterOperations&gt; filters;
+        WebCore::GraphicsLayer::PlatformLayerID maskLayerID;
+        double timeOffset;
+        float speed;
+        float contentsScale;
+        float borderWidth;
+        float opacity;
</ins><span class="cx">         WebCore::Color backgroundColor;
</span><del>-        WebCore::FloatPoint3D anchorPoint;
-        float borderWidth;
</del><span class="cx">         WebCore::Color borderColor;
</span><del>-        float opacity;
-        WebCore::TransformationMatrix transform;
-        WebCore::TransformationMatrix sublayerTransform;
</del><ins>+        unsigned edgeAntialiasingMask;
+        WebCore::GraphicsLayer::CustomAppearance customAppearance;
+        WebCore::PlatformCALayer::FilterType minificationFilter;
+        WebCore::PlatformCALayer::FilterType magnificationFilter;
</ins><span class="cx">         bool hidden;
</span><span class="cx">         bool geometryFlipped;
</span><span class="cx">         bool doubleSided;
</span><span class="cx">         bool masksToBounds;
</span><span class="cx">         bool opaque;
</span><del>-        WebCore::GraphicsLayer::PlatformLayerID maskLayerID;
-        WebCore::FloatRect contentsRect;
-        float contentsScale;
-        WebCore::PlatformCALayer::FilterType minificationFilter;
-        WebCore::PlatformCALayer::FilterType magnificationFilter;
-        float speed;
-        double timeOffset;
-        RemoteLayerBackingStore backingStore;
-        WebCore::FilterOperations filters;
-        unsigned edgeAntialiasingMask;
-        WebCore::GraphicsLayer::CustomAppearance customAppearance;
</del><span class="cx">     };
</span><span class="cx"> 
</span><span class="cx">     explicit RemoteLayerTreeTransaction();
</span><span class="lines">@@ -151,8 +152,11 @@
</span><span class="cx">     void dump() const;
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><ins>+    typedef HashMap&lt;WebCore::GraphicsLayer::PlatformLayerID, std::unique_ptr&lt;LayerProperties&gt;&gt; LayerPropertiesMap;
+    
</ins><span class="cx">     Vector&lt;LayerCreationProperties&gt; createdLayers() const { return m_createdLayers; }
</span><del>-    HashMap&lt;WebCore::GraphicsLayer::PlatformLayerID, LayerProperties&gt; changedLayers() const { return m_changedLayerProperties; }
</del><ins>+    const LayerPropertiesMap&amp; changedLayers() const { return m_changedLayerProperties; }
+    LayerPropertiesMap&amp; changedLayers() { return m_changedLayerProperties; }
</ins><span class="cx">     Vector&lt;WebCore::GraphicsLayer::PlatformLayerID&gt; destroyedLayers() const { return m_destroyedLayerIDs; }
</span><span class="cx"> 
</span><span class="cx">     WebCore::IntSize contentsSize() const { return m_contentsSize; }
</span><span class="lines">@@ -175,7 +179,7 @@
</span><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     WebCore::GraphicsLayer::PlatformLayerID m_rootLayerID;
</span><del>-    HashMap&lt;WebCore::GraphicsLayer::PlatformLayerID, LayerProperties&gt; m_changedLayerProperties;
</del><ins>+    LayerPropertiesMap m_changedLayerProperties;
</ins><span class="cx">     Vector&lt;LayerCreationProperties&gt; m_createdLayers;
</span><span class="cx">     Vector&lt;WebCore::GraphicsLayer::PlatformLayerID&gt; m_destroyedLayerIDs;
</span><span class="cx">     WebCore::IntSize m_contentsSize;
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -72,28 +72,68 @@
</span><span class="cx"> RemoteLayerTreeTransaction::LayerProperties::LayerProperties()
</span><span class="cx">     : changedProperties(NoChange)
</span><span class="cx">     , everChangedProperties(NoChange)
</span><del>-    , backgroundColor(Color::transparent)
</del><span class="cx">     , anchorPoint(0.5, 0.5, 0)
</span><ins>+    , contentsRect(FloatPoint(), FloatSize(1, 1))
+    , maskLayerID(0)
+    , timeOffset(0)
+    , speed(1)
+    , contentsScale(1)
</ins><span class="cx">     , borderWidth(0)
</span><ins>+    , opacity(1)
+    , backgroundColor(Color::transparent)
</ins><span class="cx">     , borderColor(Color::black)
</span><del>-    , opacity(1)
</del><ins>+    , edgeAntialiasingMask(kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge)
+    , customAppearance(GraphicsLayer::NoCustomAppearance)
+    , minificationFilter(PlatformCALayer::FilterType::Linear)
+    , magnificationFilter(PlatformCALayer::FilterType::Linear)
</ins><span class="cx">     , hidden(false)
</span><span class="cx">     , geometryFlipped(false)
</span><span class="cx">     , doubleSided(true)
</span><span class="cx">     , masksToBounds(false)
</span><span class="cx">     , opaque(false)
</span><del>-    , maskLayerID(0)
-    , contentsRect(FloatPoint(), FloatSize(1, 1))
-    , contentsScale(1)
-    , minificationFilter(PlatformCALayer::FilterType::Linear)
-    , magnificationFilter(PlatformCALayer::FilterType::Linear)
-    , speed(1)
-    , timeOffset(0)
-    , edgeAntialiasingMask(kCALayerLeftEdge | kCALayerRightEdge | kCALayerBottomEdge | kCALayerTopEdge)
-    , customAppearance(GraphicsLayer::NoCustomAppearance)
</del><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+RemoteLayerTreeTransaction::LayerProperties::LayerProperties(const LayerProperties&amp; other)
+    : changedProperties(other.changedProperties)
+    , everChangedProperties(other.everChangedProperties)
+    , name(other.name)
+    , children(other.children)
+    , position(other.position)
+    , anchorPoint(other.anchorPoint)
+    , size(other.size)
+    , contentsRect(other.contentsRect)
+    , maskLayerID(other.maskLayerID)
+    , timeOffset(other.timeOffset)
+    , speed(other.speed)
+    , contentsScale(other.contentsScale)
+    , borderWidth(other.borderWidth)
+    , opacity(other.opacity)
+    , backgroundColor(other.backgroundColor)
+    , borderColor(other.borderColor)
+    , edgeAntialiasingMask(other.edgeAntialiasingMask)
+    , customAppearance(other.customAppearance)
+    , minificationFilter(other.minificationFilter)
+    , magnificationFilter(other.magnificationFilter)
+    , hidden(other.hidden)
+    , geometryFlipped(other.geometryFlipped)
+    , doubleSided(other.doubleSided)
+    , masksToBounds(other.masksToBounds)
+    , opaque(other.opaque)
+{
+    if (other.transform)
+        transform = std::make_unique&lt;TransformationMatrix&gt;(*other.transform);
+
+    if (other.sublayerTransform)
+        sublayerTransform = std::make_unique&lt;TransformationMatrix&gt;(*other.sublayerTransform);
+    
+    if (other.backingStore)
+        backingStore = std::make_unique&lt;RemoteLayerBackingStore&gt;(*other.backingStore);
+
+    if (other.filters)
+        filters = std::make_unique&lt;FilterOperations&gt;(*other.filters);
+}
+
</ins><span class="cx"> void RemoteLayerTreeTransaction::LayerProperties::encode(IPC::ArgumentEncoder&amp; encoder) const
</span><span class="cx"> {
</span><span class="cx">     encoder.encodeEnum(changedProperties);
</span><span class="lines">@@ -126,10 +166,10 @@
</span><span class="cx">         encoder &lt;&lt; opacity;
</span><span class="cx"> 
</span><span class="cx">     if (changedProperties &amp; TransformChanged)
</span><del>-        encoder &lt;&lt; transform;
</del><ins>+        encoder &lt;&lt; *transform;
</ins><span class="cx"> 
</span><span class="cx">     if (changedProperties &amp; SublayerTransformChanged)
</span><del>-        encoder &lt;&lt; sublayerTransform;
</del><ins>+        encoder &lt;&lt; *sublayerTransform;
</ins><span class="cx"> 
</span><span class="cx">     if (changedProperties &amp; HiddenChanged)
</span><span class="cx">         encoder &lt;&lt; hidden;
</span><span class="lines">@@ -168,13 +208,13 @@
</span><span class="cx">         encoder &lt;&lt; timeOffset;
</span><span class="cx"> 
</span><span class="cx">     if (changedProperties &amp; BackingStoreChanged) {
</span><del>-        encoder &lt;&lt; backingStore.hasFrontBuffer();
-        if (backingStore.hasFrontBuffer())
-            encoder &lt;&lt; backingStore;
</del><ins>+        encoder &lt;&lt; backingStore-&gt;hasFrontBuffer();
+        if (backingStore-&gt;hasFrontBuffer())
+            encoder &lt;&lt; *backingStore;
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (changedProperties &amp; FiltersChanged)
</span><del>-        encoder &lt;&lt; filters;
</del><ins>+        encoder &lt;&lt; *filters;
</ins><span class="cx"> 
</span><span class="cx">     if (changedProperties &amp; EdgeAntialiasingMaskChanged)
</span><span class="cx">         encoder &lt;&lt; edgeAntialiasingMask;
</span><span class="lines">@@ -239,13 +279,19 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (result.changedProperties &amp; TransformChanged) {
</span><del>-        if (!decoder.decode(result.transform))
</del><ins>+        TransformationMatrix transform;
+        if (!decoder.decode(transform))
</ins><span class="cx">             return false;
</span><ins>+        
+        result.transform = std::make_unique&lt;TransformationMatrix&gt;(transform);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (result.changedProperties &amp; SublayerTransformChanged) {
</span><del>-        if (!decoder.decode(result.sublayerTransform))
</del><ins>+        TransformationMatrix transform;
+        if (!decoder.decode(transform))
</ins><span class="cx">             return false;
</span><ins>+
+        result.sublayerTransform = std::make_unique&lt;TransformationMatrix&gt;(transform);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (result.changedProperties &amp; HiddenChanged) {
</span><span class="lines">@@ -312,13 +358,20 @@
</span><span class="cx">         bool hasFrontBuffer = false;
</span><span class="cx">         if (!decoder.decode(hasFrontBuffer))
</span><span class="cx">             return false;
</span><del>-        if (hasFrontBuffer &amp;&amp; !decoder.decode(result.backingStore))
-            return false;
</del><ins>+        if (hasFrontBuffer) {
+            RemoteLayerBackingStore backingStore;
+            if (!decoder.decode(backingStore))
+                return false;
+            
+            result.backingStore = std::make_unique&lt;RemoteLayerBackingStore&gt;(backingStore);
+        }
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (result.changedProperties &amp; FiltersChanged) {
</span><del>-        if (!decoder.decode(result.filters))
</del><ins>+        std::unique_ptr&lt;FilterOperations&gt; filters = std::make_unique&lt;FilterOperations&gt;();
+        if (!decoder.decode(*filters))
</ins><span class="cx">             return false;
</span><ins>+        result.filters = std::move(filters);
</ins><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     if (result.changedProperties &amp; EdgeAntialiasingMaskChanged) {
</span><span class="lines">@@ -346,7 +399,14 @@
</span><span class="cx"> {
</span><span class="cx">     encoder &lt;&lt; m_rootLayerID;
</span><span class="cx">     encoder &lt;&lt; m_createdLayers;
</span><del>-    encoder &lt;&lt; m_changedLayerProperties;
</del><ins>+
+    encoder &lt;&lt; m_changedLayerProperties.size();
+
+    for (const auto&amp; layerProperties : m_changedLayerProperties) {
+        encoder &lt;&lt; layerProperties.key;
+        encoder &lt;&lt; *layerProperties.value;
+    }
+    
</ins><span class="cx">     encoder &lt;&lt; m_destroyedLayerIDs;
</span><span class="cx">     encoder &lt;&lt; m_contentsSize;
</span><span class="cx">     encoder &lt;&lt; m_pageScaleFactor;
</span><span class="lines">@@ -366,9 +426,22 @@
</span><span class="cx">     if (!decoder.decode(result.m_createdLayers))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><del>-    if (!decoder.decode(result.m_changedLayerProperties))
</del><ins>+    int numChangedLayerProperties;
+    if (!decoder.decode(numChangedLayerProperties))
</ins><span class="cx">         return false;
</span><span class="cx"> 
</span><ins>+    for (int i = 0; i &lt; numChangedLayerProperties; ++i) {
+        GraphicsLayer::PlatformLayerID layerID;
+        if (!decoder.decode(layerID))
+            return false;
+
+        std::unique_ptr&lt;LayerProperties&gt; layerProperties = std::make_unique&lt;LayerProperties&gt;();
+        if (!decoder.decode(*layerProperties))
+            return false;
+
+        result.changedLayers().set(layerID, std::move(layerProperties));
+    }
+
</ins><span class="cx">     if (!decoder.decode(result.m_destroyedLayerIDs))
</span><span class="cx">         return false;
</span><span class="cx"> 
</span><span class="lines">@@ -407,7 +480,7 @@
</span><span class="cx"> 
</span><span class="cx"> void RemoteLayerTreeTransaction::layerPropertiesChanged(PlatformCALayerRemote* remoteLayer, RemoteLayerTreeTransaction::LayerProperties&amp; properties)
</span><span class="cx"> {
</span><del>-    m_changedLayerProperties.set(remoteLayer-&gt;layerID(), properties);
</del><ins>+    m_changedLayerProperties.set(remoteLayer-&gt;layerID(), std::make_unique&lt;RemoteLayerTreeTransaction::LayerProperties&gt;(properties));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RemoteLayerTreeTransaction::setCreatedLayers(Vector&lt;LayerCreationProperties&gt; createdLayers)
</span><span class="lines">@@ -590,7 +663,7 @@
</span><span class="cx">     ts.decreaseIndent();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static void dumpChangedLayers(RemoteLayerTreeTextStream&amp; ts, const HashMap&lt;GraphicsLayer::PlatformLayerID, RemoteLayerTreeTransaction::LayerProperties&gt;&amp; changedLayerProperties)
</del><ins>+static void dumpChangedLayers(RemoteLayerTreeTextStream&amp; ts, const RemoteLayerTreeTransaction::LayerPropertiesMap&amp; changedLayerProperties)
</ins><span class="cx"> {
</span><span class="cx">     if (changedLayerProperties.isEmpty())
</span><span class="cx">         return;
</span><span class="lines">@@ -605,7 +678,7 @@
</span><span class="cx">     std::sort(layerIDs.begin(), layerIDs.end());
</span><span class="cx"> 
</span><span class="cx">     for (auto layerID : layerIDs) {
</span><del>-        const RemoteLayerTreeTransaction::LayerProperties&amp; layerProperties = changedLayerProperties.get(layerID);
</del><ins>+        const RemoteLayerTreeTransaction::LayerProperties&amp; layerProperties = *changedLayerProperties.get(layerID);
</ins><span class="cx"> 
</span><span class="cx">         ts &lt;&lt; &quot;\n&quot;;
</span><span class="cx">         ts.increaseIndent();
</span><span class="lines">@@ -640,10 +713,10 @@
</span><span class="cx">             dumpProperty&lt;float&gt;(ts, &quot;opacity&quot;, layerProperties.opacity);
</span><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::TransformChanged)
</span><del>-            dumpProperty&lt;TransformationMatrix&gt;(ts, &quot;transform&quot;, layerProperties.transform);
</del><ins>+            dumpProperty&lt;TransformationMatrix&gt;(ts, &quot;transform&quot;, layerProperties.transform ? *layerProperties.transform : TransformationMatrix());
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::SublayerTransformChanged)
</span><del>-            dumpProperty&lt;TransformationMatrix&gt;(ts, &quot;sublayerTransform&quot;, layerProperties.sublayerTransform);
</del><ins>+            dumpProperty&lt;TransformationMatrix&gt;(ts, &quot;sublayerTransform&quot;, layerProperties.sublayerTransform ? *layerProperties.sublayerTransform : TransformationMatrix());
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::HiddenChanged)
</span><span class="cx">             dumpProperty&lt;bool&gt;(ts, &quot;hidden&quot;, layerProperties.hidden);
</span><span class="lines">@@ -682,10 +755,10 @@
</span><span class="cx">             dumpProperty&lt;double&gt;(ts, &quot;timeOffset&quot;, layerProperties.timeOffset);
</span><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BackingStoreChanged)
</span><del>-            dumpProperty&lt;IntSize&gt;(ts, &quot;backingStore&quot;, layerProperties.backingStore.size());
</del><ins>+            dumpProperty&lt;IntSize&gt;(ts, &quot;backingStore&quot;, layerProperties.backingStore ? layerProperties.backingStore-&gt;size() : IntSize());
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::FiltersChanged)
</span><del>-            dumpProperty&lt;FilterOperations&gt;(ts, &quot;filters&quot;, layerProperties.filters);
</del><ins>+            dumpProperty&lt;FilterOperations&gt;(ts, &quot;filters&quot;, layerProperties.filters ? *layerProperties.filters : FilterOperations());
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::EdgeAntialiasingMaskChanged)
</span><span class="cx">             dumpProperty&lt;unsigned&gt;(ts, &quot;edgeAntialiasingMask&quot;, layerProperties.edgeAntialiasingMask);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacRemoteLayerTreeHosth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.h (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.h        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.h        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -52,7 +52,7 @@
</span><span class="cx">     bool isDebugLayerTreeHost() const { return m_isDebugLayerTreeHost; }
</span><span class="cx"> 
</span><span class="cx"> private:
</span><del>-    CALayer *createLayer(RemoteLayerTreeTransaction::LayerCreationProperties);
</del><ins>+    CALayer *createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties&amp;);
</ins><span class="cx"> 
</span><span class="cx">     CALayer *m_rootLayer;
</span><span class="cx">     HashMap&lt;WebCore::GraphicsLayer::PlatformLayerID, RetainPtr&lt;CALayer&gt;&gt; m_layers;
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessmacRemoteLayerTreeHostmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/UIProcess/mac/RemoteLayerTreeHost.mm        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -68,7 +68,7 @@
</span><span class="cx"> 
</span><span class="cx">     for (auto&amp; changedLayer : transaction.changedLayers()) {
</span><span class="cx">         auto layerID = changedLayer.key;
</span><del>-        const auto&amp; properties = changedLayer.value;
</del><ins>+        const RemoteLayerTreeTransaction::LayerProperties&amp; properties = *changedLayer.value;
</ins><span class="cx"> 
</span><span class="cx">         CALayer *layer = getLayer(layerID);
</span><span class="cx">         ASSERT(layer);
</span><span class="lines">@@ -107,7 +107,7 @@
</span><span class="cx">     return m_layers.get(layerID).get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-CALayer *RemoteLayerTreeHost::createLayer(RemoteLayerTreeTransaction::LayerCreationProperties properties)
</del><ins>+CALayer *RemoteLayerTreeHost::createLayer(const RemoteLayerTreeTransaction::LayerCreationProperties&amp; properties)
</ins><span class="cx"> {
</span><span class="cx">     RetainPtr&lt;CALayer&gt;&amp; layer = m_layers.add(properties.layerID, nullptr).iterator-&gt;value;
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacPlatformCALayerRemotecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.cpp        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -67,6 +67,15 @@
</span><span class="cx">     return layer.release();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+PassRefPtr&lt;PlatformCALayerRemote&gt; PlatformCALayerRemote::create(const PlatformCALayerRemote&amp; other, WebCore::PlatformCALayerClient* owner, RemoteLayerTreeContext* context)
+{
+    RefPtr&lt;PlatformCALayerRemote&gt; layer = adoptRef(new PlatformCALayerRemote(other, owner, context));
+
+    context-&gt;layerWasCreated(layer.get(), LayerTypeCustom);
+
+    return layer.release();
+}
+
</ins><span class="cx"> PlatformCALayerRemote::PlatformCALayerRemote(LayerType layerType, PlatformCALayerClient* owner, RemoteLayerTreeContext* context)
</span><span class="cx">     : PlatformCALayer(layerType, owner)
</span><span class="cx">     , m_superlayer(nullptr)
</span><span class="lines">@@ -76,11 +85,20 @@
</span><span class="cx"> {
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+PlatformCALayerRemote::PlatformCALayerRemote(const PlatformCALayerRemote&amp; other, PlatformCALayerClient* owner, RemoteLayerTreeContext* context)
+    : PlatformCALayer(other.layerType(), owner)
+    , m_properties(other.m_properties)
+    , m_superlayer(nullptr)
+    , m_maskLayer(nullptr)
+    , m_acceleratesDrawing(other.acceleratesDrawing())
+    , m_context(context)
+{
+}
+
</ins><span class="cx"> PassRefPtr&lt;PlatformCALayer&gt; PlatformCALayerRemote::clone(PlatformCALayerClient* client) const
</span><span class="cx"> {
</span><del>-    RefPtr&lt;PlatformCALayerRemote&gt; clone = PlatformCALayerRemote::create(layerType(), client, m_context);
</del><ins>+    RefPtr&lt;PlatformCALayerRemote&gt; clone = PlatformCALayerRemote::create(*this, client, m_context);
</ins><span class="cx"> 
</span><del>-    clone-&gt;m_properties = m_properties;
</del><span class="cx">     clone-&gt;m_properties.notePropertiesChanged(static_cast&lt;RemoteLayerTreeTransaction::LayerChange&gt;(m_properties.everChangedProperties &amp; ~RemoteLayerTreeTransaction::BackingStoreChanged));
</span><span class="cx"> 
</span><span class="cx">     return clone.release();
</span><span class="lines">@@ -95,7 +113,7 @@
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::recursiveBuildTransaction(RemoteLayerTreeTransaction&amp; transaction)
</span><span class="cx"> {
</span><del>-    if (m_properties.backingStore.display())
</del><ins>+    if (m_properties.backingStore &amp;&amp; m_properties.backingStore-&gt;display())
</ins><span class="cx">         m_properties.notePropertiesChanged(RemoteLayerTreeTransaction::BackingStoreChanged);
</span><span class="cx"> 
</span><span class="cx">     if (m_properties.changedProperties != RemoteLayerTreeTransaction::NoChange) {
</span><span class="lines">@@ -131,7 +149,9 @@
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::ensureBackingStore()
</span><span class="cx"> {
</span><del>-    m_properties.backingStore.ensureBackingStore(this, expandedIntSize(m_properties.size), m_properties.contentsScale, m_acceleratesDrawing);
</del><ins>+    if (!m_properties.backingStore)
+        m_properties.backingStore = std::make_unique&lt;RemoteLayerBackingStore&gt;();
+    m_properties.backingStore-&gt;ensureBackingStore(this, expandedIntSize(m_properties.size), m_properties.contentsScale, m_acceleratesDrawing);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::setNeedsDisplay(const FloatRect* rect)
</span><span class="lines">@@ -139,12 +159,12 @@
</span><span class="cx">     ensureBackingStore();
</span><span class="cx"> 
</span><span class="cx">     if (!rect) {
</span><del>-        m_properties.backingStore.setNeedsDisplay();
</del><ins>+        m_properties.backingStore-&gt;setNeedsDisplay();
</ins><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // FIXME: Need to map this through contentsRect/etc.
</span><del>-    m_properties.backingStore.setNeedsDisplay(enclosingIntRect(*rect));
</del><ins>+    m_properties.backingStore-&gt;setNeedsDisplay(enclosingIntRect(*rect));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::setContentsChanged()
</span><span class="lines">@@ -317,23 +337,23 @@
</span><span class="cx"> 
</span><span class="cx"> TransformationMatrix PlatformCALayerRemote::transform() const
</span><span class="cx"> {
</span><del>-    return m_properties.transform;
</del><ins>+    return m_properties.transform ? *m_properties.transform : TransformationMatrix();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::setTransform(const TransformationMatrix&amp; value)
</span><span class="cx"> {
</span><del>-    m_properties.transform = value;
</del><ins>+    m_properties.transform = std::make_unique&lt;TransformationMatrix&gt;(value);
</ins><span class="cx">     m_properties.notePropertiesChanged(RemoteLayerTreeTransaction::TransformChanged);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> TransformationMatrix PlatformCALayerRemote::sublayerTransform() const
</span><span class="cx"> {
</span><del>-    return m_properties.sublayerTransform;
</del><ins>+    return m_properties.sublayerTransform ? *m_properties.sublayerTransform : TransformationMatrix();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::setSublayerTransform(const TransformationMatrix&amp; value)
</span><span class="cx"> {
</span><del>-    m_properties.sublayerTransform = value;
</del><ins>+    m_properties.sublayerTransform = std::make_unique&lt;TransformationMatrix&gt;(value);
</ins><span class="cx">     m_properties.notePropertiesChanged(RemoteLayerTreeTransaction::SublayerTransformChanged);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -446,7 +466,7 @@
</span><span class="cx"> #if ENABLE(CSS_FILTERS)
</span><span class="cx"> void PlatformCALayerRemote::setFilters(const FilterOperations&amp; filters)
</span><span class="cx"> {
</span><del>-    m_properties.filters = filters;
</del><ins>+    m_properties.filters = std::make_unique&lt;FilterOperations&gt;(filters);
</ins><span class="cx">     m_properties.notePropertiesChanged(RemoteLayerTreeTransaction::FiltersChanged);
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="lines">@@ -521,7 +541,7 @@
</span><span class="cx"> 
</span><span class="cx"> void PlatformCALayerRemote::enumerateRectsBeingDrawn(CGContextRef context, void (^block)(CGRect))
</span><span class="cx"> {
</span><del>-    m_properties.backingStore.enumerateRectsBeingDrawn(context, block);
</del><ins>+    m_properties.backingStore-&gt;enumerateRectsBeingDrawn(context, block);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> uint32_t PlatformCALayerRemote::hostingContextID()
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacPlatformCALayerRemoteh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h (164404 => 164405)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h        2014-02-20 01:16:56 UTC (rev 164404)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCALayerRemote.h        2014-02-20 02:03:37 UTC (rev 164405)
</span><span class="lines">@@ -39,6 +39,7 @@
</span><span class="cx"> public:
</span><span class="cx">     static PassRefPtr&lt;PlatformCALayerRemote&gt; create(WebCore::PlatformCALayer::LayerType, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext*);
</span><span class="cx">     static PassRefPtr&lt;PlatformCALayerRemote&gt; create(PlatformLayer *, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext*);
</span><ins>+    static PassRefPtr&lt;PlatformCALayerRemote&gt; create(const PlatformCALayerRemote&amp;, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext*);
</ins><span class="cx"> 
</span><span class="cx">     virtual ~PlatformCALayerRemote();
</span><span class="cx"> 
</span><span class="lines">@@ -149,6 +150,7 @@
</span><span class="cx"> 
</span><span class="cx"> protected:
</span><span class="cx">     PlatformCALayerRemote(WebCore::PlatformCALayer::LayerType, WebCore::PlatformCALayerClient* owner, RemoteLayerTreeContext* context);
</span><ins>+    PlatformCALayerRemote(const PlatformCALayerRemote&amp;, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext*);
</ins><span class="cx"> 
</span><span class="cx"> private:
</span><span class="cx">     virtual bool isPlatformCALayerRemote() const override { return true; }
</span></span></pre>
</div>
</div>

</body>
</html>