<!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>[191243] trunk/Source</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta">
<dt>Revision</dt> <dd><a href="http://trac.webkit.org/projects/webkit/changeset/191243">191243</a></dd>
<dt>Author</dt> <dd>simon.fraser@apple.com</dd>
<dt>Date</dt> <dd>2015-10-17 11:34:19 -0700 (Sat, 17 Oct 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>Enhance TextStream for logging, remove subclasses, log more things
https://bugs.webkit.org/show_bug.cgi?id=150269

Reviewed by Zalan Bujtas.

Remove the various TextStream subclasses that only existed to support indenting,
and output additional types. Add output for more WebCore and WebKit2 types, and
just use TextStream everywhere.

TextStream is enhance to support grouping (open paren and intent), with a
stack-based class to open/end a group.

Remove some SVG-specific duplicate output functions.

Outdent namespace contents of GraphicsTypes.h.
Source/WebCore:

* CMakeLists.txt:
* WebCore.xcodeproj/project.pbxproj:
* dom/ViewportArguments.cpp:
(WebCore::operator&lt;&lt;):
* dom/ViewportArguments.h:
* page/ViewportConfiguration.cpp:
(WebCore::operator&lt;&lt;):
(WebCore::ViewportConfiguration::description):
(WebCore::ViewportConfigurationTextStream::ViewportConfigurationTextStream): Deleted.
(WebCore::ViewportConfigurationTextStream::increaseIndent): Deleted.
(WebCore::ViewportConfigurationTextStream::decreaseIndent): Deleted.
(WebCore::dumpProperty): Deleted.
(WebCore::ViewportConfigurationTextStream::writeIndent): Deleted.
(WebCore::ViewportConfigurationTextStream::operator&lt;&lt;): Deleted.
* page/ViewportConfiguration.h:
* page/scrolling/ScrollingConstraints.cpp:
(WebCore::operator&lt;&lt;):
* page/scrolling/ScrollingConstraints.h:
* page/scrolling/ScrollingCoordinator.cpp:
(WebCore::operator&lt;&lt;):
* page/scrolling/ScrollingCoordinator.h:
* platform/animation/TimingFunction.cpp: Added.
(WebCore::operator&lt;&lt;):
* platform/animation/TimingFunction.h:
* platform/graphics/Color.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/Color.h:
* platform/graphics/FloatPoint3D.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/FloatPoint3D.h:
* platform/graphics/FloatRoundedRect.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/FloatRoundedRect.h:
* platform/graphics/GraphicsLayer.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/GraphicsLayer.h:
* platform/graphics/GraphicsTypes.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/GraphicsTypes.h:
* platform/graphics/ca/PlatformCAAnimation.cpp: Added.
(WebCore::operator&lt;&lt;):
* platform/graphics/ca/PlatformCAAnimation.h:
* platform/graphics/ca/PlatformCALayer.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/ca/PlatformCALayer.h:
* platform/graphics/filters/FilterOperation.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/filters/FilterOperation.h:
* platform/graphics/filters/FilterOperations.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/filters/FilterOperations.h:
* platform/graphics/filters/PointLightSource.cpp:
(WebCore::operator&lt;&lt;): Deleted.
* platform/graphics/filters/SpotLightSource.cpp:
(WebCore::operator&lt;&lt;): Deleted.
* platform/graphics/transforms/AffineTransform.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/transforms/AffineTransform.h:
* platform/graphics/transforms/TransformationMatrix.cpp:
(WebCore::operator&lt;&lt;):
* platform/graphics/transforms/TransformationMatrix.h:
* platform/text/TextStream.cpp:
(WebCore::TextStream::startGroup):
(WebCore::TextStream::endGroup):
(WebCore::TextStream::nextLine):
(WebCore::TextStream::writeIndent):
* platform/text/TextStream.h:
(WebCore::TextStream::operator&lt;&lt;):
(WebCore::TextStream::dumpProperty):
(WebCore::TextStream::increaseIndent):
(WebCore::TextStream::decreaseIndent):
(WebCore::TextStream::GroupScope::GroupScope):
(WebCore::TextStream::GroupScope::~GroupScope):
* rendering/svg/SVGRenderTreeAsText.cpp:
(WebCore::operator&lt;&lt;): Deleted.
* rendering/svg/SVGRenderTreeAsText.h:

Source/WebKit2:

* Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
(WebKit::dump):
(WebKit::recursiveDumpNodes):
(WebKit::RemoteScrollingCoordinatorTransaction::description):
(WebKit::RemoteScrollingTreeTextStream::RemoteScrollingTreeTextStream): Deleted.
(WebKit::RemoteScrollingTreeTextStream::increaseIndent): Deleted.
(WebKit::RemoteScrollingTreeTextStream::decreaseIndent): Deleted.
(WebKit::RemoteScrollingTreeTextStream::writeIndent): Deleted.
(WebKit::dumpProperty): Deleted.
(WebKit::RemoteScrollingTreeTextStream::operator&lt;&lt;): Deleted.
(WebKit::RemoteScrollingTreeTextStream::dump): Deleted.
(WebKit::RemoteScrollingTreeTextStream::recursiveDumpNodes): Deleted.
* Shared/mac/RemoteLayerTreeTransaction.mm:
(WebKit::operator&lt;&lt;):
(WebKit::dumpChangedLayers):
(WebKit::RemoteLayerTreeTransaction::description):
(WebKit::RemoteLayerTreeTextStream::RemoteLayerTreeTextStream): Deleted.
(WebKit::RemoteLayerTreeTextStream::increaseIndent): Deleted.
(WebKit::RemoteLayerTreeTextStream::decreaseIndent): Deleted.
(WebKit::dumpProperty): Deleted.
(WebKit::RemoteLayerTreeTextStream::operator&lt;&lt;): Deleted.
(WebKit::RemoteLayerTreeTextStream::writeIndent): Deleted.
* WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
* WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
(WebKit::operator&lt;&lt;):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreCMakeListstxt">trunk/Source/WebCore/CMakeLists.txt</a></li>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreWebCorexcodeprojprojectpbxproj">trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj</a></li>
<li><a href="#trunkSourceWebCoredomViewportArgumentscpp">trunk/Source/WebCore/dom/ViewportArguments.cpp</a></li>
<li><a href="#trunkSourceWebCoredomViewportArgumentsh">trunk/Source/WebCore/dom/ViewportArguments.h</a></li>
<li><a href="#trunkSourceWebCorepageViewportConfigurationcpp">trunk/Source/WebCore/page/ViewportConfiguration.cpp</a></li>
<li><a href="#trunkSourceWebCorepageViewportConfigurationh">trunk/Source/WebCore/page/ViewportConfiguration.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingConstraintscpp">trunk/Source/WebCore/page/scrolling/ScrollingConstraints.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingConstraintsh">trunk/Source/WebCore/page/scrolling/ScrollingConstraints.h</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingCoordinatorcpp">trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp</a></li>
<li><a href="#trunkSourceWebCorepagescrollingScrollingCoordinatorh">trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h</a></li>
<li><a href="#trunkSourceWebCoreplatformanimationTimingFunctionh">trunk/Source/WebCore/platform/animation/TimingFunction.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsColorcpp">trunk/Source/WebCore/platform/graphics/Color.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsColorh">trunk/Source/WebCore/platform/graphics/Color.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFloatPoint3Dcpp">trunk/Source/WebCore/platform/graphics/FloatPoint3D.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFloatPoint3Dh">trunk/Source/WebCore/platform/graphics/FloatPoint3D.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFloatRoundedRectcpp">trunk/Source/WebCore/platform/graphics/FloatRoundedRect.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsFloatRoundedRecth">trunk/Source/WebCore/platform/graphics/FloatRoundedRect.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayercpp">trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsLayerh">trunk/Source/WebCore/platform/graphics/GraphicsLayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsTypescpp">trunk/Source/WebCore/platform/graphics/GraphicsTypes.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsGraphicsTypesh">trunk/Source/WebCore/platform/graphics/GraphicsTypes.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCAAnimationh">trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCALayercpp">trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCALayerh">trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfiltersFilterOperationcpp">trunk/Source/WebCore/platform/graphics/filters/FilterOperation.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfiltersFilterOperationh">trunk/Source/WebCore/platform/graphics/filters/FilterOperation.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfiltersFilterOperationscpp">trunk/Source/WebCore/platform/graphics/filters/FilterOperations.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfiltersFilterOperationsh">trunk/Source/WebCore/platform/graphics/filters/FilterOperations.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfiltersPointLightSourcecpp">trunk/Source/WebCore/platform/graphics/filters/PointLightSource.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicsfiltersSpotLightSourcecpp">trunk/Source/WebCore/platform/graphics/filters/SpotLightSource.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstransformsAffineTransformcpp">trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstransformsAffineTransformh">trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstransformsTransformationMatrixcpp">trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicstransformsTransformationMatrixh">trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h</a></li>
<li><a href="#trunkSourceWebCoreplatformtextTextStreamcpp">trunk/Source/WebCore/platform/text/TextStream.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformtextTextStreamh">trunk/Source/WebCore/platform/text/TextStream.h</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGRenderTreeAsTextcpp">trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp</a></li>
<li><a href="#trunkSourceWebCorerenderingsvgSVGRenderTreeAsTexth">trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.h</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedScrollingRemoteScrollingCoordinatorTransactioncpp">trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm">trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacPlatformCAAnimationRemoteh">trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPagemacPlatformCAAnimationRemotemm">trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreplatformanimationTimingFunctioncpp">trunk/Source/WebCore/platform/animation/TimingFunction.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCAAnimationcpp">trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreCMakeListstxt"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/CMakeLists.txt (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/CMakeLists.txt        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/CMakeLists.txt        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -2139,6 +2139,7 @@
</span><span class="cx"> 
</span><span class="cx">     platform/animation/Animation.cpp
</span><span class="cx">     platform/animation/AnimationList.cpp
</span><ins>+    platform/animation/TimingFunction.cpp
</ins><span class="cx"> 
</span><span class="cx">     platform/audio/AudioBus.cpp
</span><span class="cx">     platform/audio/AudioChannel.cpp
</span></span></pre></div>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/ChangeLog        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -1,3 +1,98 @@
</span><ins>+2015-10-16  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Enhance TextStream for logging, remove subclasses, log more things
+        https://bugs.webkit.org/show_bug.cgi?id=150269
+
+        Reviewed by Zalan Bujtas.
+
+        Remove the various TextStream subclasses that only existed to support indenting,
+        and output additional types. Add output for more WebCore and WebKit2 types, and
+        just use TextStream everywhere.
+        
+        TextStream is enhance to support grouping (open paren and intent), with a 
+        stack-based class to open/end a group.
+        
+        Remove some SVG-specific duplicate output functions.
+        
+        Outdent namespace contents of GraphicsTypes.h.
+        
+        * CMakeLists.txt:
+        * WebCore.xcodeproj/project.pbxproj:
+        * dom/ViewportArguments.cpp:
+        (WebCore::operator&lt;&lt;):
+        * dom/ViewportArguments.h:
+        * page/ViewportConfiguration.cpp:
+        (WebCore::operator&lt;&lt;):
+        (WebCore::ViewportConfiguration::description):
+        (WebCore::ViewportConfigurationTextStream::ViewportConfigurationTextStream): Deleted.
+        (WebCore::ViewportConfigurationTextStream::increaseIndent): Deleted.
+        (WebCore::ViewportConfigurationTextStream::decreaseIndent): Deleted.
+        (WebCore::dumpProperty): Deleted.
+        (WebCore::ViewportConfigurationTextStream::writeIndent): Deleted.
+        (WebCore::ViewportConfigurationTextStream::operator&lt;&lt;): Deleted.
+        * page/ViewportConfiguration.h:
+        * page/scrolling/ScrollingConstraints.cpp:
+        (WebCore::operator&lt;&lt;):
+        * page/scrolling/ScrollingConstraints.h:
+        * page/scrolling/ScrollingCoordinator.cpp:
+        (WebCore::operator&lt;&lt;):
+        * page/scrolling/ScrollingCoordinator.h:
+        * platform/animation/TimingFunction.cpp: Added.
+        (WebCore::operator&lt;&lt;):
+        * platform/animation/TimingFunction.h:
+        * platform/graphics/Color.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/Color.h:
+        * platform/graphics/FloatPoint3D.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/FloatPoint3D.h:
+        * platform/graphics/FloatRoundedRect.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/FloatRoundedRect.h:
+        * platform/graphics/GraphicsLayer.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/GraphicsLayer.h:
+        * platform/graphics/GraphicsTypes.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/GraphicsTypes.h:
+        * platform/graphics/ca/PlatformCAAnimation.cpp: Added.
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/ca/PlatformCAAnimation.h:
+        * platform/graphics/ca/PlatformCALayer.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/ca/PlatformCALayer.h:
+        * platform/graphics/filters/FilterOperation.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/filters/FilterOperation.h:
+        * platform/graphics/filters/FilterOperations.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/filters/FilterOperations.h:
+        * platform/graphics/filters/PointLightSource.cpp:
+        (WebCore::operator&lt;&lt;): Deleted.
+        * platform/graphics/filters/SpotLightSource.cpp:
+        (WebCore::operator&lt;&lt;): Deleted.
+        * platform/graphics/transforms/AffineTransform.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/transforms/AffineTransform.h:
+        * platform/graphics/transforms/TransformationMatrix.cpp:
+        (WebCore::operator&lt;&lt;):
+        * platform/graphics/transforms/TransformationMatrix.h:
+        * platform/text/TextStream.cpp:
+        (WebCore::TextStream::startGroup):
+        (WebCore::TextStream::endGroup):
+        (WebCore::TextStream::nextLine):
+        (WebCore::TextStream::writeIndent):
+        * platform/text/TextStream.h:
+        (WebCore::TextStream::operator&lt;&lt;):
+        (WebCore::TextStream::dumpProperty):
+        (WebCore::TextStream::increaseIndent):
+        (WebCore::TextStream::decreaseIndent):
+        (WebCore::TextStream::GroupScope::GroupScope):
+        (WebCore::TextStream::GroupScope::~GroupScope):
+        * rendering/svg/SVGRenderTreeAsText.cpp:
+        (WebCore::operator&lt;&lt;): Deleted.
+        * rendering/svg/SVGRenderTreeAsText.h:
+
</ins><span class="cx"> 2015-10-17  Youenn Fablet  &lt;youenn.fablet@crf.canon.fr&gt;
</span><span class="cx"> 
</span><span class="cx">         Finalize bug 149952 patch
</span></span></pre></div>
<a id="trunkSourceWebCoreWebCorexcodeprojprojectpbxproj"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -480,8 +480,8 @@
</span><span class="cx">                 0F15ED5C1B7EC7C500EDDFEB /* WillChangeData.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F15ED5A1B7EC7C500EDDFEB /* WillChangeData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 0F1774801378B772009DA76A /* ScrollAnimatorIOS.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F17747E1378B771009DA76A /* ScrollAnimatorIOS.h */; };
</span><span class="cx">                 0F1774811378B772009DA76A /* ScrollAnimatorIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0F17747F1378B772009DA76A /* ScrollAnimatorIOS.mm */; };
</span><del>-                0F36E7371BD1837A002DB891 /* LayoutPoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F36E7361BD1837A002DB891 /* LayoutPoint.cpp */; settings = {ASSET_TAGS = (); }; };
-                0F36E7391BD184B9002DB891 /* LayoutSize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F36E7381BD184B9002DB891 /* LayoutSize.cpp */; settings = {ASSET_TAGS = (); }; };
</del><ins>+                0F36E7371BD1837A002DB891 /* LayoutPoint.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F36E7361BD1837A002DB891 /* LayoutPoint.cpp */; };
+                0F36E7391BD184B9002DB891 /* LayoutSize.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F36E7381BD184B9002DB891 /* LayoutSize.cpp */; };
</ins><span class="cx">                 0F3C725E1974874B00AEDD0C /* ImageSource.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F3C725D1974874B00AEDD0C /* ImageSource.cpp */; };
</span><span class="cx">                 0F3DD44F12F5EA1B000D9190 /* ShadowBlur.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0F3DD44D12F5EA1B000D9190 /* ShadowBlur.cpp */; };
</span><span class="cx">                 0F3DD45012F5EA1B000D9190 /* ShadowBlur.h in Headers */ = {isa = PBXBuildFile; fileRef = 0F3DD44E12F5EA1B000D9190 /* ShadowBlur.h */; };
</span><span class="lines">@@ -566,6 +566,8 @@
</span><span class="cx">                 0FDA7C23188330A900C954B5 /* DragImageIOS.mm in Sources */ = {isa = PBXBuildFile; fileRef = 0FDA7C22188330A900C954B5 /* DragImageIOS.mm */; };
</span><span class="cx">                 0FDA7C261883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FDA7C241883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.cpp */; };
</span><span class="cx">                 0FDA7C271883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FDA7C251883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.h */; };
</span><ins>+                0FDF45A71BD1C6FD00E4FA8C /* PlatformCAAnimation.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FDF45A61BD1C6FD00E4FA8C /* PlatformCAAnimation.cpp */; };
+                0FDF45A91BD1C82500E4FA8C /* TimingFunction.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FDF45A81BD1C82500E4FA8C /* TimingFunction.cpp */; };
</ins><span class="cx">                 0FE5806319327A6200DE32EB /* ScrollingTreeMac.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FE5806119327A6200DE32EB /* ScrollingTreeMac.cpp */; };
</span><span class="cx">                 0FE5806419327A6200DE32EB /* ScrollingTreeMac.h in Headers */ = {isa = PBXBuildFile; fileRef = 0FE5806219327A6200DE32EB /* ScrollingTreeMac.h */; };
</span><span class="cx">                 0FE71405142170B800DB33BA /* ScrollbarThemeMock.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0FE71403142170B800DB33BA /* ScrollbarThemeMock.cpp */; };
</span><span class="lines">@@ -5285,10 +5287,10 @@
</span><span class="cx">                 BC128B01137C8D4600CAC845 /* RenderGrid.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC128B00137C8D4600CAC845 /* RenderGrid.cpp */; };
</span><span class="cx">                 BC14028A0E83680800319717 /* ScrollbarThemeComposite.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1402880E83680800319717 /* ScrollbarThemeComposite.cpp */; };
</span><span class="cx">                 BC14028B0E83680800319717 /* ScrollbarThemeComposite.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1402890E83680800319717 /* ScrollbarThemeComposite.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                BC1790BB1BB5AB3F0006D13E /* CSSVariableDependentValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1790BA1BB5AB3F0006D13E /* CSSVariableDependentValue.h */; settings = {ASSET_TAGS = (); }; };
-                BC1790BD1BBB36A80006D13E /* CSSVariableDependentValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1790BC1BBB36A80006D13E /* CSSVariableDependentValue.cpp */; settings = {ASSET_TAGS = (); }; };
-                BC1790C01BBF2C430006D13E /* CSSVariableValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1790BE1BBF2C430006D13E /* CSSVariableValue.cpp */; settings = {ASSET_TAGS = (); }; };
-                BC1790C11BBF2C430006D13E /* CSSVariableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1790BF1BBF2C430006D13E /* CSSVariableValue.h */; settings = {ASSET_TAGS = (); }; };
</del><ins>+                BC1790BB1BB5AB3F0006D13E /* CSSVariableDependentValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1790BA1BB5AB3F0006D13E /* CSSVariableDependentValue.h */; };
+                BC1790BD1BBB36A80006D13E /* CSSVariableDependentValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1790BC1BBB36A80006D13E /* CSSVariableDependentValue.cpp */; };
+                BC1790C01BBF2C430006D13E /* CSSVariableValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC1790BE1BBF2C430006D13E /* CSSVariableValue.cpp */; };
+                BC1790C11BBF2C430006D13E /* CSSVariableValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1790BF1BBF2C430006D13E /* CSSVariableValue.h */; };
</ins><span class="cx">                 BC17F9660B64EBB8004A65CB /* JSHTMLSelectElementCustom.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC17F9650B64EBB8004A65CB /* JSHTMLSelectElementCustom.cpp */; };
</span><span class="cx">                 BC1A37AD097C715F0019F3D8 /* DOM.h in Headers */ = {isa = PBXBuildFile; fileRef = BC1A3797097C715F0019F3D8 /* DOM.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 BC1A37AE097C715F0019F3D8 /* DOM.mm in Sources */ = {isa = PBXBuildFile; fileRef = BC1A3798097C715F0019F3D8 /* DOM.mm */; };
</span><span class="lines">@@ -5489,8 +5491,8 @@
</span><span class="cx">                 BC772E16133162C2001EC9CE /* CSSLineBoxContainValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC772E15133162C2001EC9CE /* CSSLineBoxContainValue.cpp */; };
</span><span class="cx">                 BC779E141BB215BB00CAA8BF /* CSSCustomPropertyValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC779E131BB215BB00CAA8BF /* CSSCustomPropertyValue.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 BC779E171BB227CA00CAA8BF /* StyleCustomPropertyData.h in Headers */ = {isa = PBXBuildFile; fileRef = BC779E151BB226A200CAA8BF /* StyleCustomPropertyData.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><del>-                BC7D8FEF1BD03B6400FFE540 /* CSSUnsetValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7D8FED1BD03B6400FFE540 /* CSSUnsetValue.cpp */; settings = {ASSET_TAGS = (); }; };
-                BC7D8FF01BD03B6400FFE540 /* CSSUnsetValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7D8FEE1BD03B6400FFE540 /* CSSUnsetValue.h */; settings = {ASSET_TAGS = (); }; };
</del><ins>+                BC7D8FEF1BD03B6400FFE540 /* CSSUnsetValue.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7D8FED1BD03B6400FFE540 /* CSSUnsetValue.cpp */; };
+                BC7D8FF01BD03B6400FFE540 /* CSSUnsetValue.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7D8FEE1BD03B6400FFE540 /* CSSUnsetValue.h */; };
</ins><span class="cx">                 BC7F44A80B9E324E00A9D081 /* ImageObserver.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7F44A70B9E324E00A9D081 /* ImageObserver.h */; settings = {ATTRIBUTES = (Private, ); }; };
</span><span class="cx">                 BC7FA6200D1F0CBD00DB22A9 /* LiveNodeList.cpp in Sources */ = {isa = PBXBuildFile; fileRef = BC7FA61E0D1F0CBD00DB22A9 /* LiveNodeList.cpp */; };
</span><span class="cx">                 BC7FA6210D1F0CBD00DB22A9 /* LiveNodeList.h in Headers */ = {isa = PBXBuildFile; fileRef = BC7FA61F0D1F0CBD00DB22A9 /* LiveNodeList.h */; };
</span><span class="lines">@@ -6477,7 +6479,7 @@
</span><span class="cx">                 E4B65A5A132FAAF90070E7BE /* LegacyTileGrid.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4B65A59132FAAF90070E7BE /* LegacyTileGrid.mm */; };
</span><span class="cx">                 E4B65A5C132FACB00070E7BE /* LegacyTileLayer.h in Headers */ = {isa = PBXBuildFile; fileRef = E4B65A5B132FACB00070E7BE /* LegacyTileLayer.h */; };
</span><span class="cx">                 E4B65A5E132FADB60070E7BE /* LegacyTileLayer.mm in Sources */ = {isa = PBXBuildFile; fileRef = E4B65A5D132FADB60070E7BE /* LegacyTileLayer.mm */; };
</span><del>-                E4BA50901BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E4BA508F1BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h */; settings = {ASSET_TAGS = (); }; };
</del><ins>+                E4BA50901BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h in Headers */ = {isa = PBXBuildFile; fileRef = E4BA508F1BCFBD9500E34EF7 /* ComposedTreeAncestorIterator.h */; };
</ins><span class="cx">                 E4BBED0E14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4BBED0C14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.cpp */; };
</span><span class="cx">                 E4BBED0F14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.h in Headers */ = {isa = PBXBuildFile; fileRef = E4BBED0D14F4025D003F0B98 /* PropertySetCSSStyleDeclaration.h */; };
</span><span class="cx">                 E4BBED4C14FCDBA1003F0B98 /* StyleRule.cpp in Sources */ = {isa = PBXBuildFile; fileRef = E4BBED4A14FCDBA1003F0B98 /* StyleRule.cpp */; };
</span><span class="lines">@@ -7797,6 +7799,8 @@
</span><span class="cx">                 0FDA7C22188330A900C954B5 /* DragImageIOS.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = DragImageIOS.mm; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FDA7C241883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = JSWebKitPlaybackTargetAvailabilityEvent.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FDA7C251883333200C954B5 /* JSWebKitPlaybackTargetAvailabilityEvent.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = JSWebKitPlaybackTargetAvailabilityEvent.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><ins>+                0FDF45A61BD1C6FD00E4FA8C /* PlatformCAAnimation.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = PlatformCAAnimation.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
+                0FDF45A81BD1C82500E4FA8C /* TimingFunction.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = TimingFunction.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</ins><span class="cx">                 0FE5806119327A6200DE32EB /* ScrollingTreeMac.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollingTreeMac.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FE5806219327A6200DE32EB /* ScrollingTreeMac.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = ScrollingTreeMac.h; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="cx">                 0FE71403142170B800DB33BA /* ScrollbarThemeMock.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = ScrollbarThemeMock.cpp; sourceTree = &quot;&lt;group&gt;&quot;; };
</span><span class="lines">@@ -16643,6 +16647,7 @@
</span><span class="cx">                                 2917B5601473496C0052C9D0 /* LayerFlushSchedulerClient.h */,
</span><span class="cx">                                 7AA3A69D194B59B6001CBD24 /* LayerPool.cpp */,
</span><span class="cx">                                 7AA3A69E194B59B6001CBD24 /* LayerPool.h */,
</span><ins>+                                0FDF45A61BD1C6FD00E4FA8C /* PlatformCAAnimation.cpp */,
</ins><span class="cx">                                 499B3EDC128DB50100E726C2 /* PlatformCAAnimation.h */,
</span><span class="cx">                                 0F13163D16ED0CC80035CC04 /* PlatformCAFilters.h */,
</span><span class="cx">                                 2D70BA1418074F850001908A /* PlatformCALayer.cpp */,
</span><span class="lines">@@ -16699,6 +16704,7 @@
</span><span class="cx">                                 49E912A80EFAC906009D0CAF /* AnimationList.h */,
</span><span class="cx">                                 31DCD29C1AB4FBDE0072E817 /* AnimationTrigger.h */,
</span><span class="cx">                                 0F580FAE149800D400FB5BD8 /* AnimationUtilities.h */,
</span><ins>+                                0FDF45A81BD1C82500E4FA8C /* TimingFunction.cpp */,
</ins><span class="cx">                                 49E912A90EFAC906009D0CAF /* TimingFunction.h */,
</span><span class="cx">                         );
</span><span class="cx">                         path = animation;
</span><span class="lines">@@ -28674,6 +28680,7 @@
</span><span class="cx">                                 BCD0FBD00DBD625E00B2F630 /* DOMAbstractView.mm in Sources */,
</span><span class="cx">                                 319848091A1E6CBF00A13318 /* DOMAnimationEvent.mm in Sources */,
</span><span class="cx">                                 1A8F6BC20DB55CDC001DB794 /* DOMApplicationCache.cpp in Sources */,
</span><ins>+                                0FDF45A71BD1C6FD00E4FA8C /* PlatformCAAnimation.cpp in Sources */,
</ins><span class="cx">                                 85D389B30A991A7F00282145 /* DOMAttr.mm in Sources */,
</span><span class="cx">                                 76FB9FEC19A7284B00420562 /* DOMAutocompleteErrorEvent.mm in Sources */,
</span><span class="cx">                                 BC946EF0107FDBAC00857193 /* DOMBeforeLoadEvent.mm in Sources */,
</span><span class="lines">@@ -29533,6 +29540,7 @@
</span><span class="cx">                                 BC6D44BE0C07EFB60072D2C9 /* JSHTMLEmbedElementCustom.cpp in Sources */,
</span><span class="cx">                                 1AE2AA260A1CDAB400B42B25 /* JSHTMLFieldSetElement.cpp in Sources */,
</span><span class="cx">                                 1AE2AA280A1CDAB400B42B25 /* JSHTMLFontElement.cpp in Sources */,
</span><ins>+                                0FDF45A91BD1C82500E4FA8C /* TimingFunction.cpp in Sources */,
</ins><span class="cx">                                 9BF9A8801648DD2F001C6B23 /* JSHTMLFormControlsCollection.cpp in Sources */,
</span><span class="cx">                                 9B1AB07C1648C7C40051F3F2 /* JSHTMLFormControlsCollectionCustom.cpp in Sources */,
</span><span class="cx">                                 A8D064FB0A23C0CC005E7203 /* JSHTMLFormElement.cpp in Sources */,
</span></span></pre></div>
<a id="trunkSourceWebCoredomViewportArgumentscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ViewportArguments.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ViewportArguments.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/dom/ViewportArguments.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #include &quot;IntSize.h&quot;
</span><span class="cx"> #include &quot;Page.h&quot;
</span><span class="cx"> #include &quot;ScriptableDocumentParser.h&quot;
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -450,4 +451,24 @@
</span><span class="cx">     document-&gt;addConsoleMessage(MessageSource::Rendering, viewportErrorMessageLevel(errorCode), message);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const ViewportArguments&amp; viewportArguments)
+{
+    ts.increaseIndent();
+
+    ts &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;(width &quot; &lt;&lt; viewportArguments.width &lt;&lt; &quot;, minWidth &quot; &lt;&lt; viewportArguments.minWidth &lt;&lt; &quot;, maxWidth &quot; &lt;&lt; viewportArguments.maxWidth &lt;&lt; &quot;)&quot;;
+
+    ts &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;(height &quot; &lt;&lt; viewportArguments.height &lt;&lt; &quot;, minHeight &quot; &lt;&lt; viewportArguments.minHeight &lt;&lt; &quot;, maxHeight &quot; &lt;&lt; viewportArguments.maxHeight &lt;&lt; &quot;)&quot;;
+
+    ts &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;(zoom &quot; &lt;&lt; viewportArguments.zoom &lt;&lt; &quot;, minZoom &quot; &lt;&lt; viewportArguments.minZoom &lt;&lt; &quot;, maxZoom &quot; &lt;&lt; viewportArguments.maxZoom &lt;&lt; &quot;)&quot;;
+    ts.decreaseIndent();
+
+    return ts;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoredomViewportArgumentsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/dom/ViewportArguments.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/dom/ViewportArguments.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/dom/ViewportArguments.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -135,6 +135,8 @@
</span><span class="cx"> void setViewportFeature(const String&amp; keyString, const String&amp; valueString, Document*, void* data);
</span><span class="cx"> void reportViewportWarning(Document*, ViewportErrorCode, const String&amp; replacement1, const String&amp; replacement2);
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp;, const ViewportArguments&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ViewportArguments_h
</span></span></pre></div>
<a id="trunkSourceWebCorepageViewportConfigurationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ViewportConfiguration.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ViewportConfiguration.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/page/ViewportConfiguration.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -399,49 +399,10 @@
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #ifndef NDEBUG
</span><del>-class ViewportConfigurationTextStream : public TextStream {
-public:
-    ViewportConfigurationTextStream()
-        : m_indent(0)
-    {
-    }
</del><span class="cx"> 
</span><del>-    using TextStream::operator&lt;&lt;;
-
-    ViewportConfigurationTextStream&amp; operator&lt;&lt;(const ViewportConfiguration::Parameters&amp;);
-    ViewportConfigurationTextStream&amp; operator&lt;&lt;(const ViewportArguments&amp;);
-
-    void increaseIndent() { ++m_indent; }
-    void decreaseIndent() { --m_indent; ASSERT(m_indent &gt;= 0); }
-
-    void writeIndent();
-
-private:
-    int m_indent;
-};
-
-template &lt;typename T&gt;
-static void dumpProperty(ViewportConfigurationTextStream&amp; ts, String name, T value)
</del><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const ViewportConfiguration::Parameters&amp; parameters)
</ins><span class="cx"> {
</span><del>-    ts &lt;&lt; &quot;\n&quot;;
</del><span class="cx">     ts.increaseIndent();
</span><del>-    ts.writeIndent();
-    ts &lt;&lt; &quot;(&quot; &lt;&lt; name &lt;&lt; &quot; &quot;;
-    ts &lt;&lt; value &lt;&lt; &quot;)&quot;;
-    ts.decreaseIndent();
-}
-
-void ViewportConfigurationTextStream::writeIndent()
-{
-    for (int i = 0; i &lt; m_indent; ++i)
-        *this &lt;&lt; &quot;  &quot;;
-}
-
-ViewportConfigurationTextStream&amp; ViewportConfigurationTextStream::operator&lt;&lt;(const ViewportConfiguration::Parameters&amp; parameters)
-{
-    ViewportConfigurationTextStream&amp; ts = *this;
-
-    ts.increaseIndent();
</del><span class="cx">     ts &lt;&lt; &quot;\n&quot;;
</span><span class="cx">     ts.writeIndent();
</span><span class="cx">     ts &lt;&lt; &quot;(width &quot; &lt;&lt; parameters.width &lt;&lt; &quot;, set: &quot; &lt;&lt; (parameters.widthIsSet ? &quot;true&quot; : &quot;false&quot;) &lt;&lt; &quot;)&quot;;
</span><span class="lines">@@ -455,39 +416,17 @@
</span><span class="cx">     ts &lt;&lt; &quot;(initialScale &quot; &lt;&lt; parameters.initialScale &lt;&lt; &quot;, set: &quot; &lt;&lt; (parameters.initialScaleIsSet ? &quot;true&quot; : &quot;false&quot;) &lt;&lt; &quot;)&quot;;
</span><span class="cx">     ts.decreaseIndent();
</span><span class="cx"> 
</span><del>-    dumpProperty(ts, &quot;minimumScale&quot;, parameters.minimumScale);
-    dumpProperty(ts, &quot;maximumScale&quot;, parameters.maximumScale);
-    dumpProperty(ts, &quot;allowsUserScaling&quot;, parameters.allowsUserScaling);
-    dumpProperty(ts, &quot;allowsShrinkToFit&quot;, parameters.allowsShrinkToFit);
</del><ins>+    ts.dumpProperty(&quot;minimumScale&quot;, parameters.minimumScale);
+    ts.dumpProperty(&quot;maximumScale&quot;, parameters.maximumScale);
+    ts.dumpProperty(&quot;allowsUserScaling&quot;, parameters.allowsUserScaling);
+    ts.dumpProperty(&quot;allowsShrinkToFit&quot;, parameters.allowsShrinkToFit);
</ins><span class="cx"> 
</span><span class="cx">     return ts;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-ViewportConfigurationTextStream&amp; ViewportConfigurationTextStream::operator&lt;&lt;(const ViewportArguments&amp; viewportArguments)
-{
-    ViewportConfigurationTextStream&amp; ts = *this;
-
-    ts.increaseIndent();
-
-    ts &lt;&lt; &quot;\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(width &quot; &lt;&lt; viewportArguments.width &lt;&lt; &quot;, minWidth &quot; &lt;&lt; viewportArguments.minWidth &lt;&lt; &quot;, maxWidth &quot; &lt;&lt; viewportArguments.maxWidth &lt;&lt; &quot;)&quot;;
-
-    ts &lt;&lt; &quot;\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(height &quot; &lt;&lt; viewportArguments.height &lt;&lt; &quot;, minHeight &quot; &lt;&lt; viewportArguments.minHeight &lt;&lt; &quot;, maxHeight &quot; &lt;&lt; viewportArguments.maxHeight &lt;&lt; &quot;)&quot;;
-
-    ts &lt;&lt; &quot;\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(zoom &quot; &lt;&lt; viewportArguments.zoom &lt;&lt; &quot;, minZoom &quot; &lt;&lt; viewportArguments.minZoom &lt;&lt; &quot;, maxZoom &quot; &lt;&lt; viewportArguments.maxZoom &lt;&lt; &quot;)&quot;;
-    ts.decreaseIndent();
-
-    return ts;
-}
-
</del><span class="cx"> CString ViewportConfiguration::description() const
</span><span class="cx"> {
</span><del>-    ViewportConfigurationTextStream ts;
</del><ins>+    TextStream ts;
</ins><span class="cx"> 
</span><span class="cx">     ts &lt;&lt; &quot;(viewport-configuration &quot; &lt;&lt; (void*)this;
</span><span class="cx">     ts &lt;&lt; &quot;\n&quot;;
</span><span class="lines">@@ -514,8 +453,8 @@
</span><span class="cx">     ts &lt;&lt; &quot;)&quot;;
</span><span class="cx">     ts.decreaseIndent();
</span><span class="cx"> 
</span><del>-    dumpProperty(ts, &quot;contentSize&quot;, m_contentSize);
-    dumpProperty(ts, &quot;minimumLayoutSize&quot;, m_minimumLayoutSize);
</del><ins>+    ts.dumpProperty(&quot;contentSize&quot;, m_contentSize);
+    ts.dumpProperty(&quot;minimumLayoutSize&quot;, m_minimumLayoutSize);
</ins><span class="cx"> 
</span><span class="cx">     ts &lt;&lt; &quot;\n&quot;;
</span><span class="cx">     ts.increaseIndent();
</span></span></pre></div>
<a id="trunkSourceWebCorepageViewportConfigurationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/ViewportConfiguration.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/ViewportConfiguration.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/page/ViewportConfiguration.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -33,6 +33,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class TextStream;
+
</ins><span class="cx"> class ViewportConfiguration {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(ViewportConfiguration); WTF_MAKE_FAST_ALLOCATED;
</span><span class="cx"> public:
</span><span class="lines">@@ -122,6 +124,8 @@
</span><span class="cx">     bool m_forceAlwaysUserScalable;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp;, const ViewportConfiguration::Parameters&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ViewportConfiguration_h
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingConstraintscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingConstraints.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingConstraints.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/page/scrolling/ScrollingConstraints.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -26,6 +26,8 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;ScrollingConstraints.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;TextStream.h&quot;
+
</ins><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="cx"> FloatPoint FixedPositionViewportConstraints::layerPositionForViewportRect(const FloatRect&amp; viewportRect) const
</span><span class="lines">@@ -98,4 +100,20 @@
</span><span class="cx">     return m_layerPositionAtLastLayout + offset - m_stickyOffsetAtLastLayout;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const FixedPositionViewportConstraints&amp; constraints)
+{
+    ts.dumpProperty(&quot;viewport-rect-at-last-layout&quot;, constraints.viewportRectAtLastLayout());
+    ts.dumpProperty(&quot;layer-position-at-last-layout&quot;, constraints.layerPositionAtLastLayout());
+
+    return ts;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const StickyPositionViewportConstraints&amp; constraints)
+{
+    ts.dumpProperty(&quot;sticky-position-at-last-layout&quot;, constraints.stickyOffsetAtLastLayout());
+    ts.dumpProperty(&quot;layer-position-at-last-layout&quot;, constraints.layerPositionAtLastLayout());
+
+    return ts;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingConstraintsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingConstraints.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingConstraints.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/page/scrolling/ScrollingConstraints.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -196,6 +196,9 @@
</span><span class="cx">     FloatPoint m_layerPositionAtLastLayout;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const FixedPositionViewportConstraints&amp;);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const StickyPositionViewportConstraints&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // ScrollingConstraints_h
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingCoordinatorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> #include &quot;RenderView.h&quot;
</span><span class="cx"> #include &quot;ScrollAnimator.h&quot;
</span><span class="cx"> #include &quot;Settings.h&quot;
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &lt;wtf/MainThread.h&gt;
</span><span class="cx"> #include &lt;wtf/text/StringBuilder.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -421,4 +422,23 @@
</span><span class="cx">     return String();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, ScrollingNodeType nodeType)
+{
+    switch (nodeType) {
+    case FrameScrollingNode:
+        ts &lt;&lt; &quot;frame-scrolling&quot;;
+        break;
+    case OverflowScrollingNode:
+        ts &lt;&lt; &quot;overflow-scrolling&quot;;
+        break;
+    case FixedNode:
+        ts &lt;&lt; &quot;fixed&quot;;
+        break;
+    case StickyNode:
+        ts &lt;&lt; &quot;sticky&quot;;
+        break;
+    }
+    return ts;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCorepagescrollingScrollingCoordinatorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/page/scrolling/ScrollingCoordinator.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -62,6 +62,7 @@
</span><span class="cx"> class Page;
</span><span class="cx"> class Region;
</span><span class="cx"> class ScrollableArea;
</span><ins>+class TextStream;
</ins><span class="cx"> class ViewportConstraints;
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(ASYNC_SCROLLING)
</span><span class="lines">@@ -233,6 +234,8 @@
</span><span class="cx">     bool m_forceSynchronousScrollLayerPositionUpdates { false };
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, ScrollingNodeType);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #define SPECIALIZE_TYPE_TRAITS_SCROLLING_COORDINATOR(ToValueTypeName, predicate) \
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformanimationTimingFunctioncpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/animation/TimingFunction.cpp (0 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/animation/TimingFunction.cpp                                (rev 0)
+++ trunk/Source/WebCore/platform/animation/TimingFunction.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -0,0 +1,53 @@
</span><ins>+/*
+ * Copyright (C) 2015 Apple Inc.  All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include &quot;config.h&quot;
+#include &quot;TimingFunction.h&quot;
+
+#include &quot;TextStream.h&quot;
+
+namespace WebCore {
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const TimingFunction&amp; timingFunction)
+{
+    switch (timingFunction.type()) {
+    case TimingFunction::LinearFunction:
+        ts &lt;&lt; &quot;linear&quot;;
+        break;
+    case TimingFunction::CubicBezierFunction: {
+        const CubicBezierTimingFunction&amp; cubicBezierFunction = static_cast&lt;const CubicBezierTimingFunction&amp;&gt;(timingFunction);
+        ts &lt;&lt; &quot;cubic-bezier(&quot; &lt;&lt; cubicBezierFunction.x1() &lt;&lt; &quot;, &quot; &lt;&lt; cubicBezierFunction.y1() &lt;&lt; &quot;, &quot; &lt;&lt;  cubicBezierFunction.x2() &lt;&lt; &quot;, &quot; &lt;&lt; cubicBezierFunction.y2() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case TimingFunction::StepsFunction: {
+        const StepsTimingFunction&amp; stepsFunction = static_cast&lt;const StepsTimingFunction&amp;&gt;(timingFunction);
+        ts &lt;&lt; &quot;steps(&quot; &lt;&lt; stepsFunction.numberOfSteps() &lt;&lt; &quot;, &quot; &lt;&lt; (stepsFunction.stepAtStart() ? &quot;start&quot; : &quot;end&quot;) &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    }
+    return ts;
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformanimationTimingFunctionh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/animation/TimingFunction.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/animation/TimingFunction.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/animation/TimingFunction.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -25,6 +25,7 @@
</span><span class="cx"> #ifndef TimingFunction_h
</span><span class="cx"> #define TimingFunction_h
</span><span class="cx"> 
</span><ins>+#include &lt;wtf/PassRefPtr.h&gt;
</ins><span class="cx"> #include &lt;wtf/RefCounted.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -230,6 +231,9 @@
</span><span class="cx">     bool m_stepAtStart;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+class TextStream;
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const TimingFunction&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // TimingFunction_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsColorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/Color.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/Color.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/Color.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> 
</span><span class="cx"> #include &quot;AnimationUtilities.h&quot;
</span><span class="cx"> #include &quot;HashTools.h&quot;
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #include &lt;wtf/DecimalNumber.h&gt;
</span><span class="cx"> #include &lt;wtf/HexNumber.h&gt;
</span><span class="lines">@@ -488,5 +489,9 @@
</span><span class="cx">         blend(from.alpha(), to.alpha(), progress));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const Color&amp; color)
+{
+    return ts &lt;&lt; color.nameForRenderTreeAsText();
+}
</ins><span class="cx"> 
</span><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsColorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/Color.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/Color.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/Color.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -46,6 +46,8 @@
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><ins>+class TextStream;
+
</ins><span class="cx"> typedef unsigned RGBA32; // Deprecated: Type for an RGBA quadruplet. Use RGBA class instead.
</span><span class="cx"> 
</span><span class="cx"> WEBCORE_EXPORT RGBA32 makeRGB(int r, int g, int b);
</span><span class="lines">@@ -292,6 +294,8 @@
</span><span class="cx">     return approximation + (remainder &gt;&gt; 8);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const Color&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // Color_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFloatPoint3Dcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FloatPoint3D.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FloatPoint3D.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/FloatPoint3D.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -20,9 +20,9 @@
</span><span class="cx"> */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><del>-
</del><span class="cx"> #include &quot;FloatPoint3D.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &lt;math.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -38,5 +38,10 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const FloatPoint3D&amp; point)
+{
+    return ts &lt;&lt; point.x() &lt;&lt; &quot; &quot; &lt;&lt; point.y() &lt;&lt; &quot; &quot; &lt;&lt; point.z();
+}
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFloatPoint3Dh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FloatPoint3D.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FloatPoint3D.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/FloatPoint3D.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -182,6 +182,8 @@
</span><span class="cx">     return (*this - a).length();
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const FloatPoint3D&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // FloatPoint3D_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFloatRoundedRectcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FloatRoundedRect.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FloatRoundedRect.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/FloatRoundedRect.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -30,6 +30,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;FloatRoundedRect.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &lt;algorithm&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="lines">@@ -196,5 +197,24 @@
</span><span class="cx">     m_radii.scale(widthRatio &lt; heightRatio ? widthRatio : heightRatio);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const FloatRoundedRect&amp; roundedRect)
+{
+    ts &lt;&lt; roundedRect.rect().x() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.rect().y() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.rect().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.rect().height() &lt;&lt; &quot;\n&quot;;
</ins><span class="cx"> 
</span><ins>+    ts.increaseIndent();
+    ts.writeIndent();
+    ts &lt;&lt; &quot;topLeft=&quot; &lt;&lt; roundedRect.topLeftCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.topLeftCorner().height() &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;topRight=&quot; &lt;&lt; roundedRect.topRightCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.topRightCorner().height() &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;bottomLeft=&quot; &lt;&lt; roundedRect.bottomLeftCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.bottomLeftCorner().height() &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;bottomRight=&quot; &lt;&lt; roundedRect.bottomRightCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.bottomRightCorner().height();
+    ts.decreaseIndent();
+
+    return ts;
+}
+
+
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsFloatRoundedRecth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/FloatRoundedRect.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/FloatRoundedRect.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/FloatRoundedRect.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -178,6 +178,8 @@
</span><span class="cx">     return factor;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const FloatRoundedRect&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // FloatRoundedRect_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -875,6 +875,29 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const Vector&lt;GraphicsLayer::PlatformLayerID&gt;&amp; layers)
+{
+    for (size_t i = 0; i &lt; layers.size(); ++i) {
+        if (i)
+            ts &lt;&lt; &quot; &quot;;
+        ts &lt;&lt; layers[i];
+    }
+
+    return ts;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const WebCore::GraphicsLayer::CustomAppearance&amp; customAppearance)
+{
+    switch (customAppearance) {
+    case GraphicsLayer::CustomAppearance::NoCustomAppearance: ts &lt;&lt; &quot;none&quot;; break;
+    case GraphicsLayer::CustomAppearance::ScrollingOverhang: ts &lt;&lt; &quot;scrolling-overhang&quot;; break;
+    case GraphicsLayer::CustomAppearance::ScrollingShadow: ts &lt;&lt; &quot;scrolling-shadow&quot;; break;
+    case GraphicsLayer::CustomAppearance::LightBackdropAppearance: ts &lt;&lt; &quot;light-backdrop&quot;; break;
+    case GraphicsLayer::CustomAppearance::DarkBackdropAppearance: ts &lt;&lt; &quot;dark-backdrop&quot;; break;
+    }
+    return ts;
+}
+
</ins><span class="cx"> String GraphicsLayer::layerTreeAsText(LayerTreeAsTextBehavior behavior) const
</span><span class="cx"> {
</span><span class="cx">     TextStream ts;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsLayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsLayer.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/GraphicsLayer.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -640,6 +640,9 @@
</span><span class="cx"> #endif
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const Vector&lt;GraphicsLayer::PlatformLayerID&gt;&amp;);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const GraphicsLayer::CustomAppearance&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #define SPECIALIZE_TYPE_TRAITS_GRAPHICSLAYER(ToValueTypeName, predicate) \
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsTypescpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsTypes.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsTypes.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/GraphicsTypes.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -28,6 +28,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;GraphicsTypes.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #include &lt;wtf/text/WTFString.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -236,4 +237,76 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, BlendMode blendMode)
+{
+    switch (blendMode) {
+    case BlendModeNormal: ts &lt;&lt; &quot;normal&quot;; break;
+    case BlendModeMultiply: ts &lt;&lt; &quot;multiply&quot;; break;
+    case BlendModeScreen: ts &lt;&lt; &quot;screen&quot;; break;
+    case BlendModeOverlay: ts &lt;&lt; &quot;overlay&quot;; break;
+    case BlendModeDarken: ts &lt;&lt; &quot;darken&quot;; break;
+    case BlendModeLighten: ts &lt;&lt; &quot;lighten&quot;; break;
+    case BlendModeColorDodge: ts &lt;&lt; &quot;color-dodge&quot;; break;
+    case BlendModeColorBurn: ts &lt;&lt; &quot;color-burn&quot;; break;
+    case BlendModeHardLight: ts &lt;&lt; &quot;hard-light&quot;; break;
+    case BlendModeSoftLight: ts &lt;&lt; &quot;soft-light&quot;; break;
+    case BlendModeDifference: ts &lt;&lt; &quot;difference&quot;; break;
+    case BlendModeExclusion: ts &lt;&lt; &quot;exclusion&quot;; break;
+    case BlendModeHue: ts &lt;&lt; &quot;hue&quot;; break;
+    case BlendModeSaturation: ts &lt;&lt; &quot;saturation&quot;; break;
+    case BlendModeColor: ts &lt;&lt; &quot;color&quot;; break;
+    case BlendModeLuminosity: ts &lt;&lt; &quot;luminosity&quot;; break;
+    case BlendModePlusDarker: ts &lt;&lt; &quot;plus-darker&quot;; break;
+    case BlendModePlusLighter: ts &lt;&lt; &quot;plus-lighter&quot;; break;
+    }
+    return ts;
</ins><span class="cx"> }
</span><ins>+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, WindRule rule)
+{
+    switch (rule) {
+    case RULE_NONZERO:
+        ts &lt;&lt; &quot;NON-ZERO&quot;;
+        break;
+    case RULE_EVENODD:
+        ts &lt;&lt; &quot;EVEN-ODD&quot;;
+        break;
+    }
+
+    return ts;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, LineCap capStyle)
+{
+    switch (capStyle) {
+    case ButtCap:
+        ts &lt;&lt; &quot;BUTT&quot;;
+        break;
+    case RoundCap:
+        ts &lt;&lt; &quot;ROUND&quot;;
+        break;
+    case SquareCap:
+        ts &lt;&lt; &quot;SQUARE&quot;;
+        break;
+    }
+    return ts;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, LineJoin joinStyle)
+{
+    switch (joinStyle) {
+    case MiterJoin:
+        ts &lt;&lt; &quot;MITER&quot;;
+        break;
+    case RoundJoin:
+        ts &lt;&lt; &quot;ROUND&quot;;
+        break;
+    case BevelJoin:
+        ts &lt;&lt; &quot;BEVEL&quot;;
+        break;
+    }
+    return ts;
+}
+
+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsGraphicsTypesh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/GraphicsTypes.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/GraphicsTypes.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/GraphicsTypes.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -26,86 +26,93 @@
</span><span class="cx"> #ifndef GraphicsTypes_h
</span><span class="cx"> #define GraphicsTypes_h
</span><span class="cx"> 
</span><ins>+#include &quot;WindRule.h&quot;
</ins><span class="cx"> #include &lt;wtf/Forward.h&gt;
</span><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><del>-    enum CompositeOperator {
-        CompositeClear,
-        CompositeCopy,
-        CompositeSourceOver,
-        CompositeSourceIn,
-        CompositeSourceOut,
-        CompositeSourceAtop,
-        CompositeDestinationOver,
-        CompositeDestinationIn,
-        CompositeDestinationOut,
-        CompositeDestinationAtop,
-        CompositeXOR,
-        CompositePlusDarker,
-        CompositePlusLighter,
-        CompositeDifference
-    };
</del><ins>+enum CompositeOperator {
+    CompositeClear,
+    CompositeCopy,
+    CompositeSourceOver,
+    CompositeSourceIn,
+    CompositeSourceOut,
+    CompositeSourceAtop,
+    CompositeDestinationOver,
+    CompositeDestinationIn,
+    CompositeDestinationOut,
+    CompositeDestinationAtop,
+    CompositeXOR,
+    CompositePlusDarker,
+    CompositePlusLighter,
+    CompositeDifference
+};
</ins><span class="cx"> 
</span><del>-    enum BlendMode {
-        BlendModeNormal = 1, // Start with 1 to match SVG's blendmode enumeration.
-        BlendModeMultiply,
-        BlendModeScreen,
-        BlendModeDarken,
-        BlendModeLighten,
-        BlendModeOverlay,
-        BlendModeColorDodge,
-        BlendModeColorBurn,
-        BlendModeHardLight,
-        BlendModeSoftLight,
-        BlendModeDifference,
-        BlendModeExclusion,
-        BlendModeHue,
-        BlendModeSaturation,
-        BlendModeColor,
-        BlendModeLuminosity,
-        BlendModePlusDarker,
-        BlendModePlusLighter
-    };
</del><ins>+enum BlendMode {
+    BlendModeNormal = 1, // Start with 1 to match SVG's blendmode enumeration.
+    BlendModeMultiply,
+    BlendModeScreen,
+    BlendModeDarken,
+    BlendModeLighten,
+    BlendModeOverlay,
+    BlendModeColorDodge,
+    BlendModeColorBurn,
+    BlendModeHardLight,
+    BlendModeSoftLight,
+    BlendModeDifference,
+    BlendModeExclusion,
+    BlendModeHue,
+    BlendModeSaturation,
+    BlendModeColor,
+    BlendModeLuminosity,
+    BlendModePlusDarker,
+    BlendModePlusLighter
+};
</ins><span class="cx"> 
</span><del>-    enum GradientSpreadMethod {
-        SpreadMethodPad,
-        SpreadMethodReflect,
-        SpreadMethodRepeat
-    };
</del><ins>+enum GradientSpreadMethod {
+    SpreadMethodPad,
+    SpreadMethodReflect,
+    SpreadMethodRepeat
+};
</ins><span class="cx"> 
</span><del>-    enum LineCap { ButtCap, RoundCap, SquareCap };
</del><ins>+enum LineCap { ButtCap, RoundCap, SquareCap };
</ins><span class="cx"> 
</span><del>-    enum LineJoin { MiterJoin, RoundJoin, BevelJoin };
</del><ins>+enum LineJoin { MiterJoin, RoundJoin, BevelJoin };
</ins><span class="cx"> 
</span><del>-    enum HorizontalAlignment { AlignLeft, AlignRight, AlignHCenter };
</del><ins>+enum HorizontalAlignment { AlignLeft, AlignRight, AlignHCenter };
</ins><span class="cx"> 
</span><del>-    enum TextBaseline { AlphabeticTextBaseline, TopTextBaseline, MiddleTextBaseline, BottomTextBaseline, IdeographicTextBaseline, HangingTextBaseline };
-    
-    enum TextAlign { StartTextAlign, EndTextAlign, LeftTextAlign, CenterTextAlign, RightTextAlign };
</del><ins>+enum TextBaseline { AlphabeticTextBaseline, TopTextBaseline, MiddleTextBaseline, BottomTextBaseline, IdeographicTextBaseline, HangingTextBaseline };
</ins><span class="cx"> 
</span><del>-    enum RenderingMode {
-        Unaccelerated,
-        UnacceleratedNonPlatformBuffer, // Use plain memory allocation rather than platform API to allocate backing store.
-        Accelerated
-    };
</del><ins>+enum TextAlign { StartTextAlign, EndTextAlign, LeftTextAlign, CenterTextAlign, RightTextAlign };
</ins><span class="cx"> 
</span><del>-    String compositeOperatorName(CompositeOperator, BlendMode);
-    bool parseBlendMode(const String&amp;, BlendMode&amp;);
-    bool parseCompositeAndBlendOperator(const String&amp;, CompositeOperator&amp;, BlendMode&amp;);
</del><ins>+enum RenderingMode {
+    Unaccelerated,
+    UnacceleratedNonPlatformBuffer, // Use plain memory allocation rather than platform API to allocate backing store.
+    Accelerated
+};
</ins><span class="cx"> 
</span><del>-    String lineCapName(LineCap);
-    bool parseLineCap(const String&amp;, LineCap&amp;);
</del><ins>+String compositeOperatorName(CompositeOperator, BlendMode);
+bool parseBlendMode(const String&amp;, BlendMode&amp;);
+bool parseCompositeAndBlendOperator(const String&amp;, CompositeOperator&amp;, BlendMode&amp;);
</ins><span class="cx"> 
</span><del>-    String lineJoinName(LineJoin);
-    bool parseLineJoin(const String&amp;, LineJoin&amp;);
</del><ins>+String lineCapName(LineCap);
+bool parseLineCap(const String&amp;, LineCap&amp;);
</ins><span class="cx"> 
</span><del>-    String textAlignName(TextAlign);
-    bool parseTextAlign(const String&amp;, TextAlign&amp;);
-    
-    String textBaselineName(TextBaseline);
-    bool parseTextBaseline(const String&amp;, TextBaseline&amp;);
</del><ins>+String lineJoinName(LineJoin);
+bool parseLineJoin(const String&amp;, LineJoin&amp;);
</ins><span class="cx"> 
</span><ins>+String textAlignName(TextAlign);
+bool parseTextAlign(const String&amp;, TextAlign&amp;);
+
+String textBaselineName(TextBaseline);
+bool parseTextBaseline(const String&amp;, TextBaseline&amp;);
+
+class TextStream;
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, BlendMode);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, WindRule);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, LineCap);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, LineJoin);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCAAnimationcpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.cpp (0 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.cpp                                (rev 0)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -0,0 +1,72 @@
</span><ins>+/*
+ * Copyright (C) 2010 Apple Inc. All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 
+ */
+
+#include &quot;config.h&quot;
+#include &quot;PlatformCAAnimation.h&quot;
+
+#include &quot;TextStream.h&quot;
+
+namespace WebCore {
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, PlatformCAAnimation::AnimationType type)
+{
+    switch (type) {
+    case PlatformCAAnimation::Basic: ts &lt;&lt; &quot;basic&quot;; break;
+    case PlatformCAAnimation::Keyframe: ts &lt;&lt; &quot;keyframe&quot;; break;
+    }
+    return ts;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, PlatformCAAnimation::FillModeType fillMode)
+{
+    switch (fillMode) {
+    case PlatformCAAnimation::NoFillMode: ts &lt;&lt; &quot;none&quot;; break;
+    case PlatformCAAnimation::Forwards: ts &lt;&lt; &quot;forwards&quot;; break;
+    case PlatformCAAnimation::Backwards: ts &lt;&lt; &quot;backwards&quot;; break;
+    case PlatformCAAnimation::Both: ts &lt;&lt; &quot;both&quot;; break;
+    }
+    return ts;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, PlatformCAAnimation::ValueFunctionType valueFunctionType)
+{
+    switch (valueFunctionType) {
+    case PlatformCAAnimation::NoValueFunction: ts &lt;&lt; &quot;none&quot;; break;
+    case PlatformCAAnimation::RotateX: ts &lt;&lt; &quot;rotateX&quot;; break;
+    case PlatformCAAnimation::RotateY: ts &lt;&lt; &quot;rotateY&quot;; break;
+    case PlatformCAAnimation::RotateZ: ts &lt;&lt; &quot;rotateX&quot;; break;
+    case PlatformCAAnimation::ScaleX: ts &lt;&lt; &quot;scaleX&quot;; break;
+    case PlatformCAAnimation::ScaleY: ts &lt;&lt; &quot;scaleY&quot;; break;
+    case PlatformCAAnimation::ScaleZ: ts &lt;&lt; &quot;scaleX&quot;; break;
+    case PlatformCAAnimation::Scale: ts &lt;&lt; &quot;scale&quot;; break;
+    case PlatformCAAnimation::TranslateX: ts &lt;&lt; &quot;translateX&quot;; break;
+    case PlatformCAAnimation::TranslateY: ts &lt;&lt; &quot;translateY&quot;; break;
+    case PlatformCAAnimation::TranslateZ: ts &lt;&lt; &quot;translateZ&quot;; break;
+    case PlatformCAAnimation::Translate: ts &lt;&lt; &quot;translate&quot;; break;
+    }
+    return ts;
+}
+
+} // namespace WebCore
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCAAnimationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCAAnimation.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -136,6 +136,10 @@
</span><span class="cx">     AnimationType m_type;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, PlatformCAAnimation::AnimationType);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, PlatformCAAnimation::FillModeType);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, PlatformCAAnimation::ValueFunctionType);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #define SPECIALIZE_TYPE_TRAITS_CAANIMATION(ToValueTypeName, predicate) \
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCALayercpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -24,8 +24,10 @@
</span><span class="cx">  */
</span><span class="cx"> 
</span><span class="cx"> #include &quot;config.h&quot;
</span><ins>+#include &quot;PlatformCALayer.h&quot;
+
</ins><span class="cx"> #include &quot;LayerPool.h&quot;
</span><del>-#include &quot;PlatformCALayer.h&quot;
</del><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &lt;wtf/StringExtras.h&gt;
</span><span class="cx"> 
</span><span class="cx"> #if USE(CA)
</span><span class="lines">@@ -133,6 +135,79 @@
</span><span class="cx">     return *sharedPool;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, PlatformCALayer::LayerType layerType)
+{
+    switch (layerType) {
+    case PlatformCALayer::LayerTypeLayer:
+    case PlatformCALayer::LayerTypeWebLayer:
+    case PlatformCALayer::LayerTypeSimpleLayer:
+        ts &lt;&lt; &quot;layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeTransformLayer:
+        ts &lt;&lt; &quot;transform-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeWebTiledLayer:
+        ts &lt;&lt; &quot;tiled-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeTiledBackingLayer:
+        ts &lt;&lt; &quot;tiled-backing-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypePageTiledBackingLayer:
+        ts &lt;&lt; &quot;page-tiled-backing-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeTiledBackingTileLayer:
+        ts &lt;&lt; &quot;tiled-backing-tile&quot;;
+        break;
+    case PlatformCALayer::LayerTypeRootLayer:
+        ts &lt;&lt; &quot;root-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeBackdropLayer:
+        ts &lt;&lt; &quot;backdrop-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeAVPlayerLayer:
+        ts &lt;&lt; &quot;av-player-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeWebGLLayer:
+        ts &lt;&lt; &quot;web-gl-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeShapeLayer:
+        ts &lt;&lt; &quot;shape-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeScrollingLayer:
+        ts &lt;&lt; &quot;scrolling-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeCustom:
+        ts &lt;&lt; &quot;custom-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeLightSystemBackdropLayer:
+        ts &lt;&lt; &quot;light-system-backdrop-layer&quot;;
+        break;
+    case PlatformCALayer::LayerTypeDarkSystemBackdropLayer:
+        ts &lt;&lt; &quot;dark-system-backdrop-layer&quot;;
+        break;
+    }
+    return ts;
</ins><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, PlatformCALayer::FilterType filterType)
+{
+    switch (filterType) {
+    case PlatformCALayer::Linear:
+        ts &lt;&lt; &quot;linear&quot;;
+        break;
+    case PlatformCALayer::Nearest:
+        ts &lt;&lt; &quot;nearest&quot;;
+        break;
+    case PlatformCALayer::Trilinear:
+        ts &lt;&lt; &quot;trilinear&quot;;
+        break;
+    default:
+        ASSERT_NOT_REACHED();
+        break;
+    }
+    return ts;
+}
+
+}
+
</ins><span class="cx"> #endif // USE(CA)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCALayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -280,6 +280,9 @@
</span><span class="cx">     PlatformCALayerClient* m_owner;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, PlatformCALayer::LayerType);
+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, PlatformCALayer::FilterType);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #define SPECIALIZE_TYPE_TRAITS_PLATFORM_CALAYER(ToValueTypeName, predicate) \
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfiltersFilterOperationcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/filters/FilterOperation.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/filters/FilterOperation.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterOperation.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;AnimationUtilities.h&quot;
</span><span class="cx"> #include &quot;CachedSVGDocumentReference.h&quot;
</span><span class="cx"> #include &quot;FilterEffect.h&quot;
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx">     
</span><span class="lines">@@ -198,4 +199,76 @@
</span><span class="cx">         WebCore::blend(fromColor, m_color, progress));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const FilterOperation&amp; filter)
+{
+    switch (filter.type()) {
+    case FilterOperation::REFERENCE:
+        ts &lt;&lt; &quot;reference&quot;;
+        break;
+    case FilterOperation::GRAYSCALE: {
+        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;grayscale(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::SEPIA: {
+        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;sepia(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::SATURATE: {
+        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;saturate(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::HUE_ROTATE: {
+        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;hue-rotate(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::INVERT: {
+        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;invert(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::OPACITY: {
+        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;opacity(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::BRIGHTNESS: {
+        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;brightness(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::CONTRAST: {
+        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;contrast(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::BLUR: {
+        const auto&amp; blurFilter = downcast&lt;BlurFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;blur(&quot; &lt;&lt; blurFilter.stdDeviation().value() &lt;&lt; &quot;)&quot;; // FIXME: should call floatValueForLength() but that's outisde of platform/.
+        break;
+    }
+    case FilterOperation::DROP_SHADOW: {
+        const auto&amp; dropShadowFilter = downcast&lt;DropShadowFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;drop-shadow(&quot; &lt;&lt; dropShadowFilter.x() &lt;&lt; &quot; &quot; &lt;&lt; dropShadowFilter.y() &lt;&lt; &quot; &quot; &lt;&lt; dropShadowFilter.location() &lt;&lt; &quot; &quot;;
+        ts &lt;&lt; dropShadowFilter.color() &lt;&lt; &quot;)&quot;;
+        break;
+    }
+    case FilterOperation::PASSTHROUGH:
+        ts &lt;&lt; &quot;passthrough&quot;;
+        break;
+    case FilterOperation::DEFAULT: {
+        const auto&amp; defaultFilter = downcast&lt;DefaultFilterOperation&gt;(filter);
+        ts &lt;&lt; &quot;default type=&quot; &lt;&lt; (int)defaultFilter.representedType();
+        break;
+    }
+    case FilterOperation::NONE:
+        ts &lt;&lt; &quot;none&quot;;
+        break;
+    }
+    return ts;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfiltersFilterOperationh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/filters/FilterOperation.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/filters/FilterOperation.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterOperation.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -336,6 +336,8 @@
</span><span class="cx">     Color m_color;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const FilterOperation&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #define SPECIALIZE_TYPE_TRAITS_FILTEROPERATION(ToValueTypeName, predicate) \
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfiltersFilterOperationscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/filters/FilterOperations.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/filters/FilterOperations.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterOperations.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #include &quot;FEGaussianBlur.h&quot;
</span><span class="cx"> #include &quot;IntSize.h&quot;
</span><span class="cx"> #include &quot;LengthFunctions.h&quot;
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> 
</span><span class="cx"> namespace WebCore {
</span><span class="cx"> 
</span><span class="lines">@@ -151,4 +152,18 @@
</span><span class="cx">     return false;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const FilterOperations&amp; filters)
+{
+    for (size_t i = 0; i &lt; filters.size(); ++i) {
+        const auto filter = filters.at(i);
+        if (filter)
+            ts &lt;&lt; *filter;
+        else
+            ts &lt;&lt; &quot;(null)&quot;;
+        if (i &lt; filters.size() - 1)
+            ts &lt;&lt; &quot; &quot;;
+    }
+    return ts;
+}
+
</ins><span class="cx"> } // namespace WebCore
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfiltersFilterOperationsh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/filters/FilterOperations.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/filters/FilterOperations.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/filters/FilterOperations.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -74,6 +74,8 @@
</span><span class="cx">     Vector&lt;RefPtr&lt;FilterOperation&gt;&gt; m_operations;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const FilterOperations&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // FilterOperations_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfiltersPointLightSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/filters/PointLightSource.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/filters/PointLightSource.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/filters/PointLightSource.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -71,12 +71,6 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const FloatPoint3D&amp; p)
-{
-    ts &lt;&lt; &quot;x=&quot; &lt;&lt; p.x() &lt;&lt; &quot; y=&quot; &lt;&lt; p.y() &lt;&lt; &quot; z=&quot; &lt;&lt; p.z();
-    return ts;
-}
-
</del><span class="cx"> TextStream&amp; PointLightSource::externalRepresentation(TextStream&amp; ts) const
</span><span class="cx"> {
</span><span class="cx">     ts &lt;&lt; &quot;[type=POINT-LIGHT] &quot;;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicsfiltersSpotLightSourcecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/filters/SpotLightSource.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/filters/SpotLightSource.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/filters/SpotLightSource.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -175,12 +175,6 @@
</span><span class="cx">     return true;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const FloatPoint3D&amp; p)
-{
-    ts &lt;&lt; &quot;x=&quot; &lt;&lt; p.x() &lt;&lt; &quot; y=&quot; &lt;&lt; p.y() &lt;&lt; &quot; z=&quot; &lt;&lt; p.z();
-    return ts;
-}
-
</del><span class="cx"> TextStream&amp; SpotLightSource::externalRepresentation(TextStream&amp; ts) const
</span><span class="cx"> {
</span><span class="cx">     ts &lt;&lt; &quot;[type=SPOT-LIGHT] &quot;;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstransformsAffineTransformcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &quot;FloatQuad.h&quot;
</span><span class="cx"> #include &quot;FloatRect.h&quot;
</span><span class="cx"> #include &quot;IntRect.h&quot;
</span><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &quot;TransformationMatrix.h&quot;
</span><span class="cx"> 
</span><span class="cx"> #include &lt;wtf/MathExtras.h&gt;
</span><span class="lines">@@ -425,4 +426,20 @@
</span><span class="cx">     this-&gt;scale(decomp.scaleX, decomp.scaleY);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const AffineTransform&amp; transform)
+{
+    if (transform.isIdentity())
+        ts &lt;&lt; &quot;identity&quot;;
+    else
+        ts &lt;&lt; &quot;{m=((&quot;
+        &lt;&lt; transform.a() &lt;&lt; &quot;,&quot; &lt;&lt; transform.b()
+        &lt;&lt; &quot;)(&quot;
+        &lt;&lt; transform.c() &lt;&lt; &quot;,&quot; &lt;&lt; transform.d()
+        &lt;&lt; &quot;)) t=(&quot;
+        &lt;&lt; transform.e() &lt;&lt; &quot;,&quot; &lt;&lt; transform.f()
+        &lt;&lt; &quot;)}&quot;;
+
+    return ts;
</ins><span class="cx"> }
</span><ins>+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstransformsAffineTransformh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/transforms/AffineTransform.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -46,6 +46,7 @@
</span><span class="cx"> class IntPoint;
</span><span class="cx"> class IntSize;
</span><span class="cx"> class IntRect;
</span><ins>+class TextStream;
</ins><span class="cx"> class TransformationMatrix;
</span><span class="cx"> 
</span><span class="cx"> class AffineTransform {
</span><span class="lines">@@ -193,6 +194,8 @@
</span><span class="cx"> 
</span><span class="cx"> AffineTransform makeMapBetweenRects(const FloatRect&amp; source, const FloatRect&amp; dest);
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const AffineTransform&amp;);
+
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> #endif
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstransformsTransformationMatrixcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -32,7 +32,7 @@
</span><span class="cx"> #include &quot;FloatQuad.h&quot;
</span><span class="cx"> #include &quot;IntRect.h&quot;
</span><span class="cx"> #include &quot;LayoutRect.h&quot;
</span><del>-
</del><ins>+#include &quot;TextStream.h&quot;
</ins><span class="cx"> #include &lt;wtf/Assertions.h&gt;
</span><span class="cx"> #include &lt;wtf/MathExtras.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -1742,4 +1742,20 @@
</span><span class="cx">     return zComponentOfTransformedNormal &lt; 0;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const TransformationMatrix&amp; transform)
+{
+    ts &lt;&lt; &quot;\n&quot;;
+    ts.increaseIndent();
+    ts.writeIndent();
+    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m11() &lt;&lt; &quot; &quot; &lt;&lt; transform.m12() &lt;&lt; &quot; &quot; &lt;&lt; transform.m13() &lt;&lt; &quot; &quot; &lt;&lt; transform.m14() &lt;&lt; &quot;]\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m21() &lt;&lt; &quot; &quot; &lt;&lt; transform.m22() &lt;&lt; &quot; &quot; &lt;&lt; transform.m23() &lt;&lt; &quot; &quot; &lt;&lt; transform.m24() &lt;&lt; &quot;]\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m31() &lt;&lt; &quot; &quot; &lt;&lt; transform.m32() &lt;&lt; &quot; &quot; &lt;&lt; transform.m33() &lt;&lt; &quot; &quot; &lt;&lt; transform.m34() &lt;&lt; &quot;]\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m41() &lt;&lt; &quot; &quot; &lt;&lt; transform.m42() &lt;&lt; &quot; &quot; &lt;&lt; transform.m43() &lt;&lt; &quot; &quot; &lt;&lt; transform.m44() &lt;&lt; &quot;]&quot;;
+    ts.decreaseIndent();
+    return ts;
</ins><span class="cx"> }
</span><ins>+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicstransformsTransformationMatrixh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/graphics/transforms/TransformationMatrix.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -56,6 +56,7 @@
</span><span class="cx"> class LayoutRect;
</span><span class="cx"> class FloatRect;
</span><span class="cx"> class FloatQuad;
</span><ins>+class TextStream;
</ins><span class="cx"> 
</span><span class="cx"> #if CPU(X86_64)
</span><span class="cx"> #define TRANSFORMATION_MATRIX_USE_X86_64_SSE2
</span><span class="lines">@@ -413,6 +414,8 @@
</span><span class="cx">     Matrix4 m_matrix;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(TextStream&amp;, const TransformationMatrix&amp;);
+
</ins><span class="cx"> } // namespace WebCore
</span><span class="cx"> 
</span><span class="cx"> #endif // TransformationMatrix_h
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformtextTextStreamcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/text/TextStream.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/text/TextStream.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/text/TextStream.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -139,6 +139,34 @@
</span><span class="cx">     return result;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void TextStream::startGroup()
+{
+    TextStream&amp; ts = *this;
+    ts &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+    ts &lt;&lt; &quot;(&quot;;
+    ts.increaseIndent();
+}
+
+void TextStream::endGroup()
+{
+    TextStream&amp; ts = *this;
+    ts &lt;&lt; &quot;)&quot;;
+    ts.decreaseIndent();
+}
+
+void TextStream::nextLine()
+{
+    TextStream&amp; ts = *this;
+    ts &lt;&lt; &quot;\n&quot;;
+    ts.writeIndent();
+}
+
+void TextStream::writeIndent()
+{
+    WebCore::writeIndent(*this, m_indent);
+}
+
</ins><span class="cx"> void writeIndent(TextStream&amp; ts, int indent)
</span><span class="cx"> {
</span><span class="cx">     for (int i = 0; i != indent; ++i)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformtextTextStreamh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/text/TextStream.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/text/TextStream.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/platform/text/TextStream.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -47,40 +47,75 @@
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(bool);
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(int);
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(unsigned);
</span><del>-    TextStream&amp; operator&lt;&lt;(long);
-    TextStream&amp; operator&lt;&lt;(unsigned long);
-    TextStream&amp; operator&lt;&lt;(long long);
</del><ins>+    WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(long);
+    WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(unsigned long);
+    WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(long long);
+    WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(LayoutUnit);
+
</ins><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(unsigned long long);
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(float);
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(double);
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(const char*);
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(const void*);
</span><span class="cx">     WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(const String&amp;);
</span><del>-    TextStream&amp; operator&lt;&lt;(const FormatNumberRespectingIntegers&amp;);
</del><ins>+    WEBCORE_EXPORT TextStream&amp; operator&lt;&lt;(const FormatNumberRespectingIntegers&amp;);
</ins><span class="cx"> 
</span><del>-    TextStream&amp; operator&lt;&lt;(LayoutUnit);
-
-    template&lt;typename Item&gt;
-    TextStream&amp; operator&lt;&lt;(const Vector&lt;Item&gt;&amp; vector)
</del><ins>+    template&lt;typename T&gt;
+    void dumpProperty(const String&amp; name, const T&amp; value)
</ins><span class="cx">     {
</span><del>-        *this &lt;&lt; &quot;[&quot;;
</del><ins>+        TextStream&amp; ts = *this;
+        ts.startGroup();
+        ts &lt;&lt; name &lt;&lt; &quot; &quot; &lt;&lt; value;
+        ts.endGroup();
+    }
</ins><span class="cx"> 
</span><del>-        unsigned size = vector.size();
-        for (unsigned i = 0; i &lt; size; ++i) {
-            *this &lt;&lt; vector[i];
-            if (i &lt; size - 1)
-                *this &lt;&lt; &quot;, &quot;;
</del><ins>+    WEBCORE_EXPORT String release();
+    
+    WEBCORE_EXPORT void startGroup();
+    WEBCORE_EXPORT void endGroup();
+    WEBCORE_EXPORT void nextLine(); // Output newline and indent.
+
+    WEBCORE_EXPORT void increaseIndent() { ++m_indent; }
+    WEBCORE_EXPORT void decreaseIndent() { --m_indent; ASSERT(m_indent &gt;= 0); }
+
+    WEBCORE_EXPORT void writeIndent();
+
+    class GroupScope {
+    public:
+        GroupScope(TextStream&amp; ts)
+            : m_stream(ts)
+        {
+            m_stream.startGroup();
</ins><span class="cx">         }
</span><ins>+        ~GroupScope()
+        {
+            m_stream.endGroup();
+        }
</ins><span class="cx"> 
</span><del>-        return *this &lt;&lt; &quot;]&quot;;
-    }
</del><ins>+    private:
+        TextStream&amp; m_stream;
+    };
</ins><span class="cx"> 
</span><del>-    WEBCORE_EXPORT String release();
-
</del><span class="cx"> private:
</span><span class="cx">     StringBuilder m_text;
</span><ins>+    int m_indent { 0 };
</ins><span class="cx"> };
</span><span class="cx"> 
</span><ins>+template&lt;typename Item&gt;
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const Vector&lt;Item&gt;&amp; vector)
+{
+    ts &lt;&lt; &quot;[&quot;;
+
+    unsigned size = vector.size();
+    for (unsigned i = 0; i &lt; size; ++i) {
+        ts &lt;&lt; vector[i];
+        if (i &lt; size - 1)
+            ts &lt;&lt; &quot;, &quot;;
+    }
+
+    return ts &lt;&lt; &quot;]&quot;;
+}
+
</ins><span class="cx"> void writeIndent(TextStream&amp;, int indent);
</span><span class="cx"> 
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGRenderTreeAsTextcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -118,36 +118,6 @@
</span><span class="cx">         writeNameValuePair(ts, name, value);
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const AffineTransform&amp; transform)
-{
-    if (transform.isIdentity())
-        ts &lt;&lt; &quot;identity&quot;;
-    else
-        ts &lt;&lt; &quot;{m=((&quot;
-           &lt;&lt; transform.a() &lt;&lt; &quot;,&quot; &lt;&lt; transform.b()
-           &lt;&lt; &quot;)(&quot;
-           &lt;&lt; transform.c() &lt;&lt; &quot;,&quot; &lt;&lt; transform.d()
-           &lt;&lt; &quot;)) t=(&quot;
-           &lt;&lt; transform.e() &lt;&lt; &quot;,&quot; &lt;&lt; transform.f()
-           &lt;&lt; &quot;)}&quot;;
-
-    return ts;
-}
-
-static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const WindRule rule)
-{
-    switch (rule) {
-    case RULE_NONZERO:
-        ts &lt;&lt; &quot;NON-ZERO&quot;;
-        break;
-    case RULE_EVENODD:
-        ts &lt;&lt; &quot;EVEN-ODD&quot;;
-        break;
-    }
-
-    return ts;
-}
-
</del><span class="cx"> static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const SVGUnitTypes::SVGUnitType&amp; unitType)
</span><span class="cx"> {
</span><span class="cx">     ts &lt;&lt; SVGPropertyTraits&lt;SVGUnitTypes::SVGUnitType&gt;::toString(unitType);
</span><span class="lines">@@ -160,11 +130,6 @@
</span><span class="cx">     return ts;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const Color&amp; c)
-{
-    return ts &lt;&lt; c.nameForRenderTreeAsText();
-}
-
</del><span class="cx"> // FIXME: Maybe this should be in KCanvasRenderingStyle.cpp
</span><span class="cx"> static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const DashArray&amp; a)
</span><span class="cx"> {
</span><span class="lines">@@ -179,40 +144,6 @@
</span><span class="cx">     return ts;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-// FIXME: Maybe this should be in GraphicsTypes.cpp
-static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, LineCap style)
-{
-    switch (style) {
-    case ButtCap:
-        ts &lt;&lt; &quot;BUTT&quot;;
-        break;
-    case RoundCap:
-        ts &lt;&lt; &quot;ROUND&quot;;
-        break;
-    case SquareCap:
-        ts &lt;&lt; &quot;SQUARE&quot;;
-        break;
-    }
-    return ts;
-}
-
-// FIXME: Maybe this should be in GraphicsTypes.cpp
-static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, LineJoin style)
-{
-    switch (style) {
-    case MiterJoin:
-        ts &lt;&lt; &quot;MITER&quot;;
-        break;
-    case RoundJoin:
-        ts &lt;&lt; &quot;ROUND&quot;;
-        break;
-    case BevelJoin:
-        ts &lt;&lt; &quot;BEVEL&quot;;
-        break;
-    }
-    return ts;
-}
-
</del><span class="cx"> static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const SVGSpreadMethodType&amp; type)
</span><span class="cx"> {
</span><span class="cx">     ts &lt;&lt; SVGPropertyTraits&lt;SVGSpreadMethodType&gt;::toString(type).upper();
</span></span></pre></div>
<a id="trunkSourceWebCorerenderingsvgSVGRenderTreeAsTexth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebCore/rendering/svg/SVGRenderTreeAsText.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -58,11 +58,6 @@
</span><span class="cx"> void writeSVGText(TextStream&amp;, const RenderSVGText&amp;, int indent);
</span><span class="cx"> void writeResources(TextStream&amp;, const RenderObject&amp;, int indent);
</span><span class="cx"> 
</span><del>-// helper operators defined used in various classes to dump the render tree.
-TextStream&amp; operator&lt;&lt;(TextStream&amp;, const AffineTransform&amp;);
-TextStream&amp; operator&lt;&lt;(TextStream&amp;, const Color&amp;);
-TextStream&amp; operator&lt;&lt;(TextStream&amp;, const FloatRect&amp;);
-
</del><span class="cx"> // helper operators specific to dumping the render tree. these are used in various classes to dump the render tree
</span><span class="cx"> // these could be defined in separate namespace to avoid matching these generic signatures unintentionally.
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebKit2/ChangeLog        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -1,3 +1,47 @@
</span><ins>+2015-10-16  Simon Fraser  &lt;simon.fraser@apple.com&gt;
+
+        Enhance TextStream for logging, remove subclasses, log more things
+        https://bugs.webkit.org/show_bug.cgi?id=150269
+
+        Reviewed by Zalan Bujtas.
+
+        Remove the various TextStream subclasses that only existed to support indenting,
+        and output additional types. Add output for more WebCore and WebKit2 types, and
+        just use TextStream everywhere.
+        
+        TextStream is enhance to support grouping (open paren and intent), with a 
+        stack-based class to open/end a group.
+        
+        Remove some SVG-specific duplicate output functions.
+        
+        Outdent namespace contents of GraphicsTypes.h.
+
+        * Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp:
+        (WebKit::dump):
+        (WebKit::recursiveDumpNodes):
+        (WebKit::RemoteScrollingCoordinatorTransaction::description):
+        (WebKit::RemoteScrollingTreeTextStream::RemoteScrollingTreeTextStream): Deleted.
+        (WebKit::RemoteScrollingTreeTextStream::increaseIndent): Deleted.
+        (WebKit::RemoteScrollingTreeTextStream::decreaseIndent): Deleted.
+        (WebKit::RemoteScrollingTreeTextStream::writeIndent): Deleted.
+        (WebKit::dumpProperty): Deleted.
+        (WebKit::RemoteScrollingTreeTextStream::operator&lt;&lt;): Deleted.
+        (WebKit::RemoteScrollingTreeTextStream::dump): Deleted.
+        (WebKit::RemoteScrollingTreeTextStream::recursiveDumpNodes): Deleted.
+        * Shared/mac/RemoteLayerTreeTransaction.mm:
+        (WebKit::operator&lt;&lt;):
+        (WebKit::dumpChangedLayers):
+        (WebKit::RemoteLayerTreeTransaction::description):
+        (WebKit::RemoteLayerTreeTextStream::RemoteLayerTreeTextStream): Deleted.
+        (WebKit::RemoteLayerTreeTextStream::increaseIndent): Deleted.
+        (WebKit::RemoteLayerTreeTextStream::decreaseIndent): Deleted.
+        (WebKit::dumpProperty): Deleted.
+        (WebKit::RemoteLayerTreeTextStream::operator&lt;&lt;): Deleted.
+        (WebKit::RemoteLayerTreeTextStream::writeIndent): Deleted.
+        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.h:
+        * WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm:
+        (WebKit::operator&lt;&lt;):
+
</ins><span class="cx"> 2015-10-17  Hunseop Jeong  &lt;hs85.jeong@samsung.com&gt;
</span><span class="cx"> 
</span><span class="cx">         URTBF after r191194 to fix EFL build.
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedScrollingRemoteScrollingCoordinatorTransactioncpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebKit2/Shared/Scrolling/RemoteScrollingCoordinatorTransaction.cpp        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2014 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2014-2015 Apple Inc. All rights reserved.
</ins><span class="cx">  *
</span><span class="cx">  * Redistribution and use in source and binary forms, with or without
</span><span class="cx">  * modification, are permitted provided that the following conditions
</span><span class="lines">@@ -454,166 +454,44 @@
</span><span class="cx"> 
</span><span class="cx"> #if !defined(NDEBUG) || !LOG_DISABLED
</span><span class="cx"> 
</span><del>-class RemoteScrollingTreeTextStream : public TextStream {
-public:
-    using TextStream::operator&lt;&lt;;
-
-    RemoteScrollingTreeTextStream()
-        : m_indent(0)
-    {
-    }
-
-    RemoteScrollingTreeTextStream&amp; operator&lt;&lt;(ScrollingNodeType);
-
-    RemoteScrollingTreeTextStream&amp; operator&lt;&lt;(const FixedPositionViewportConstraints&amp;);
-    RemoteScrollingTreeTextStream&amp; operator&lt;&lt;(const StickyPositionViewportConstraints&amp;);
-
-    void dump(const ScrollingStateTree&amp;, bool changedPropertiesOnly = true);
-
-    void dump(const ScrollingStateNode&amp;, bool changedPropertiesOnly = true);
-    void dump(const ScrollingStateScrollingNode&amp;, bool changedPropertiesOnly = true);
-    void dump(const ScrollingStateFrameScrollingNode&amp;, bool changedPropertiesOnly = true);
-    void dump(const ScrollingStateOverflowScrollingNode&amp;, bool changedPropertiesOnly = true);
-    void dump(const ScrollingStateFixedNode&amp;, bool changedPropertiesOnly = true);
-    void dump(const ScrollingStateStickyNode&amp;, bool changedPropertiesOnly = true);
-
-    void increaseIndent() { ++m_indent; }
-    void decreaseIndent() { --m_indent; ASSERT(m_indent &gt;= 0); }
-
-    void writeIndent();
-
-private:
-    void recursiveDumpNodes(const ScrollingStateNode&amp;, bool changedPropertiesOnly);
-
-    int m_indent;
-};
-
-void RemoteScrollingTreeTextStream::writeIndent()
</del><ins>+static void dump(TextStream&amp; ts, const ScrollingStateScrollingNode&amp; node, bool changedPropertiesOnly)
</ins><span class="cx"> {
</span><del>-    for (int i = 0; i &lt; m_indent; ++i)
-        *this &lt;&lt; &quot;  &quot;;
-}
-
-template &lt;class T&gt;
-static void dumpProperty(RemoteScrollingTreeTextStream&amp; ts, String name, T value)
-{
-    ts &lt;&lt; &quot;\n&quot;;
-    ts.increaseIndent();
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(&quot; &lt;&lt; name &lt;&lt; &quot; &quot;;
-    ts &lt;&lt; value &lt;&lt; &quot;)&quot;;
-    ts.decreaseIndent();
-}
-
-RemoteScrollingTreeTextStream&amp; RemoteScrollingTreeTextStream::operator&lt;&lt;(ScrollingNodeType nodeType)
-{
-    RemoteScrollingTreeTextStream&amp; ts = *this;
-
-    switch (nodeType) {
-    case FrameScrollingNode: ts &lt;&lt; &quot;frame-scrolling&quot;; break;
-    case OverflowScrollingNode: ts &lt;&lt; &quot;overflow-scrolling&quot;; break;
-    case FixedNode: ts &lt;&lt; &quot;fixed&quot;; break;
-    case StickyNode: ts &lt;&lt; &quot;sticky&quot;; break;
-    }
-
-    return ts;
-}
-
-RemoteScrollingTreeTextStream&amp; RemoteScrollingTreeTextStream::operator&lt;&lt;(const FixedPositionViewportConstraints&amp; constraints)
-{
-    RemoteScrollingTreeTextStream&amp; ts = *this;
-
-    dumpProperty(ts, &quot;viewport-rect-at-last-layout&quot;, constraints.viewportRectAtLastLayout());
-    dumpProperty(ts, &quot;layer-position-at-last-layout&quot;, constraints.layerPositionAtLastLayout());
-
-    return ts;
-}
-
-RemoteScrollingTreeTextStream&amp; RemoteScrollingTreeTextStream::operator&lt;&lt;(const StickyPositionViewportConstraints&amp; constraints)
-{
-    RemoteScrollingTreeTextStream&amp; ts = *this;
-
-    dumpProperty(ts, &quot;sticky-position-at-last-layout&quot;, constraints.stickyOffsetAtLastLayout());
-    dumpProperty(ts, &quot;layer-position-at-last-layout&quot;, constraints.layerPositionAtLastLayout());
-
-    return ts;
-}
-
-void RemoteScrollingTreeTextStream::dump(const ScrollingStateNode&amp; node, bool changedPropertiesOnly)
-{
-    RemoteScrollingTreeTextStream&amp; ts = *this;
-
-    ts &lt;&lt; &quot;(node &quot; &lt;&lt; node.scrollingNodeID();
-
-    dumpProperty(ts, &quot;type&quot;, node.nodeType());
-
-    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateNode::ScrollLayer))
-        dumpProperty(ts, &quot;layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.layer()));
-    
-    switch (node.nodeType()) {
-    case FrameScrollingNode:
-        dump(downcast&lt;ScrollingStateFrameScrollingNode&gt;(node), changedPropertiesOnly);
-        break;
-    case OverflowScrollingNode:
-        dump(downcast&lt;ScrollingStateOverflowScrollingNode&gt;(node), changedPropertiesOnly);
-        break;
-    case FixedNode:
-        dump(downcast&lt;ScrollingStateFixedNode&gt;(node), changedPropertiesOnly);
-        break;
-    case StickyNode:
-        dump(downcast&lt;ScrollingStateStickyNode&gt;(node), changedPropertiesOnly);
-        break;
-    }
-}
-    
-void RemoteScrollingTreeTextStream::dump(const ScrollingStateScrollingNode&amp; node, bool changedPropertiesOnly)
-{
-    RemoteScrollingTreeTextStream&amp; ts = *this;
-    
</del><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollableAreaSize))
</span><del>-        dumpProperty(ts, &quot;scrollable-area-size&quot;, node.scrollableAreaSize());
</del><ins>+        ts.dumpProperty(&quot;scrollable-area-size&quot;, node.scrollableAreaSize());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::TotalContentsSize))
</span><del>-        dumpProperty(ts, &quot;total-contents-size&quot;, node.totalContentsSize());
</del><ins>+        ts.dumpProperty(&quot;total-contents-size&quot;, node.totalContentsSize());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ReachableContentsSize))
</span><del>-        dumpProperty(ts, &quot;reachable-contents-size&quot;, node.reachableContentsSize());
</del><ins>+        ts.dumpProperty(&quot;reachable-contents-size&quot;, node.reachableContentsSize());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollPosition))
</span><del>-        dumpProperty(ts, &quot;scroll-position&quot;, node.scrollPosition());
</del><ins>+        ts.dumpProperty(&quot;scroll-position&quot;, node.scrollPosition());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::ScrollOrigin))
</span><del>-        dumpProperty(ts, &quot;scroll-origin&quot;, node.scrollOrigin());
</del><ins>+        ts.dumpProperty(&quot;scroll-origin&quot;, node.scrollOrigin());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateScrollingNode::RequestedScrollPosition)) {
</span><del>-        dumpProperty(ts, &quot;requested-scroll-position&quot;, node.requestedScrollPosition());
-        dumpProperty(ts, &quot;requested-scroll-position-is-programatic&quot;, node.requestedScrollPositionRepresentsProgrammaticScroll());
</del><ins>+        ts.dumpProperty(&quot;requested-scroll-position&quot;, node.requestedScrollPosition());
+        ts.dumpProperty(&quot;requested-scroll-position-is-programatic&quot;, node.requestedScrollPositionRepresentsProgrammaticScroll());
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx">     
</span><del>-void RemoteScrollingTreeTextStream::dump(const ScrollingStateFrameScrollingNode&amp; node, bool changedPropertiesOnly)
</del><ins>+static void dump(TextStream&amp; ts, const ScrollingStateFrameScrollingNode&amp; node, bool changedPropertiesOnly)
</ins><span class="cx"> {
</span><del>-    RemoteScrollingTreeTextStream&amp; ts = *this;
</del><ins>+    dump(ts, static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node), changedPropertiesOnly);
</ins><span class="cx">     
</span><del>-    dump(static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node), changedPropertiesOnly);
-    
</del><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FrameScaleFactor))
</span><del>-        dumpProperty(ts, &quot;frame-scale-factor&quot;, node.frameScaleFactor());
</del><ins>+        ts.dumpProperty(&quot;frame-scale-factor&quot;, node.frameScaleFactor());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::NonFastScrollableRegion)) {
</span><del>-        ts &lt;&lt; &quot;\n&quot;;
-        ts.increaseIndent();
-        ts.writeIndent();
-        ts &lt;&lt; &quot;(non-fast-scrollable-region&quot;;
-        ts.increaseIndent();
</del><ins>+        TextStream::GroupScope group(ts);
+        ts &lt;&lt; &quot;non-fast-scrollable-region&quot;;
</ins><span class="cx">         for (auto rect : node.nonFastScrollableRegion().rects()) {
</span><span class="cx">             ts &lt;&lt; &quot;\n&quot;;
</span><span class="cx">             ts.writeIndent();
</span><span class="cx">             ts &lt;&lt; rect;
</span><span class="cx">         }
</span><del>-        ts &lt;&lt; &quot;)\n&quot;;
-        ts.decreaseIndent();
-        ts.decreaseIndent();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     // FIXME: dump synchronousScrollingReasons
</span><span class="lines">@@ -621,123 +499,122 @@
</span><span class="cx">     // FIXME: dump scrollBehaviorForFixedElements
</span><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderHeight))
</span><del>-        dumpProperty(ts, &quot;header-height&quot;, node.headerHeight());
</del><ins>+        ts.dumpProperty(&quot;header-height&quot;, node.headerHeight());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterHeight))
</span><del>-        dumpProperty(ts, &quot;footer-height&quot;, node.footerHeight());
</del><ins>+        ts.dumpProperty(&quot;footer-height&quot;, node.footerHeight());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::TopContentInset))
</span><del>-        dumpProperty(ts, &quot;top-content-inset&quot;, node.topContentInset());
</del><ins>+        ts.dumpProperty(&quot;top-content-inset&quot;, node.topContentInset());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FrameScaleFactor))
</span><del>-        dumpProperty(ts, &quot;frame-scale-factor&quot;, node.frameScaleFactor());
</del><ins>+        ts.dumpProperty(&quot;frame-scale-factor&quot;, node.frameScaleFactor());
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::ScrolledContentsLayer))
</span><del>-        dumpProperty(ts, &quot;scrolled-contents-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer()));
</del><ins>+        ts.dumpProperty(&quot;scrolled-contents-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer()));
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::InsetClipLayer))
</span><del>-        dumpProperty(ts, &quot;clip-inset-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.insetClipLayer()));
</del><ins>+        ts.dumpProperty(&quot;clip-inset-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.insetClipLayer()));
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::ContentShadowLayer))
</span><del>-        dumpProperty(ts, &quot;content-shadow-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.contentShadowLayer()));
</del><ins>+        ts.dumpProperty(&quot;content-shadow-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.contentShadowLayer()));
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::HeaderLayer))
</span><del>-        dumpProperty(ts, &quot;header-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.headerLayer()));
</del><ins>+        ts.dumpProperty(&quot;header-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.headerLayer()));
</ins><span class="cx"> 
</span><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFrameScrollingNode::FooterLayer))
</span><del>-        dumpProperty(ts, &quot;footer-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.footerLayer()));
</del><ins>+        ts.dumpProperty(&quot;footer-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.footerLayer()));
</ins><span class="cx"> }
</span><span class="cx">     
</span><del>-void RemoteScrollingTreeTextStream::dump(const ScrollingStateOverflowScrollingNode&amp; node, bool changedPropertiesOnly)
</del><ins>+static void dump(TextStream&amp; ts, const ScrollingStateOverflowScrollingNode&amp; node, bool changedPropertiesOnly)
</ins><span class="cx"> {
</span><del>-    RemoteScrollingTreeTextStream&amp; ts = *this;
</del><ins>+    dump(ts, static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node), changedPropertiesOnly);
</ins><span class="cx">     
</span><del>-    dump(static_cast&lt;const ScrollingStateScrollingNode&amp;&gt;(node), changedPropertiesOnly);
-    
</del><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateOverflowScrollingNode::ScrolledContentsLayer))
</span><del>-        dumpProperty(ts, &quot;scrolled-contents-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer()));
</del><ins>+        ts.dumpProperty(&quot;scrolled-contents-layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.scrolledContentsLayer()));
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RemoteScrollingTreeTextStream::dump(const ScrollingStateFixedNode&amp; node, bool changedPropertiesOnly)
</del><ins>+static void dump(TextStream&amp; ts, const ScrollingStateFixedNode&amp; node, bool changedPropertiesOnly)
</ins><span class="cx"> {
</span><del>-    RemoteScrollingTreeTextStream&amp; ts = *this;
-
</del><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints))
</span><span class="cx">         ts &lt;&lt; node.viewportConstraints();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RemoteScrollingTreeTextStream::dump(const ScrollingStateStickyNode&amp; node, bool changedPropertiesOnly)
</del><ins>+static void dump(TextStream&amp; ts, const ScrollingStateStickyNode&amp; node, bool changedPropertiesOnly)
</ins><span class="cx"> {
</span><del>-    RemoteScrollingTreeTextStream&amp; ts = *this;
-
</del><span class="cx">     if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateFixedNode::ViewportConstraints))
</span><span class="cx">         ts &lt;&lt; node.viewportConstraints();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RemoteScrollingTreeTextStream::recursiveDumpNodes(const ScrollingStateNode&amp; node, bool changedPropertiesOnly)
</del><ins>+static void dump(TextStream&amp; ts, const ScrollingStateNode&amp; node, bool changedPropertiesOnly)
</ins><span class="cx"> {
</span><del>-    RemoteScrollingTreeTextStream&amp; ts = *this;
</del><ins>+    ts.dumpProperty(&quot;type&quot;, node.nodeType());
</ins><span class="cx"> 
</span><del>-    ts &lt;&lt; &quot;\n&quot;;
-    ts.increaseIndent();
-    ts.writeIndent();
-    dump(node, changedPropertiesOnly);
</del><ins>+    if (!changedPropertiesOnly || node.hasChangedProperty(ScrollingStateNode::ScrollLayer))
+        ts.dumpProperty(&quot;layer&quot;, static_cast&lt;GraphicsLayer::PlatformLayerID&gt;(node.layer()));
+    
+    switch (node.nodeType()) {
+    case FrameScrollingNode:
+        dump(ts, downcast&lt;ScrollingStateFrameScrollingNode&gt;(node), changedPropertiesOnly);
+        break;
+    case OverflowScrollingNode:
+        dump(ts, downcast&lt;ScrollingStateOverflowScrollingNode&gt;(node), changedPropertiesOnly);
+        break;
+    case FixedNode:
+        dump(ts, downcast&lt;ScrollingStateFixedNode&gt;(node), changedPropertiesOnly);
+        break;
+    case StickyNode:
+        dump(ts, downcast&lt;ScrollingStateStickyNode&gt;(node), changedPropertiesOnly);
+        break;
+    }
+}
</ins><span class="cx"> 
</span><ins>+static void recursiveDumpNodes(TextStream&amp; ts, const ScrollingStateNode&amp; node, bool changedPropertiesOnly)
+{
+    TextStream::GroupScope group(ts);
+    ts &lt;&lt; &quot;node &quot; &lt;&lt; node.scrollingNodeID();
+    dump(ts, node, changedPropertiesOnly);
+
</ins><span class="cx">     if (node.children()) {
</span><del>-        ts &lt;&lt; &quot;\n&quot;;
-        ts.increaseIndent();
-        ts.writeIndent();
-        ts &lt;&lt; &quot;(children&quot;;
-        ts.increaseIndent();
</del><ins>+        TextStream::GroupScope group(ts);
+        ts &lt;&lt; &quot;children&quot;;
</ins><span class="cx"> 
</span><span class="cx">         for (auto&amp; childNode : *node.children())
</span><del>-            recursiveDumpNodes(*childNode, changedPropertiesOnly);
-
-        ts &lt;&lt; &quot;)&quot;;
-        ts.decreaseIndent();
-        ts.decreaseIndent();
</del><ins>+            recursiveDumpNodes(ts, *childNode, changedPropertiesOnly);
</ins><span class="cx">     }
</span><del>-
-    ts &lt;&lt; &quot;)&quot;;
-    ts.decreaseIndent();
</del><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RemoteScrollingTreeTextStream::dump(const ScrollingStateTree&amp; stateTree, bool changedPropertiesOnly)
</del><ins>+static void dump(TextStream&amp; ts, const ScrollingStateTree&amp; stateTree, bool changedPropertiesOnly)
</ins><span class="cx"> {
</span><del>-    RemoteScrollingTreeTextStream&amp; ts = *this;
</del><ins>+    ts.dumpProperty(&quot;has changed properties&quot;, stateTree.hasChangedProperties());
+    ts.dumpProperty(&quot;has new root node&quot;, stateTree.hasNewRootStateNode());
</ins><span class="cx"> 
</span><del>-    dumpProperty(ts, &quot;has changed properties&quot;, stateTree.hasChangedProperties());
-    dumpProperty(ts, &quot;has new root node&quot;, stateTree.hasNewRootStateNode());
-
</del><span class="cx">     if (stateTree.rootStateNode())
</span><del>-        recursiveDumpNodes(*stateTree.rootStateNode(), changedPropertiesOnly);
</del><ins>+        recursiveDumpNodes(ts, *stateTree.rootStateNode(), changedPropertiesOnly);
</ins><span class="cx"> 
</span><span class="cx">     if (!stateTree.removedNodes().isEmpty()) {
</span><span class="cx">         Vector&lt;ScrollingNodeID&gt; removedNodes;
</span><span class="cx">         copyToVector(stateTree.removedNodes(), removedNodes);
</span><del>-        dumpProperty&lt;Vector&lt;ScrollingNodeID&gt;&gt;(ts, &quot;removed-nodes&quot;, removedNodes);
</del><ins>+        ts.dumpProperty&lt;Vector&lt;ScrollingNodeID&gt;&gt;(&quot;removed-nodes&quot;, removedNodes);
</ins><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> WTF::CString RemoteScrollingCoordinatorTransaction::description() const
</span><span class="cx"> {
</span><del>-    RemoteScrollingTreeTextStream ts;
</del><ins>+    TextStream ts;
</ins><span class="cx"> 
</span><del>-    ts &lt;&lt; &quot;(\n&quot;;
-    ts.increaseIndent();
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(scrolling state tree&quot;;
</del><ins>+    ts.startGroup();
+    ts &lt;&lt; &quot;scrolling state tree&quot;;
</ins><span class="cx"> 
</span><span class="cx">     if (m_scrollingStateTree) {
</span><span class="cx">         if (!m_scrollingStateTree-&gt;hasChangedProperties())
</span><span class="cx">             ts &lt;&lt; &quot; - no changes&quot;;
</span><span class="cx">         else
</span><del>-            ts.dump(*m_scrollingStateTree.get());
</del><ins>+            WebKit::dump(ts, *m_scrollingStateTree.get(), true);
</ins><span class="cx">     } else
</span><span class="cx">         ts &lt;&lt; &quot; - none&quot;;
</span><span class="cx"> 
</span><del>-    ts &lt;&lt; &quot;)\n&quot;;
-    ts.decreaseIndent();
</del><ins>+    ts.endGroup();
</ins><span class="cx"> 
</span><span class="cx">     return ts.release().utf8();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedmacRemoteLayerTreeTransactionmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebKit2/Shared/mac/RemoteLayerTreeTransaction.mm        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -647,433 +647,8 @@
</span><span class="cx"> 
</span><span class="cx"> #if !defined(NDEBUG) || !LOG_DISABLED
</span><span class="cx"> 
</span><del>-class RemoteLayerTreeTextStream : public TextStream
</del><ins>+static TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const RemoteLayerBackingStore&amp; backingStore)
</ins><span class="cx"> {
</span><del>-public:
-    using TextStream::operator&lt;&lt;;
-
-    RemoteLayerTreeTextStream()
-        : m_indent(0)
-    {
-    }
-
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const TransformationMatrix&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(PlatformCALayer::FilterType);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const FloatRoundedRect&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(FloatPoint3D);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(Color);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const Vector&lt;WebCore::GraphicsLayer::PlatformLayerID&gt;&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const FilterOperation&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const FilterOperations&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const PlatformCAAnimationRemote::Properties&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const RemoteLayerBackingStore&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const WebCore::GraphicsLayer::CustomAppearance&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(BlendMode);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(PlatformCAAnimation::AnimationType);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(PlatformCAAnimation::FillModeType);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(PlatformCAAnimation::ValueFunctionType);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const TimingFunction&amp;);
-    RemoteLayerTreeTextStream&amp; operator&lt;&lt;(const PlatformCAAnimationRemote::KeyframeValue&amp;);
-
-    void increaseIndent() { ++m_indent; }
-    void decreaseIndent() { --m_indent; ASSERT(m_indent &gt;= 0); }
-
-    void writeIndent();
-
-private:
-    int m_indent;
-};
-
-template &lt;class T&gt;
-static void dumpProperty(RemoteLayerTreeTextStream&amp; ts, String name, T value)
-{
-    ts &lt;&lt; &quot;\n&quot;;
-    ts.increaseIndent();
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(&quot; &lt;&lt; name &lt;&lt; &quot; &quot;;
-    ts &lt;&lt; value &lt;&lt; &quot;)&quot;;
-    ts.decreaseIndent();
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const TransformationMatrix&amp; transform)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    ts &lt;&lt; &quot;\n&quot;;
-    ts.increaseIndent();
-    ts.writeIndent();
-    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m11() &lt;&lt; &quot; &quot; &lt;&lt; transform.m12() &lt;&lt; &quot; &quot; &lt;&lt; transform.m13() &lt;&lt; &quot; &quot; &lt;&lt; transform.m14() &lt;&lt; &quot;]\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m21() &lt;&lt; &quot; &quot; &lt;&lt; transform.m22() &lt;&lt; &quot; &quot; &lt;&lt; transform.m23() &lt;&lt; &quot; &quot; &lt;&lt; transform.m24() &lt;&lt; &quot;]\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m31() &lt;&lt; &quot; &quot; &lt;&lt; transform.m32() &lt;&lt; &quot; &quot; &lt;&lt; transform.m33() &lt;&lt; &quot; &quot; &lt;&lt; transform.m34() &lt;&lt; &quot;]\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;[&quot; &lt;&lt; transform.m41() &lt;&lt; &quot; &quot; &lt;&lt; transform.m42() &lt;&lt; &quot; &quot; &lt;&lt; transform.m43() &lt;&lt; &quot; &quot; &lt;&lt; transform.m44() &lt;&lt; &quot;]&quot;;
-    ts.decreaseIndent();
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const FloatRoundedRect&amp; roundedRect)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    ts &lt;&lt; roundedRect.rect().x() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.rect().y() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.rect().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.rect().height() &lt;&lt; &quot;\n&quot;;
-
-    ts.increaseIndent();
-    ts.writeIndent();
-    ts &lt;&lt; &quot;topLeft=&quot; &lt;&lt; roundedRect.topLeftCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.topLeftCorner().height() &lt;&lt; &quot;\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;topRight=&quot; &lt;&lt; roundedRect.topRightCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.topRightCorner().height() &lt;&lt; &quot;\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;bottomLeft=&quot; &lt;&lt; roundedRect.bottomLeftCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.bottomLeftCorner().height() &lt;&lt; &quot;\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;bottomRight=&quot; &lt;&lt; roundedRect.bottomRightCorner().width() &lt;&lt; &quot; &quot; &lt;&lt; roundedRect.bottomRightCorner().height();
-    ts.decreaseIndent();
-
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(PlatformCALayer::FilterType filterType)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (filterType) {
-    case PlatformCALayer::Linear:
-        ts &lt;&lt; &quot;linear&quot;;
-        break;
-    case PlatformCALayer::Nearest:
-        ts &lt;&lt; &quot;nearest&quot;;
-        break;
-    case PlatformCALayer::Trilinear:
-        ts &lt;&lt; &quot;trilinear&quot;;
-        break;
-    default:
-        ASSERT_NOT_REACHED();
-        break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const FilterOperations&amp; filters)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    for (size_t i = 0; i &lt; filters.size(); ++i) {
-        const auto filter = filters.at(i);
-        if (filter)
-            ts &lt;&lt; *filter;
-        else
-            ts &lt;&lt; &quot;(null)&quot;;
-        if (i &lt; filters.size() - 1)
-            ts &lt;&lt; &quot; &quot;;
-    }
-    return ts;
-}
-    
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const FilterOperation&amp; filter)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (filter.type()) {
-    case FilterOperation::REFERENCE:
-        ts &lt;&lt; &quot;reference&quot;;
-        break;
-    case FilterOperation::GRAYSCALE: {
-        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;grayscale(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::SEPIA: {
-        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;sepia(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::SATURATE: {
-        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;saturate(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::HUE_ROTATE: {
-        const auto&amp; colorMatrixFilter = downcast&lt;BasicColorMatrixFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;hue-rotate(&quot; &lt;&lt; colorMatrixFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::INVERT: {
-        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;invert(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::OPACITY: {
-        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;opacity(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::BRIGHTNESS: {
-        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;brightness(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::CONTRAST: {
-        const auto&amp; componentTransferFilter = downcast&lt;BasicComponentTransferFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;contrast(&quot; &lt;&lt; componentTransferFilter.amount() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::BLUR: {
-        const auto&amp; blurFilter = downcast&lt;BlurFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;blur(&quot; &lt;&lt; floatValueForLength(blurFilter.stdDeviation(), 0) &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::DROP_SHADOW: {
-        const auto&amp; dropShadowFilter = downcast&lt;DropShadowFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;drop-shadow(&quot; &lt;&lt; dropShadowFilter.x() &lt;&lt; &quot; &quot; &lt;&lt; dropShadowFilter.y() &lt;&lt; &quot; &quot; &lt;&lt; dropShadowFilter.location() &lt;&lt; &quot; &quot;;
-        ts &lt;&lt; dropShadowFilter.color() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case FilterOperation::PASSTHROUGH:
-        ts &lt;&lt; &quot;passthrough&quot;;
-        break;
-    case FilterOperation::DEFAULT: {
-        const auto&amp; defaultFilter = downcast&lt;DefaultFilterOperation&gt;(filter);
-        ts &lt;&lt; &quot;default type=&quot; &lt;&lt; (int)defaultFilter.representedType();
-        break;
-    }
-    case FilterOperation::NONE:
-        ts &lt;&lt; &quot;none&quot;;
-        break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const WebCore::GraphicsLayer::CustomAppearance&amp; customAppearance)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (customAppearance) {
-    case WebCore::GraphicsLayer::CustomAppearance::NoCustomAppearance: ts &lt;&lt; &quot;none&quot;; break;
-    case WebCore::GraphicsLayer::CustomAppearance::ScrollingOverhang: ts &lt;&lt; &quot;scrolling-overhang&quot;; break;
-    case WebCore::GraphicsLayer::CustomAppearance::ScrollingShadow: ts &lt;&lt; &quot;scrolling-shadow&quot;; break;
-    case WebCore::GraphicsLayer::CustomAppearance::LightBackdropAppearance: ts &lt;&lt; &quot;light-backdrop&quot;; break;
-    case WebCore::GraphicsLayer::CustomAppearance::DarkBackdropAppearance: ts &lt;&lt; &quot;dark-backdrop&quot;; break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(BlendMode blendMode)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (blendMode) {
-    case BlendModeNormal: ts &lt;&lt; &quot;normal&quot;; break;
-    case BlendModeMultiply: ts &lt;&lt; &quot;multiply&quot;; break;
-    case BlendModeScreen: ts &lt;&lt; &quot;screen&quot;; break;
-    case BlendModeOverlay: ts &lt;&lt; &quot;overlay&quot;; break;
-    case BlendModeDarken: ts &lt;&lt; &quot;darken&quot;; break;
-    case BlendModeLighten: ts &lt;&lt; &quot;lighten&quot;; break;
-    case BlendModeColorDodge: ts &lt;&lt; &quot;color-dodge&quot;; break;
-    case BlendModeColorBurn: ts &lt;&lt; &quot;color-burn&quot;; break;
-    case BlendModeHardLight: ts &lt;&lt; &quot;hard-light&quot;; break;
-    case BlendModeSoftLight: ts &lt;&lt; &quot;soft-light&quot;; break;
-    case BlendModeDifference: ts &lt;&lt; &quot;difference&quot;; break;
-    case BlendModeExclusion: ts &lt;&lt; &quot;exclusion&quot;; break;
-    case BlendModeHue: ts &lt;&lt; &quot;hue&quot;; break;
-    case BlendModeSaturation: ts &lt;&lt; &quot;saturation&quot;; break;
-    case BlendModeColor: ts &lt;&lt; &quot;color&quot;; break;
-    case BlendModeLuminosity: ts &lt;&lt; &quot;luminosity&quot;; break;
-    case BlendModePlusDarker: ts &lt;&lt; &quot;plus-darker&quot;; break;
-    case BlendModePlusLighter: ts &lt;&lt; &quot;plus-lighter&quot;; break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(PlatformCAAnimation::AnimationType type)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (type) {
-    case PlatformCAAnimation::Basic: ts &lt;&lt; &quot;basic&quot;; break;
-    case PlatformCAAnimation::Keyframe: ts &lt;&lt; &quot;keyframe&quot;; break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(PlatformCAAnimation::FillModeType type)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (type) {
-    case PlatformCAAnimation::NoFillMode: ts &lt;&lt; &quot;none&quot;; break;
-    case PlatformCAAnimation::Forwards: ts &lt;&lt; &quot;forwards&quot;; break;
-    case PlatformCAAnimation::Backwards: ts &lt;&lt; &quot;backwards&quot;; break;
-    case PlatformCAAnimation::Both: ts &lt;&lt; &quot;both&quot;; break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(PlatformCAAnimation::ValueFunctionType type)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (type) {
-    case PlatformCAAnimation::NoValueFunction: ts &lt;&lt; &quot;none&quot;; break;
-    case PlatformCAAnimation::RotateX: ts &lt;&lt; &quot;rotateX&quot;; break;
-    case PlatformCAAnimation::RotateY: ts &lt;&lt; &quot;rotateY&quot;; break;
-    case PlatformCAAnimation::RotateZ: ts &lt;&lt; &quot;rotateX&quot;; break;
-    case PlatformCAAnimation::ScaleX: ts &lt;&lt; &quot;scaleX&quot;; break;
-    case PlatformCAAnimation::ScaleY: ts &lt;&lt; &quot;scaleY&quot;; break;
-    case PlatformCAAnimation::ScaleZ: ts &lt;&lt; &quot;scaleX&quot;; break;
-    case PlatformCAAnimation::Scale: ts &lt;&lt; &quot;scale&quot;; break;
-    case PlatformCAAnimation::TranslateX: ts &lt;&lt; &quot;translateX&quot;; break;
-    case PlatformCAAnimation::TranslateY: ts &lt;&lt; &quot;translateY&quot;; break;
-    case PlatformCAAnimation::TranslateZ: ts &lt;&lt; &quot;translateZ&quot;; break;
-    case PlatformCAAnimation::Translate: ts &lt;&lt; &quot;translate&quot;; break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const PlatformCAAnimationRemote::KeyframeValue&amp; value)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-
-    switch (value.keyframeType()) {
-    case PlatformCAAnimationRemote::KeyframeValue::NumberKeyType:
-        ts &lt;&lt; &quot;number=&quot; &lt;&lt; value.numberValue();
-        break;
-    case PlatformCAAnimationRemote::KeyframeValue::ColorKeyType:
-        ts &lt;&lt; &quot;color=&quot;;
-        ts &lt;&lt; value.colorValue();
-        break;
-    case PlatformCAAnimationRemote::KeyframeValue::PointKeyType:
-        ts &lt;&lt; &quot;point=&quot;;
-        ts &lt;&lt; value.pointValue();
-        break;
-    case PlatformCAAnimationRemote::KeyframeValue::TransformKeyType:
-        ts &lt;&lt; &quot;transform=&quot;;
-        ts &lt;&lt; value.transformValue();
-        break;
-    case PlatformCAAnimationRemote::KeyframeValue::FilterKeyType:
-        ts &lt;&lt; &quot;filter=&quot;;
-        if (value.filterValue())
-            ts &lt;&lt; *value.filterValue();
-        else
-            ts &lt;&lt; &quot;null&quot;;
-        break;
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const TimingFunction&amp; timingFunction)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    switch (timingFunction.type()) {
-    case TimingFunction::LinearFunction:
-        ts &lt;&lt; &quot;linear&quot;;
-        break;
-    case TimingFunction::CubicBezierFunction: {
-        const CubicBezierTimingFunction&amp; cubicBezierFunction = static_cast&lt;const CubicBezierTimingFunction&amp;&gt;(timingFunction);
-        ts &lt;&lt; &quot;cubic-bezier(&quot; &lt;&lt; cubicBezierFunction.x1() &lt;&lt; &quot;, &quot; &lt;&lt; cubicBezierFunction.y1() &lt;&lt; &quot;, &quot; &lt;&lt;  cubicBezierFunction.x2() &lt;&lt; &quot;, &quot; &lt;&lt; cubicBezierFunction.y2() &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    case TimingFunction::StepsFunction: {
-        const StepsTimingFunction&amp; stepsFunction = static_cast&lt;const StepsTimingFunction&amp;&gt;(timingFunction);
-        ts &lt;&lt; &quot;steps(&quot; &lt;&lt; stepsFunction.numberOfSteps() &lt;&lt; &quot;, &quot; &lt;&lt; (stepsFunction.stepAtStart() ? &quot;start&quot; : &quot;end&quot;) &lt;&lt; &quot;)&quot;;
-        break;
-    }
-    }
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const PlatformCAAnimationRemote::Properties&amp; animation)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-
-    ts &lt;&lt; &quot;type=&quot;;
-    ts &lt;&lt; animation.animationType;
-    ts &lt;&lt; &quot; keyPath=&quot;;
-    ts &lt;&lt; animation.keyPath;
-
-    if (animation.beginTime)
-        dumpProperty(ts, &quot;beginTime&quot;, animation.beginTime);
-
-    if (animation.duration)
-        dumpProperty(ts, &quot;duration&quot;, animation.duration);
-
-    if (animation.timeOffset)
-        dumpProperty(ts, &quot;timeOffset&quot;, animation.timeOffset);
-
-    dumpProperty(ts, &quot;repeatCount&quot;, animation.repeatCount);
-
-    if (animation.speed != 1)
-        dumpProperty(ts, &quot;speed&quot;, animation.speed);
-
-    dumpProperty(ts, &quot;fillMode&quot;, animation.fillMode);
-    dumpProperty(ts, &quot;valueFunction&quot;, animation.valueFunction);
-
-    if (animation.autoReverses)
-        dumpProperty(ts, &quot;autoReverses&quot;, animation.autoReverses);
-
-    if (!animation.removedOnCompletion)
-        dumpProperty(ts, &quot;removedOnCompletion&quot;, animation.removedOnCompletion);
-
-    if (animation.additive)
-        dumpProperty(ts, &quot;additive&quot;, animation.additive);
-
-    if (animation.reverseTimingFunctions)
-        dumpProperty(ts, &quot;reverseTimingFunctions&quot;, animation.reverseTimingFunctions);
-
-    if (animation.hasExplicitBeginTime)
-        dumpProperty(ts, &quot;hasExplicitBeginTime&quot;, animation.hasExplicitBeginTime);
-
-    ts &lt;&lt; &quot;\n&quot;;
-    ts.increaseIndent();
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;keyframes&quot;;
-    ts.increaseIndent();
-
-    size_t maxFrames = std::max(animation.keyValues.size(), animation.keyTimes.size());
-    maxFrames = std::max(maxFrames, animation.timingFunctions.size());
-
-    for (size_t i = 0; i &lt; maxFrames; ++i) {
-        ts &lt;&lt; &quot;\n&quot;;
-        ts.writeIndent();
-        ts &lt;&lt; &quot;(keyframe &quot; &lt;&lt; unsigned(i);
-        if (i &lt; animation.keyTimes.size())
-            dumpProperty(ts, &quot;time&quot;, animation.keyTimes[i]);
-
-        if (i &lt; animation.timingFunctions.size() &amp;&amp; animation.timingFunctions[i])
-            dumpProperty&lt;const TimingFunction&amp;&gt;(ts, &quot;timing function&quot;, *animation.timingFunctions[i]);
-
-        if (i &lt; animation.keyValues.size())
-            dumpProperty(ts, &quot;value&quot;, animation.keyValues[i]);
-
-        ts &lt;&lt; &quot;)&quot;;
-    }
-
-    ts.decreaseIndent();
-    ts.decreaseIndent();
-
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(FloatPoint3D point)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    ts &lt;&lt; point.x() &lt;&lt; &quot; &quot; &lt;&lt; point.y() &lt;&lt; &quot; &quot; &lt;&lt; point.z();
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(Color color)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-    ts &lt;&lt; color.serialized();
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const Vector&lt;GraphicsLayer::PlatformLayerID&gt;&amp; layers)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
-
-    for (size_t i = 0; i &lt; layers.size(); ++i) {
-        if (i)
-            ts &lt;&lt; &quot; &quot;;
-        ts &lt;&lt; layers[i];
-    }
-
-    return ts;
-}
-
-RemoteLayerTreeTextStream&amp; RemoteLayerTreeTextStream::operator&lt;&lt;(const RemoteLayerBackingStore&amp; backingStore)
-{
-    RemoteLayerTreeTextStream&amp; ts = *this;
</del><span class="cx">     ts &lt;&lt; backingStore.size();
</span><span class="cx">     ts &lt;&lt; &quot; scale=&quot; &lt;&lt; backingStore.scale();
</span><span class="cx">     if (backingStore.isOpaque())
</span><span class="lines">@@ -1083,20 +658,13 @@
</span><span class="cx">     return ts;
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void RemoteLayerTreeTextStream::writeIndent()
</del><ins>+static void dumpChangedLayers(TextStream&amp; ts, const RemoteLayerTreeTransaction::LayerPropertiesMap&amp; changedLayerProperties)
</ins><span class="cx"> {
</span><del>-    for (int i = 0; i &lt; m_indent; ++i)
-        *this &lt;&lt; &quot;  &quot;;
-}
-
-static void dumpChangedLayers(RemoteLayerTreeTextStream&amp; ts, const RemoteLayerTreeTransaction::LayerPropertiesMap&amp; changedLayerProperties)
-{
</del><span class="cx">     if (changedLayerProperties.isEmpty())
</span><span class="cx">         return;
</span><span class="cx"> 
</span><del>-    ts &lt;&lt; &quot;\n&quot;;
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(changed-layers&quot;;
</del><ins>+    TextStream::GroupScope group(ts);
+    ts &lt;&lt; &quot;changed-layers&quot;;
</ins><span class="cx"> 
</span><span class="cx">     // Dump the layer properties sorted by layer ID.
</span><span class="cx">     Vector&lt;GraphicsLayer::PlatformLayerID&gt; layerIDs;
</span><span class="lines">@@ -1106,125 +674,117 @@
</span><span class="cx">     for (auto&amp; layerID : layerIDs) {
</span><span class="cx">         const RemoteLayerTreeTransaction::LayerProperties&amp; layerProperties = *changedLayerProperties.get(layerID);
</span><span class="cx"> 
</span><del>-        ts &lt;&lt; &quot;\n&quot;;
-        ts.increaseIndent();
-        ts.writeIndent();
-        ts &lt;&lt; &quot;(layer &quot; &lt;&lt; layerID;
</del><ins>+        TextStream::GroupScope group(ts);
+        ts &lt;&lt; &quot;layer &quot; &lt;&lt; layerID;
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::NameChanged)
</span><del>-            dumpProperty(ts, &quot;name&quot;, layerProperties.name);
</del><ins>+            ts.dumpProperty(&quot;name&quot;, layerProperties.name);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::ChildrenChanged)
</span><del>-            dumpProperty&lt;Vector&lt;GraphicsLayer::PlatformLayerID&gt;&gt;(ts, &quot;children&quot;, layerProperties.children);
</del><ins>+            ts.dumpProperty&lt;Vector&lt;GraphicsLayer::PlatformLayerID&gt;&gt;(&quot;children&quot;, layerProperties.children);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::PositionChanged)
</span><del>-            dumpProperty(ts, &quot;position&quot;, layerProperties.position);
</del><ins>+            ts.dumpProperty(&quot;position&quot;, layerProperties.position);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BoundsChanged)
</span><del>-            dumpProperty(ts, &quot;bounds&quot;, layerProperties.bounds);
</del><ins>+            ts.dumpProperty(&quot;bounds&quot;, layerProperties.bounds);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::AnchorPointChanged)
</span><del>-            dumpProperty(ts, &quot;anchorPoint&quot;, layerProperties.anchorPoint);
</del><ins>+            ts.dumpProperty(&quot;anchorPoint&quot;, layerProperties.anchorPoint);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BackgroundColorChanged)
</span><del>-            dumpProperty(ts, &quot;backgroundColor&quot;, layerProperties.backgroundColor);
</del><ins>+            ts.dumpProperty(&quot;backgroundColor&quot;, layerProperties.backgroundColor);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BorderColorChanged)
</span><del>-            dumpProperty(ts, &quot;borderColor&quot;, layerProperties.borderColor);
</del><ins>+            ts.dumpProperty(&quot;borderColor&quot;, layerProperties.borderColor);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BorderWidthChanged)
</span><del>-            dumpProperty(ts, &quot;borderWidth&quot;, layerProperties.borderWidth);
</del><ins>+            ts.dumpProperty(&quot;borderWidth&quot;, layerProperties.borderWidth);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::OpacityChanged)
</span><del>-            dumpProperty(ts, &quot;opacity&quot;, layerProperties.opacity);
</del><ins>+            ts.dumpProperty(&quot;opacity&quot;, layerProperties.opacity);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::TransformChanged)
</span><del>-            dumpProperty(ts, &quot;transform&quot;, layerProperties.transform ? *layerProperties.transform : TransformationMatrix());
</del><ins>+            ts.dumpProperty(&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(ts, &quot;sublayerTransform&quot;, layerProperties.sublayerTransform ? *layerProperties.sublayerTransform : TransformationMatrix());
</del><ins>+            ts.dumpProperty(&quot;sublayerTransform&quot;, layerProperties.sublayerTransform ? *layerProperties.sublayerTransform : TransformationMatrix());
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::HiddenChanged)
</span><del>-            dumpProperty(ts, &quot;hidden&quot;, layerProperties.hidden);
</del><ins>+            ts.dumpProperty(&quot;hidden&quot;, layerProperties.hidden);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::GeometryFlippedChanged)
</span><del>-            dumpProperty(ts, &quot;geometryFlipped&quot;, layerProperties.geometryFlipped);
</del><ins>+            ts.dumpProperty(&quot;geometryFlipped&quot;, layerProperties.geometryFlipped);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::DoubleSidedChanged)
</span><del>-            dumpProperty(ts, &quot;doubleSided&quot;, layerProperties.doubleSided);
</del><ins>+            ts.dumpProperty(&quot;doubleSided&quot;, layerProperties.doubleSided);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::MasksToBoundsChanged)
</span><del>-            dumpProperty(ts, &quot;masksToBounds&quot;, layerProperties.masksToBounds);
</del><ins>+            ts.dumpProperty(&quot;masksToBounds&quot;, layerProperties.masksToBounds);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::OpaqueChanged)
</span><del>-            dumpProperty(ts, &quot;opaque&quot;, layerProperties.opaque);
</del><ins>+            ts.dumpProperty(&quot;opaque&quot;, layerProperties.opaque);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::MaskLayerChanged)
</span><del>-            dumpProperty(ts, &quot;maskLayer&quot;, layerProperties.maskLayerID);
</del><ins>+            ts.dumpProperty(&quot;maskLayer&quot;, layerProperties.maskLayerID);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::ClonedContentsChanged)
</span><del>-            dumpProperty(ts, &quot;clonedLayer&quot;, layerProperties.clonedLayerID);
</del><ins>+            ts.dumpProperty(&quot;clonedLayer&quot;, layerProperties.clonedLayerID);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::ContentsRectChanged)
</span><del>-            dumpProperty(ts, &quot;contentsRect&quot;, layerProperties.contentsRect);
</del><ins>+            ts.dumpProperty(&quot;contentsRect&quot;, layerProperties.contentsRect);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::ContentsScaleChanged)
</span><del>-            dumpProperty(ts, &quot;contentsScale&quot;, layerProperties.contentsScale);
</del><ins>+            ts.dumpProperty(&quot;contentsScale&quot;, layerProperties.contentsScale);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::CornerRadiusChanged)
</span><del>-            dumpProperty(ts, &quot;cornerRadius&quot;, layerProperties.cornerRadius);
</del><ins>+            ts.dumpProperty(&quot;cornerRadius&quot;, layerProperties.cornerRadius);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::ShapeRoundedRectChanged)
</span><del>-            dumpProperty(ts, &quot;shapeRect&quot;, layerProperties.shapeRoundedRect ? *layerProperties.shapeRoundedRect : FloatRoundedRect());
</del><ins>+            ts.dumpProperty(&quot;shapeRect&quot;, layerProperties.shapeRoundedRect ? *layerProperties.shapeRoundedRect : FloatRoundedRect());
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::MinificationFilterChanged)
</span><del>-            dumpProperty(ts, &quot;minificationFilter&quot;, layerProperties.minificationFilter);
</del><ins>+            ts.dumpProperty(&quot;minificationFilter&quot;, layerProperties.minificationFilter);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::MagnificationFilterChanged)
</span><del>-            dumpProperty(ts, &quot;magnificationFilter&quot;, layerProperties.magnificationFilter);
</del><ins>+            ts.dumpProperty(&quot;magnificationFilter&quot;, layerProperties.magnificationFilter);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BlendModeChanged)
</span><del>-            dumpProperty(ts, &quot;blendMode&quot;, layerProperties.blendMode);
</del><ins>+            ts.dumpProperty(&quot;blendMode&quot;, layerProperties.blendMode);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::SpeedChanged)
</span><del>-            dumpProperty(ts, &quot;speed&quot;, layerProperties.speed);
</del><ins>+            ts.dumpProperty(&quot;speed&quot;, layerProperties.speed);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::TimeOffsetChanged)
</span><del>-            dumpProperty(ts, &quot;timeOffset&quot;, layerProperties.timeOffset);
</del><ins>+            ts.dumpProperty(&quot;timeOffset&quot;, layerProperties.timeOffset);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BackingStoreChanged) {
</span><span class="cx">             if (const RemoteLayerBackingStore* backingStore = layerProperties.backingStore.get())
</span><del>-                dumpProperty&lt;const RemoteLayerBackingStore&amp;&gt;(ts, &quot;backingStore&quot;, *backingStore);
</del><ins>+                ts.dumpProperty&lt;const RemoteLayerBackingStore&amp;&gt;(&quot;backingStore&quot;, *backingStore);
</ins><span class="cx">             else
</span><del>-                dumpProperty(ts, &quot;backingStore&quot;, &quot;removed&quot;);
</del><ins>+                ts.dumpProperty(&quot;backingStore&quot;, &quot;removed&quot;);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::BackingStoreAttachmentChanged)
</span><del>-            dumpProperty(ts, &quot;backingStoreAttached&quot;, layerProperties.backingStoreAttached);
</del><ins>+            ts.dumpProperty(&quot;backingStoreAttached&quot;, layerProperties.backingStoreAttached);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::FiltersChanged)
</span><del>-            dumpProperty(ts, &quot;filters&quot;, layerProperties.filters ? *layerProperties.filters : FilterOperations());
</del><ins>+            ts.dumpProperty(&quot;filters&quot;, layerProperties.filters ? *layerProperties.filters : FilterOperations());
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::AnimationsChanged) {
</span><span class="cx">             for (const auto&amp; keyAnimationPair : layerProperties.addedAnimations)
</span><del>-                dumpProperty(ts, &quot;animation &quot; +  keyAnimationPair.first, keyAnimationPair.second);
</del><ins>+                ts.dumpProperty(&quot;animation &quot; +  keyAnimationPair.first, keyAnimationPair.second);
</ins><span class="cx"> 
</span><span class="cx">             for (const auto&amp; name : layerProperties.keyPathsOfAnimationsToRemove)
</span><del>-                dumpProperty(ts, &quot;removed animation&quot;, name);
</del><ins>+                ts.dumpProperty(&quot;removed animation&quot;, name);
</ins><span class="cx">         }
</span><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::EdgeAntialiasingMaskChanged)
</span><del>-            dumpProperty(ts, &quot;edgeAntialiasingMask&quot;, layerProperties.edgeAntialiasingMask);
</del><ins>+            ts.dumpProperty(&quot;edgeAntialiasingMask&quot;, layerProperties.edgeAntialiasingMask);
</ins><span class="cx"> 
</span><span class="cx">         if (layerProperties.changedProperties &amp; RemoteLayerTreeTransaction::CustomAppearanceChanged)
</span><del>-            dumpProperty(ts, &quot;customAppearance&quot;, layerProperties.customAppearance);
-
-        ts &lt;&lt; &quot;)&quot;;
-
-        ts.decreaseIndent();
</del><ins>+            ts.dumpProperty(&quot;customAppearance&quot;, layerProperties.customAppearance);
</ins><span class="cx">     }
</span><del>-
-    ts.decreaseIndent();
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void RemoteLayerTreeTransaction::dump() const
</span><span class="lines">@@ -1234,92 +794,49 @@
</span><span class="cx"> 
</span><span class="cx"> CString RemoteLayerTreeTransaction::description() const
</span><span class="cx"> {
</span><del>-    RemoteLayerTreeTextStream ts;
</del><ins>+    TextStream ts;
</ins><span class="cx"> 
</span><del>-    ts &lt;&lt; &quot;(&quot;;
-    dumpProperty(ts, &quot;transactionID&quot;, m_transactionID);
-    dumpProperty(ts, &quot;contentsSize&quot;, m_contentsSize);
</del><ins>+    ts.startGroup();
+    ts &lt;&lt; &quot;layer tree&quot;;
+
+    ts.dumpProperty(&quot;transactionID&quot;, m_transactionID);
+    ts.dumpProperty(&quot;contentsSize&quot;, m_contentsSize);
</ins><span class="cx">     if (m_scrollOrigin != IntPoint::zero())
</span><del>-        dumpProperty(ts, &quot;scrollOrigin&quot;, m_scrollOrigin);
</del><ins>+        ts.dumpProperty(&quot;scrollOrigin&quot;, m_scrollOrigin);
</ins><span class="cx"> 
</span><span class="cx">     if (m_pageScaleFactor != 1)
</span><del>-        dumpProperty(ts, &quot;pageScaleFactor&quot;, m_pageScaleFactor);
</del><ins>+        ts.dumpProperty(&quot;pageScaleFactor&quot;, m_pageScaleFactor);
</ins><span class="cx"> 
</span><del>-    ts &lt;&lt; &quot;(\n&quot;;
-    ts.increaseIndent();
-    ts.writeIndent();
-    ts &lt;&lt; &quot;(root-layer &quot; &lt;&lt; m_rootLayerID &lt;&lt; &quot;)&quot;;
</del><ins>+    ts &lt;&lt; &quot;root-layer &quot; &lt;&lt; m_rootLayerID &lt;&lt; &quot;)&quot;;
</ins><span class="cx"> 
</span><span class="cx">     if (!m_createdLayers.isEmpty()) {
</span><del>-        ts &lt;&lt; &quot;\n&quot;;
-        ts.writeIndent();
-        ts &lt;&lt; &quot;(created-layers&quot;;
-        ts.increaseIndent();
</del><ins>+        TextStream::GroupScope group(ts);
+        ts &lt;&lt; &quot;created-layers&quot;;
</ins><span class="cx">         for (const auto&amp; createdLayer : m_createdLayers) {
</span><del>-            ts &lt;&lt; &quot;\n&quot;;
-            ts.writeIndent();
-            ts &lt;&lt; &quot;(&quot;;
</del><ins>+            TextStream::GroupScope group(ts);
+            ts &lt;&lt; createdLayer.type &lt;&lt;&quot; &quot; &lt;&lt; createdLayer.layerID;
</ins><span class="cx">             switch (createdLayer.type) {
</span><del>-            case PlatformCALayer::LayerTypeLayer:
-            case PlatformCALayer::LayerTypeWebLayer:
-            case PlatformCALayer::LayerTypeSimpleLayer:
-                ts &lt;&lt; &quot;layer&quot;;
-                break;
-            case PlatformCALayer::LayerTypeTransformLayer:
-                ts &lt;&lt; &quot;transform-layer&quot;;
-                break;
-            case PlatformCALayer::LayerTypeWebTiledLayer:
-                ts &lt;&lt; &quot;tiled-layer&quot;;
-                break;
-            case PlatformCALayer::LayerTypeTiledBackingLayer:
-                ts &lt;&lt; &quot;tiled-backing-layer&quot;;
-                break;
-            case PlatformCALayer::LayerTypePageTiledBackingLayer:
-                ts &lt;&lt; &quot;page-tiled-backing-layer&quot;;
-                break;
-            case PlatformCALayer::LayerTypeTiledBackingTileLayer:
-                ts &lt;&lt; &quot;tiled-backing-tile&quot;;
-                break;
-            case PlatformCALayer::LayerTypeRootLayer:
-                ts &lt;&lt; &quot;root-layer&quot;;
-                break;
-            case PlatformCALayer::LayerTypeBackdropLayer:
-                ts &lt;&lt; &quot;backdrop-layer&quot;;
-                break;
</del><span class="cx">             case PlatformCALayer::LayerTypeAVPlayerLayer:
</span><del>-                ts &lt;&lt; &quot;av-player-layer (context-id &quot; &lt;&lt; createdLayer.hostingContextID &lt;&lt; &quot;)&quot;;
</del><ins>+                ts &lt;&lt; &quot; (context-id &quot; &lt;&lt; createdLayer.hostingContextID &lt;&lt; &quot;)&quot;;
</ins><span class="cx">                 break;
</span><span class="cx">             case PlatformCALayer::LayerTypeWebGLLayer:
</span><del>-                ts &lt;&lt; &quot;web-gl-layer (context-id &quot; &lt;&lt; createdLayer.hostingContextID &lt;&lt; &quot;)&quot;;
</del><ins>+                ts &lt;&lt; &quot; (context-id &quot; &lt;&lt; createdLayer.hostingContextID &lt;&lt; &quot;)&quot;;
</ins><span class="cx">                 break;
</span><del>-            case PlatformCALayer::LayerTypeShapeLayer:
-                ts &lt;&lt; &quot;shape-layer&quot;;
-                break;
-            case PlatformCALayer::LayerTypeScrollingLayer:
-                ts &lt;&lt; &quot;scrolling-layer&quot;;
-                break;
</del><span class="cx">             case PlatformCALayer::LayerTypeCustom:
</span><del>-                ts &lt;&lt; &quot;custom-layer (context-id &quot; &lt;&lt; createdLayer.hostingContextID &lt;&lt; &quot;)&quot;;
</del><ins>+                ts &lt;&lt; &quot; (context-id &quot; &lt;&lt; createdLayer.hostingContextID &lt;&lt; &quot;)&quot;;
</ins><span class="cx">                 break;
</span><del>-            case PlatformCALayer::LayerTypeLightSystemBackdropLayer:
-                ts &lt;&lt; &quot;light-system-backdrop-layer&quot;;
</del><ins>+            default:
</ins><span class="cx">                 break;
</span><del>-            case PlatformCALayer::LayerTypeDarkSystemBackdropLayer:
-                ts &lt;&lt; &quot;dark-system-backdrop-layer&quot;;
-                break;
</del><span class="cx">             }
</span><del>-            ts &lt;&lt; &quot; &quot; &lt;&lt; createdLayer.layerID &lt;&lt; &quot;)&quot;;
</del><span class="cx">         }
</span><del>-        ts &lt;&lt; &quot;)&quot;;
-        ts.decreaseIndent();
</del><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     dumpChangedLayers(ts, m_changedLayerProperties);
</span><span class="cx"> 
</span><span class="cx">     if (!m_destroyedLayerIDs.isEmpty())
</span><del>-        dumpProperty&lt;Vector&lt;GraphicsLayer::PlatformLayerID&gt;&gt;(ts, &quot;destroyed-layers&quot;, m_destroyedLayerIDs);
</del><ins>+        ts.dumpProperty&lt;Vector&lt;GraphicsLayer::PlatformLayerID&gt;&gt;(&quot;destroyed-layers&quot;, m_destroyedLayerIDs);
</ins><span class="cx"> 
</span><del>-    ts &lt;&lt; &quot;)\n&quot;;
</del><ins>+    ts.endGroup();
</ins><span class="cx"> 
</span><span class="cx">     return ts.release().utf8();
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacPlatformCAAnimationRemoteh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.h (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.h        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.h        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -35,6 +35,10 @@
</span><span class="cx"> class ArgumentDecoder;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+namespace WebCore {
+class TextStream;
+};
+
</ins><span class="cx"> OBJC_CLASS CALayer;
</span><span class="cx"> 
</span><span class="cx"> namespace WebKit {
</span><span class="lines">@@ -297,6 +301,9 @@
</span><span class="cx">     Properties m_properties;
</span><span class="cx"> };
</span><span class="cx"> 
</span><ins>+WebCore::TextStream&amp; operator&lt;&lt;(WebCore::TextStream&amp;, const PlatformCAAnimationRemote::KeyframeValue&amp;);
+WebCore::TextStream&amp; operator&lt;&lt;(WebCore::TextStream&amp;, const PlatformCAAnimationRemote::Properties&amp;);
+
</ins><span class="cx"> } // namespace WebKit
</span><span class="cx"> 
</span><span class="cx"> SPECIALIZE_TYPE_TRAITS_CAANIMATION(WebKit::PlatformCAAnimationRemote, isPlatformCAAnimationRemote())
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPagemacPlatformCAAnimationRemotemm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm (191242 => 191243)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm        2015-10-17 18:04:58 UTC (rev 191242)
+++ trunk/Source/WebKit2/WebProcess/WebPage/mac/PlatformCAAnimationRemote.mm        2015-10-17 18:34:19 UTC (rev 191243)
</span><span class="lines">@@ -33,6 +33,7 @@
</span><span class="cx"> #import &lt;WebCore/GraphicsLayer.h&gt;
</span><span class="cx"> #import &lt;WebCore/PlatformCAAnimationCocoa.h&gt;
</span><span class="cx"> #import &lt;WebCore/PlatformCAFilters.h&gt;
</span><ins>+#import &lt;WebCore/TextStream.h&gt;
</ins><span class="cx"> #import &lt;WebCore/TimingFunction.h&gt;
</span><span class="cx"> #import &lt;wtf/CurrentTime.h&gt;
</span><span class="cx"> #import &lt;wtf/RetainPtr.h&gt;
</span><span class="lines">@@ -798,4 +799,103 @@
</span><span class="cx">     END_BLOCK_OBJC_EXCEPTIONS;
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+TextStream&amp; operator&lt;&lt;(TextStream&amp;ts, const PlatformCAAnimationRemote::KeyframeValue&amp; value)
+{
+    switch (value.keyframeType()) {
+    case PlatformCAAnimationRemote::KeyframeValue::NumberKeyType:
+        ts &lt;&lt; &quot;number=&quot; &lt;&lt; value.numberValue();
+        break;
+    case PlatformCAAnimationRemote::KeyframeValue::ColorKeyType:
+        ts &lt;&lt; &quot;color=&quot;;
+        ts &lt;&lt; value.colorValue();
+        break;
+    case PlatformCAAnimationRemote::KeyframeValue::PointKeyType:
+        ts &lt;&lt; &quot;point=&quot;;
+        ts &lt;&lt; value.pointValue();
+        break;
+    case PlatformCAAnimationRemote::KeyframeValue::TransformKeyType:
+        ts &lt;&lt; &quot;transform=&quot;;
+        ts &lt;&lt; value.transformValue();
+        break;
+    case PlatformCAAnimationRemote::KeyframeValue::FilterKeyType:
+        ts &lt;&lt; &quot;filter=&quot;;
+        if (value.filterValue())
+            ts &lt;&lt; *value.filterValue();
+        else
+            ts &lt;&lt; &quot;null&quot;;
+        break;
+    }
+    return ts;
+}
+
+TextStream&amp; operator&lt;&lt;(TextStream&amp; ts, const PlatformCAAnimationRemote::Properties&amp; animation)
+{
+    ts &lt;&lt; &quot;type=&quot;;
+    ts &lt;&lt; animation.animationType;
+    ts &lt;&lt; &quot; keyPath=&quot;;
+    ts &lt;&lt; animation.keyPath;
+
+    if (animation.beginTime)
+        ts.dumpProperty(&quot;beginTime&quot;, animation.beginTime);
+
+    if (animation.duration)
+        ts.dumpProperty(&quot;duration&quot;, animation.duration);
+
+    if (animation.timeOffset)
+        ts.dumpProperty(&quot;timeOffset&quot;, animation.timeOffset);
+
+    ts.dumpProperty(&quot;repeatCount&quot;, animation.repeatCount);
+
+    if (animation.speed != 1)
+        ts.dumpProperty(&quot;speed&quot;, animation.speed);
+
+    ts.dumpProperty(&quot;fillMode&quot;, animation.fillMode);
+    ts.dumpProperty(&quot;valueFunction&quot;, animation.valueFunction);
+
+    if (animation.autoReverses)
+        ts.dumpProperty(&quot;autoReverses&quot;, animation.autoReverses);
+
+    if (!animation.removedOnCompletion)
+        ts.dumpProperty(&quot;removedOnCompletion&quot;, animation.removedOnCompletion);
+
+    if (animation.additive)
+        ts.dumpProperty(&quot;additive&quot;, animation.additive);
+
+    if (animation.reverseTimingFunctions)
+        ts.dumpProperty(&quot;reverseTimingFunctions&quot;, animation.reverseTimingFunctions);
+
+    if (animation.hasExplicitBeginTime)
+        ts.dumpProperty(&quot;hasExplicitBeginTime&quot;, animation.hasExplicitBeginTime);
+
+    ts &lt;&lt; &quot;\n&quot;;
+    ts.increaseIndent();
+    ts.writeIndent();
+    ts &lt;&lt; &quot;(&quot; &lt;&lt; &quot;keyframes&quot;;
+    ts.increaseIndent();
+
+    size_t maxFrames = std::max(animation.keyValues.size(), animation.keyTimes.size());
+    maxFrames = std::max(maxFrames, animation.timingFunctions.size());
+
+    for (size_t i = 0; i &lt; maxFrames; ++i) {
+        ts &lt;&lt; &quot;\n&quot;;
+        ts.writeIndent();
+        ts &lt;&lt; &quot;(keyframe &quot; &lt;&lt; unsigned(i);
+        if (i &lt; animation.keyTimes.size())
+            ts.dumpProperty(&quot;time&quot;, animation.keyTimes[i]);
+
+        if (i &lt; animation.timingFunctions.size() &amp;&amp; animation.timingFunctions[i])
+            ts.dumpProperty&lt;const TimingFunction&amp;&gt;(&quot;timing function&quot;, *animation.timingFunctions[i]);
+
+        if (i &lt; animation.keyValues.size())
+            ts.dumpProperty(&quot;value&quot;, animation.keyValues[i]);
+
+        ts &lt;&lt; &quot;)&quot;;
+    }
+
+    ts.decreaseIndent();
+    ts.decreaseIndent();
+
+    return ts;
+}
+
</ins><span class="cx"> } // namespace WebKit
</span></span></pre>
</div>
</div>

</body>
</html>