<!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 <simon.fraser@apple.com>
+
+ [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 <bpoulain@apple.com>
</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<WebCore::GraphicsLayer::PlatformLayerID, CALayer *> RelatedLayerMap;
</span><del>- static void applyPropertiesToLayer(CALayer *, RemoteLayerTreeTransaction::LayerProperties, RelatedLayerMap);
</del><ins>+ static void applyPropertiesToLayer(CALayer *, const RemoteLayerTreeTransaction::LayerProperties&, const RelatedLayerMap&);
</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& properties, const RelatedLayerMap& relatedLayers)
</ins><span class="cx"> {
</span><span class="cx"> if (properties.changedProperties & 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 & 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 & 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 & 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 & 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->acceleratesDrawing())
+ layer.contents = (id)properties.backingStore->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->acceleratesDrawing());
</ins><span class="cx"> #endif
</span><del>- layer.contents = (id)properties.backingStore.image().get();
</del><ins>+ layer.contents = properties.backingStore ? (id)properties.backingStore->image().get() : nil;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (properties.changedProperties & 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 & 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& other);
</ins><span class="cx">
</span><span class="cx"> void encode(IPC::ArgumentEncoder&) const;
</span><span class="cx"> static bool decode(IPC::ArgumentDecoder&, LayerProperties&);
</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<WebCore::TransformationMatrix> transform;
+ std::unique_ptr<WebCore::TransformationMatrix> sublayerTransform;
</ins><span class="cx"> Vector<WebCore::GraphicsLayer::PlatformLayerID> 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<RemoteLayerBackingStore> backingStore;
+ std::unique_ptr<WebCore::FilterOperations> 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<WebCore::GraphicsLayer::PlatformLayerID, std::unique_ptr<LayerProperties>> LayerPropertiesMap;
+
</ins><span class="cx"> Vector<LayerCreationProperties> createdLayers() const { return m_createdLayers; }
</span><del>- HashMap<WebCore::GraphicsLayer::PlatformLayerID, LayerProperties> changedLayers() const { return m_changedLayerProperties; }
</del><ins>+ const LayerPropertiesMap& changedLayers() const { return m_changedLayerProperties; }
+ LayerPropertiesMap& changedLayers() { return m_changedLayerProperties; }
</ins><span class="cx"> Vector<WebCore::GraphicsLayer::PlatformLayerID> 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<WebCore::GraphicsLayer::PlatformLayerID, LayerProperties> m_changedLayerProperties;
</del><ins>+ LayerPropertiesMap m_changedLayerProperties;
</ins><span class="cx"> Vector<LayerCreationProperties> m_createdLayers;
</span><span class="cx"> Vector<WebCore::GraphicsLayer::PlatformLayerID> 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& 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<TransformationMatrix>(*other.transform);
+
+ if (other.sublayerTransform)
+ sublayerTransform = std::make_unique<TransformationMatrix>(*other.sublayerTransform);
+
+ if (other.backingStore)
+ backingStore = std::make_unique<RemoteLayerBackingStore>(*other.backingStore);
+
+ if (other.filters)
+ filters = std::make_unique<FilterOperations>(*other.filters);
+}
+
</ins><span class="cx"> void RemoteLayerTreeTransaction::LayerProperties::encode(IPC::ArgumentEncoder& 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 << opacity;
</span><span class="cx">
</span><span class="cx"> if (changedProperties & TransformChanged)
</span><del>- encoder << transform;
</del><ins>+ encoder << *transform;
</ins><span class="cx">
</span><span class="cx"> if (changedProperties & SublayerTransformChanged)
</span><del>- encoder << sublayerTransform;
</del><ins>+ encoder << *sublayerTransform;
</ins><span class="cx">
</span><span class="cx"> if (changedProperties & HiddenChanged)
</span><span class="cx"> encoder << hidden;
</span><span class="lines">@@ -168,13 +208,13 @@
</span><span class="cx"> encoder << timeOffset;
</span><span class="cx">
</span><span class="cx"> if (changedProperties & BackingStoreChanged) {
</span><del>- encoder << backingStore.hasFrontBuffer();
- if (backingStore.hasFrontBuffer())
- encoder << backingStore;
</del><ins>+ encoder << backingStore->hasFrontBuffer();
+ if (backingStore->hasFrontBuffer())
+ encoder << *backingStore;
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (changedProperties & FiltersChanged)
</span><del>- encoder << filters;
</del><ins>+ encoder << *filters;
</ins><span class="cx">
</span><span class="cx"> if (changedProperties & EdgeAntialiasingMaskChanged)
</span><span class="cx"> encoder << edgeAntialiasingMask;
</span><span class="lines">@@ -239,13 +279,19 @@
</span><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (result.changedProperties & 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<TransformationMatrix>(transform);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (result.changedProperties & 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<TransformationMatrix>(transform);
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (result.changedProperties & 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 && !decoder.decode(result.backingStore))
- return false;
</del><ins>+ if (hasFrontBuffer) {
+ RemoteLayerBackingStore backingStore;
+ if (!decoder.decode(backingStore))
+ return false;
+
+ result.backingStore = std::make_unique<RemoteLayerBackingStore>(backingStore);
+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> if (result.changedProperties & FiltersChanged) {
</span><del>- if (!decoder.decode(result.filters))
</del><ins>+ std::unique_ptr<FilterOperations> filters = std::make_unique<FilterOperations>();
+ 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 & EdgeAntialiasingMaskChanged) {
</span><span class="lines">@@ -346,7 +399,14 @@
</span><span class="cx"> {
</span><span class="cx"> encoder << m_rootLayerID;
</span><span class="cx"> encoder << m_createdLayers;
</span><del>- encoder << m_changedLayerProperties;
</del><ins>+
+ encoder << m_changedLayerProperties.size();
+
+ for (const auto& layerProperties : m_changedLayerProperties) {
+ encoder << layerProperties.key;
+ encoder << *layerProperties.value;
+ }
+
</ins><span class="cx"> encoder << m_destroyedLayerIDs;
</span><span class="cx"> encoder << m_contentsSize;
</span><span class="cx"> encoder << 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 < numChangedLayerProperties; ++i) {
+ GraphicsLayer::PlatformLayerID layerID;
+ if (!decoder.decode(layerID))
+ return false;
+
+ std::unique_ptr<LayerProperties> layerProperties = std::make_unique<LayerProperties>();
+ 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& properties)
</span><span class="cx"> {
</span><del>- m_changedLayerProperties.set(remoteLayer->layerID(), properties);
</del><ins>+ m_changedLayerProperties.set(remoteLayer->layerID(), std::make_unique<RemoteLayerTreeTransaction::LayerProperties>(properties));
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> void RemoteLayerTreeTransaction::setCreatedLayers(Vector<LayerCreationProperties> 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& ts, const HashMap<GraphicsLayer::PlatformLayerID, RemoteLayerTreeTransaction::LayerProperties>& changedLayerProperties)
</del><ins>+static void dumpChangedLayers(RemoteLayerTreeTextStream& ts, const RemoteLayerTreeTransaction::LayerPropertiesMap& 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& layerProperties = changedLayerProperties.get(layerID);
</del><ins>+ const RemoteLayerTreeTransaction::LayerProperties& layerProperties = *changedLayerProperties.get(layerID);
</ins><span class="cx">
</span><span class="cx"> ts << "\n";
</span><span class="cx"> ts.increaseIndent();
</span><span class="lines">@@ -640,10 +713,10 @@
</span><span class="cx"> dumpProperty<float>(ts, "opacity", layerProperties.opacity);
</span><span class="cx">
</span><span class="cx"> if (layerProperties.changedProperties & RemoteLayerTreeTransaction::TransformChanged)
</span><del>- dumpProperty<TransformationMatrix>(ts, "transform", layerProperties.transform);
</del><ins>+ dumpProperty<TransformationMatrix>(ts, "transform", layerProperties.transform ? *layerProperties.transform : TransformationMatrix());
</ins><span class="cx">
</span><span class="cx"> if (layerProperties.changedProperties & RemoteLayerTreeTransaction::SublayerTransformChanged)
</span><del>- dumpProperty<TransformationMatrix>(ts, "sublayerTransform", layerProperties.sublayerTransform);
</del><ins>+ dumpProperty<TransformationMatrix>(ts, "sublayerTransform", layerProperties.sublayerTransform ? *layerProperties.sublayerTransform : TransformationMatrix());
</ins><span class="cx">
</span><span class="cx"> if (layerProperties.changedProperties & RemoteLayerTreeTransaction::HiddenChanged)
</span><span class="cx"> dumpProperty<bool>(ts, "hidden", layerProperties.hidden);
</span><span class="lines">@@ -682,10 +755,10 @@
</span><span class="cx"> dumpProperty<double>(ts, "timeOffset", layerProperties.timeOffset);
</span><span class="cx">
</span><span class="cx"> if (layerProperties.changedProperties & RemoteLayerTreeTransaction::BackingStoreChanged)
</span><del>- dumpProperty<IntSize>(ts, "backingStore", layerProperties.backingStore.size());
</del><ins>+ dumpProperty<IntSize>(ts, "backingStore", layerProperties.backingStore ? layerProperties.backingStore->size() : IntSize());
</ins><span class="cx">
</span><span class="cx"> if (layerProperties.changedProperties & RemoteLayerTreeTransaction::FiltersChanged)
</span><del>- dumpProperty<FilterOperations>(ts, "filters", layerProperties.filters);
</del><ins>+ dumpProperty<FilterOperations>(ts, "filters", layerProperties.filters ? *layerProperties.filters : FilterOperations());
</ins><span class="cx">
</span><span class="cx"> if (layerProperties.changedProperties & RemoteLayerTreeTransaction::EdgeAntialiasingMaskChanged)
</span><span class="cx"> dumpProperty<unsigned>(ts, "edgeAntialiasingMask", 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&);
</ins><span class="cx">
</span><span class="cx"> CALayer *m_rootLayer;
</span><span class="cx"> HashMap<WebCore::GraphicsLayer::PlatformLayerID, RetainPtr<CALayer>> 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& changedLayer : transaction.changedLayers()) {
</span><span class="cx"> auto layerID = changedLayer.key;
</span><del>- const auto& properties = changedLayer.value;
</del><ins>+ const RemoteLayerTreeTransaction::LayerProperties& 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& properties)
</ins><span class="cx"> {
</span><span class="cx"> RetainPtr<CALayer>& layer = m_layers.add(properties.layerID, nullptr).iterator->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<PlatformCALayerRemote> PlatformCALayerRemote::create(const PlatformCALayerRemote& other, WebCore::PlatformCALayerClient* owner, RemoteLayerTreeContext* context)
+{
+ RefPtr<PlatformCALayerRemote> layer = adoptRef(new PlatformCALayerRemote(other, owner, context));
+
+ context->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& 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<PlatformCALayer> PlatformCALayerRemote::clone(PlatformCALayerClient* client) const
</span><span class="cx"> {
</span><del>- RefPtr<PlatformCALayerRemote> clone = PlatformCALayerRemote::create(layerType(), client, m_context);
</del><ins>+ RefPtr<PlatformCALayerRemote> clone = PlatformCALayerRemote::create(*this, client, m_context);
</ins><span class="cx">
</span><del>- clone->m_properties = m_properties;
</del><span class="cx"> clone->m_properties.notePropertiesChanged(static_cast<RemoteLayerTreeTransaction::LayerChange>(m_properties.everChangedProperties & ~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& transaction)
</span><span class="cx"> {
</span><del>- if (m_properties.backingStore.display())
</del><ins>+ if (m_properties.backingStore && m_properties.backingStore->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<RemoteLayerBackingStore>();
+ m_properties.backingStore->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->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->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& value)
</span><span class="cx"> {
</span><del>- m_properties.transform = value;
</del><ins>+ m_properties.transform = std::make_unique<TransformationMatrix>(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& value)
</span><span class="cx"> {
</span><del>- m_properties.sublayerTransform = value;
</del><ins>+ m_properties.sublayerTransform = std::make_unique<TransformationMatrix>(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& filters)
</span><span class="cx"> {
</span><del>- m_properties.filters = filters;
</del><ins>+ m_properties.filters = std::make_unique<FilterOperations>(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->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<PlatformCALayerRemote> create(WebCore::PlatformCALayer::LayerType, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext*);
</span><span class="cx"> static PassRefPtr<PlatformCALayerRemote> create(PlatformLayer *, WebCore::PlatformCALayerClient*, RemoteLayerTreeContext*);
</span><ins>+ static PassRefPtr<PlatformCALayerRemote> create(const PlatformCALayerRemote&, 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&, 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>