<!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>[189833] trunk</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/189833">189833</a></dd>
<dt>Author</dt> <dd>bfulgham@apple.com</dd>
<dt>Date</dt> <dd>2015-09-15 18:00:32 -0700 (Tue, 15 Sep 2015)</dd>
</dl>
<h3>Log Message</h3>
<pre>[Win] Provide a means for viewing the layer tree
https://bugs.webkit.org/show_bug.cgi?id=149165
Reviewed by Simon Fraser.
Source/WebCore:
Revise the old fprintf logic to generate a string
containing the layer tree so that it can be output
to the debugger (or elsewhere).
* platform/graphics/ca/PlatformCALayer.h: Rename 'printTree'
to 'printLayerTree', and make it available in release builds.
* platform/graphics/ca/win/CACFLayerTreeHost.cpp:
(WebCore::CACFLayerTreeHost::printLayerTree): Added. Calls into
the PlatformCALayer implementation.
* platform/graphics/ca/win/CACFLayerTreeHost.h:
* platform/graphics/ca/win/PlatformCALayerWin.cpp:
(printIndent): Revise to use two-space indent and use StringBuilder.
(printTransform): Ditto.
(printColor): Added helper function.
(printLayer): Revised to output information on the layer contents.
(PlatformCALayerWin::printLayerTree): Renamed from 'printTree'.
(PlatformCALayerWin::printTree): Deleted.
* platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
(PlatformCALayerWinInternal::drawRepaintCounters): Drive-by fix. Match the
cocoa repaint counter logic by not painting counters for the layers that
contain the tile grid.
* platform/graphics/ca/win/PlatformCALayerWin.h:
* platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
(PlatformCALayerWinInternal::drawRepaintCounters):
Source/WebKit/win:
Add a new WebView method "printLayerTree" so that clients
can get a string dump of the current layer tree. Add this
to a new COM interface version so no existing clients break
compatibility.
* Interfaces/IWebViewPrivate.idl:
* WebView.cpp:
(WebView::QueryInterface): Recognize the new interface version.
(WebView::printLayerTree): Added. This just calls the WebCore
implementation.
* WebView.h:
Tools:
Update MiniBrowser with a new Debug menu option that will
dump the current layer tree to the debug console.
* MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc:
* MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h:
* MiniBrowser/win/Common.cpp:
(WndProc): Add handler for 'Print Layer Tree' menu option.
* MiniBrowser/win/MiniBrowser.cpp:
(MiniBrowser::printLayerTree): Added Handler.
* MiniBrowser/win/MiniBrowser.h:</pre>
<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscaPlatformCALayerh">trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscawinCACFLayerTreeHostcpp">trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscawinCACFLayerTreeHosth">trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscawinPlatformCALayerWincpp">trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscawinPlatformCALayerWinh">trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h</a></li>
<li><a href="#trunkSourceWebCoreplatformgraphicscawinPlatformCALayerWinInternalcpp">trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp</a></li>
<li><a href="#trunkSourceWebKitwinChangeLog">trunk/Source/WebKit/win/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitwinInterfacesIWebViewPrivateidl">trunk/Source/WebKit/win/Interfaces/IWebViewPrivate.idl</a></li>
<li><a href="#trunkSourceWebKitwinWebViewcpp">trunk/Source/WebKit/win/WebView.cpp</a></li>
<li><a href="#trunkSourceWebKitwinWebViewh">trunk/Source/WebKit/win/WebView.h</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsMiniBrowserMiniBrowservcxprojMiniBrowserLibrc">trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc</a></li>
<li><a href="#trunkToolsMiniBrowserMiniBrowservcxprojMiniBrowserLibResourceh">trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h</a></li>
<li><a href="#trunkToolsMiniBrowserwinCommoncpp">trunk/Tools/MiniBrowser/win/Common.cpp</a></li>
<li><a href="#trunkToolsMiniBrowserwinMiniBrowsercpp">trunk/Tools/MiniBrowser/win/MiniBrowser.cpp</a></li>
<li><a href="#trunkToolsMiniBrowserwinMiniBrowserh">trunk/Tools/MiniBrowser/win/MiniBrowser.h</a></li>
</ul>
</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebCore/ChangeLog        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -1,3 +1,35 @@
</span><ins>+2015-09-15 Brent Fulgham <bfulgham@apple.com>
+
+ [Win] Provide a means for viewing the layer tree
+ https://bugs.webkit.org/show_bug.cgi?id=149165
+
+ Reviewed by Simon Fraser.
+
+ Revise the old fprintf logic to generate a string
+ containing the layer tree so that it can be output
+ to the debugger (or elsewhere).
+
+ * platform/graphics/ca/PlatformCALayer.h: Rename 'printTree'
+ to 'printLayerTree', and make it available in release builds.
+ * platform/graphics/ca/win/CACFLayerTreeHost.cpp:
+ (WebCore::CACFLayerTreeHost::printLayerTree): Added. Calls into
+ the PlatformCALayer implementation.
+ * platform/graphics/ca/win/CACFLayerTreeHost.h:
+ * platform/graphics/ca/win/PlatformCALayerWin.cpp:
+ (printIndent): Revise to use two-space indent and use StringBuilder.
+ (printTransform): Ditto.
+ (printColor): Added helper function.
+ (printLayer): Revised to output information on the layer contents.
+ (PlatformCALayerWin::printLayerTree): Renamed from 'printTree'.
+ (PlatformCALayerWin::printTree): Deleted.
+ * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
+ (PlatformCALayerWinInternal::drawRepaintCounters): Drive-by fix. Match the
+ cocoa repaint counter logic by not painting counters for the layers that
+ contain the tile grid.
+ * platform/graphics/ca/win/PlatformCALayerWin.h:
+ * platform/graphics/ca/win/PlatformCALayerWinInternal.cpp:
+ (PlatformCALayerWinInternal::drawRepaintCounters):
+
</ins><span class="cx"> 2015-09-15 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> Nested isolates can cause an infinite loop when laying out bidi runs
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscaPlatformCALayerh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebCore/platform/graphics/ca/PlatformCALayer.h        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -234,9 +234,7 @@
</span><span class="cx"> virtual PlatformCALayer* rootLayer() const = 0;
</span><span class="cx"> virtual void setNeedsLayout() = 0;
</span><span class="cx"> virtual void setNeedsCommit() = 0;
</span><del>-#ifndef NDEBUG
- virtual void printTree() const = 0;
-#endif // NDEBUG
</del><ins>+ virtual String layerTreeAsString() const = 0;
</ins><span class="cx"> #endif // PLATFORM(WIN)
</span><span class="cx">
</span><span class="cx"> #if PLATFORM(IOS)
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscawinCACFLayerTreeHostcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.cpp        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2009, 2013 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2009, 2013, 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">@@ -322,4 +322,12 @@
</span><span class="cx"> return winRectToCGRect(clientRect);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+String CACFLayerTreeHost::layerTreeAsString() const
+{
+ if (!m_rootLayer)
+ return emptyString();
+
+ return m_rootLayer->layerTreeAsString();
</ins><span class="cx"> }
</span><ins>+
+}
</ins></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscawinCACFLayerTreeHosth"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebCore/platform/graphics/ca/win/CACFLayerTreeHost.h        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -1,5 +1,5 @@
</span><span class="cx"> /*
</span><del>- * Copyright (C) 2009, 2010, 2011, 2012 Apple Inc. All rights reserved.
</del><ins>+ * Copyright (C) 2009-2012, 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">@@ -77,6 +77,8 @@
</span><span class="cx"> // AbstractCACFLayerTreeHost
</span><span class="cx"> virtual void flushPendingLayerChangesNow();
</span><span class="cx">
</span><ins>+ String layerTreeAsString() const;
+
</ins><span class="cx"> protected:
</span><span class="cx"> CACFLayerTreeHost();
</span><span class="cx">
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscawinPlatformCALayerWincpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.cpp        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -40,6 +40,7 @@
</span><span class="cx"> #include <WebKitSystemInterface/WebKitSystemInterface.h>
</span><span class="cx"> #include <wtf/CurrentTime.h>
</span><span class="cx"> #include <wtf/text/CString.h>
</span><ins>+#include <wtf/text/StringBuilder.h>
</ins><span class="cx">
</span><span class="cx"> using namespace WebCore;
</span><span class="cx">
</span><span class="lines">@@ -641,127 +642,248 @@
</span><span class="cx"> // FIXME: implement.
</span><span class="cx"> }
</span><span class="cx">
</span><del>-#ifndef NDEBUG
-static void printIndent(int indent)
</del><ins>+static void printIndent(StringBuilder& builder, int indent)
</ins><span class="cx"> {
</span><span class="cx"> for ( ; indent > 0; --indent)
</span><del>- fprintf(stderr, " ");
</del><ins>+ builder.append(" ");
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-static void printTransform(const CATransform3D& transform)
</del><ins>+static void printTransform(StringBuilder& builder, const CATransform3D& transform)
</ins><span class="cx"> {
</span><del>- fprintf(stderr, "[%g %g %g %g; %g %g %g %g; %g %g %g %g; %g %g %g %g]",
- transform.m11, transform.m12, transform.m13, transform.m14,
- transform.m21, transform.m22, transform.m23, transform.m24,
- transform.m31, transform.m32, transform.m33, transform.m34,
- transform.m41, transform.m42, transform.m43, transform.m44);
</del><ins>+ builder.append('[');
+ builder.appendNumber(transform.m11);
+ builder.append(' ');
+ builder.appendNumber(transform.m12);
+ builder.append(' ');
+ builder.appendNumber(transform.m13);
+ builder.append(' ');
+ builder.appendNumber(transform.m14);
+ builder.append("; ");
+ builder.appendNumber(transform.m21);
+ builder.append(' ');
+ builder.appendNumber(transform.m22);
+ builder.append(' ');
+ builder.appendNumber(transform.m23);
+ builder.append(' ');
+ builder.appendNumber(transform.m24);
+ builder.append("; ");
+ builder.appendNumber(transform.m31);
+ builder.append(' ');
+ builder.appendNumber(transform.m32);
+ builder.append(' ');
+ builder.appendNumber(transform.m33);
+ builder.append(' ');
+ builder.appendNumber(transform.m34);
+ builder.append("; ");
+ builder.appendNumber(transform.m41);
+ builder.append(' ');
+ builder.appendNumber(transform.m42);
+ builder.append(' ');
+ builder.appendNumber(transform.m43);
+ builder.append(' ');
+ builder.appendNumber(transform.m44);
+ builder.append(']');
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-static void printLayer(const PlatformCALayer* layer, int indent)
</del><ins>+static void printColor(StringBuilder& builder, int indent, const String& label, CGColorRef color)
</ins><span class="cx"> {
</span><ins>+ Color layerColor(color);
+ if (!layerColor.isValid())
+ return;
+
+ builder.append('\n');
+ printIndent(builder, indent);
+ builder.append('(');
+ builder.append(label);
+ builder.append(' ');
+ builder.append(layerColor.nameForRenderTreeAsText());
+ builder.append(')');
+}
+
+static void printLayer(StringBuilder& builder, const PlatformCALayer* layer, int indent)
+{
</ins><span class="cx"> FloatPoint3D layerPosition = layer->position();
</span><span class="cx"> FloatPoint3D layerAnchorPoint = layer->anchorPoint();
</span><span class="cx"> FloatRect layerBounds = layer->bounds();
</span><del>- printIndent(indent);
</del><ins>+ builder.append('\n');
+ printIndent(builder, indent);
</ins><span class="cx">
</span><del>- char* layerTypeName = 0;
</del><ins>+ char* layerTypeName = nullptr;
</ins><span class="cx"> switch (layer->layerType()) {
</span><span class="cx"> case PlatformCALayer::LayerTypeLayer: layerTypeName = "layer"; break;
</span><span class="cx"> case PlatformCALayer::LayerTypeWebLayer: layerTypeName = "web-layer"; break;
</span><ins>+ case PlatformCALayer::LayerTypeSimpleLayer: layerTypeName = "simple-layer"; break;
</ins><span class="cx"> case PlatformCALayer::LayerTypeTransformLayer: layerTypeName = "transform-layer"; break;
</span><span class="cx"> case PlatformCALayer::LayerTypeWebTiledLayer: layerTypeName = "web-tiled-layer"; break;
</span><span class="cx"> case PlatformCALayer::LayerTypeTiledBackingLayer: layerTypeName = "tiled-backing-layer"; break;
</span><ins>+ case PlatformCALayer::LayerTypePageTiledBackingLayer: layerTypeName = "page-tiled-backing-layer"; break;
+ case PlatformCALayer::LayerTypeTiledBackingTileLayer: layerTypeName = "tiled-backing-tile-layer"; break;
</ins><span class="cx"> case PlatformCALayer::LayerTypeRootLayer: layerTypeName = "root-layer"; break;
</span><ins>+ case PlatformCALayer::LayerTypeAVPlayerLayer: layerTypeName = "avplayer-layer"; break;
+ case PlatformCALayer::LayerTypeWebGLLayer: layerTypeName = "webgl-layer"; break;
+ case PlatformCALayer::LayerTypeBackdropLayer: layerTypeName = "backdrop-layer"; break;
+ case PlatformCALayer::LayerTypeShapeLayer: layerTypeName = "shape-layer"; break;
+ case PlatformCALayer::LayerTypeLightSystemBackdropLayer: layerTypeName = "light-system-backdrop-layer"; break;
+ case PlatformCALayer::LayerTypeDarkSystemBackdropLayer: layerTypeName = "dark-system-backdrop-layer"; break;
+ case PlatformCALayer::LayerTypeScrollingLayer: layerTypeName = "scrolling-layer"; break;
</ins><span class="cx"> case PlatformCALayer::LayerTypeCustom: layerTypeName = "custom-layer"; break;
</span><span class="cx"> }
</span><span class="cx">
</span><del>- fprintf(stderr, "(%s [%g %g %g] [%g %g %g %g] [%g %g %g] superlayer=%p\n",
- layerTypeName,
- layerPosition.x(), layerPosition.y(), layerPosition.z(),
- layerBounds.x(), layerBounds.y(), layerBounds.width(), layerBounds.height(),
- layerAnchorPoint.x(), layerAnchorPoint.y(), layerAnchorPoint.z(), layer->superlayer());
</del><ins>+ builder.append("(");
+ builder.append(layerTypeName);
+ builder.append(" [");
+ builder.appendNumber(layerPosition.x());
+ builder.append(' ');
+ builder.appendNumber(layerPosition.y());
+ builder.append(' ');
+ builder.appendNumber(layerPosition.z());
+ builder.append("] [");
+ builder.appendNumber(layerBounds.x());
+ builder.append(' ');
+ builder.appendNumber(layerBounds.y());
+ builder.append(' ');
+ builder.appendNumber(layerBounds.width());
+ builder.append(' ');
+ builder.appendNumber(layerBounds.height());
+ builder.append("] [");
+ builder.appendNumber(layerAnchorPoint.x());
+ builder.append(' ');
+ builder.appendNumber(layerAnchorPoint.y());
+ builder.append(' ');
+ builder.appendNumber(layerAnchorPoint.z());
+ builder.append("] superlayer=");
+ builder.appendNumber(reinterpret_cast<unsigned long long>(layer->superlayer()));
</ins><span class="cx">
</span><span class="cx"> // Print name if needed
</span><span class="cx"> String layerName = CACFLayerGetName(layer->platformLayer());
</span><span class="cx"> if (!layerName.isEmpty()) {
</span><del>- printIndent(indent + 1);
- fprintf(stderr, "(name %s)\n", layerName.utf8().data());
</del><ins>+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(name \"");
+ builder.append(layerName);
+ builder.append("\")");
</ins><span class="cx"> }
</span><span class="cx">
</span><ins>+ // Print borderWidth if needed
+ if (CGFloat borderWidth = CACFLayerGetBorderWidth(layer->platformLayer())) {
+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(borderWidth ");
+ builder.appendNumber(borderWidth);
+ builder.append(')');
+ }
+
+ // Print backgroundColor if needed
+ printColor(builder, indent + 1, "backgroundColor", CACFLayerGetBackgroundColor(layer->platformLayer()));
+
+ // Print borderColor if needed
+ printColor(builder, indent + 1, "borderColor", CACFLayerGetBorderColor(layer->platformLayer()));
+
</ins><span class="cx"> // Print masksToBounds if needed
</span><del>- bool layerMasksToBounds = layer->masksToBounds();
- if (layerMasksToBounds) {
- printIndent(indent + 1);
- fprintf(stderr, "(masksToBounds true)\n");
</del><ins>+ if (bool layerMasksToBounds = layer->masksToBounds()) {
+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(masksToBounds true)");
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Print opacity if needed
</span><span class="cx"> float layerOpacity = layer->opacity();
</span><span class="cx"> if (layerOpacity != 1) {
</span><del>- printIndent(indent + 1);
- fprintf(stderr, "(opacity %hf)\n", layerOpacity);
</del><ins>+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(opacity ");
+ builder.appendNumber(layerOpacity);
+ builder.append(')');
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Print sublayerTransform if needed
</span><span class="cx"> TransformationMatrix layerTransform = layer->sublayerTransform();
</span><span class="cx"> if (!layerTransform.isIdentity()) {
</span><del>- printIndent(indent + 1);
- fprintf(stderr, "(sublayerTransform ");
- printTransform(layerTransform);
- fprintf(stderr, ")\n");
</del><ins>+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(sublayerTransform ");
+ printTransform(builder, layerTransform);
+ builder.append(')');
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Print transform if needed
</span><span class="cx"> layerTransform = layer->transform();
</span><span class="cx"> if (!layerTransform.isIdentity()) {
</span><del>- printIndent(indent + 1);
- fprintf(stderr, "(transform ");
- printTransform(layerTransform);
- fprintf(stderr, ")\n");
</del><ins>+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(transform ");
+ printTransform(builder, layerTransform);
+ builder.append(')');
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Print contents if needed
</span><del>- CFTypeRef layerContents = layer->contents();
- if (layerContents) {
</del><ins>+ if (CFTypeRef layerContents = layer->contents()) {
</ins><span class="cx"> if (CFGetTypeID(layerContents) == CGImageGetTypeID()) {
</span><span class="cx"> CGImageRef imageContents = static_cast<CGImageRef>(const_cast<void*>(layerContents));
</span><del>- printIndent(indent + 1);
- fprintf(stderr, "(contents (image [%Iu %Iu]))\n",
- CGImageGetWidth(imageContents), CGImageGetHeight(imageContents));
</del><ins>+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(contents (image [");
+ builder.appendNumber(CGImageGetWidth(imageContents));
+ builder.append(' ');
+ builder.appendNumber(CGImageGetHeight(imageContents));
+ builder.append("]))");
</ins><span class="cx"> }
</span><ins>+
+ if (CFGetTypeID(layerContents) == CABackingStoreGetTypeID()) {
+ CABackingStoreRef backingStore = static_cast<CABackingStoreRef>(const_cast<void*>(layerContents));
+ CGImageRef imageContents = CABackingStoreGetCGImage(backingStore);
+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(contents (backing-store [");
+ builder.appendNumber(CGImageGetWidth(imageContents));
+ builder.append(' ');
+ builder.appendNumber(CGImageGetHeight(imageContents));
+ builder.append("]))");
+ }
</ins><span class="cx"> }
</span><span class="cx">
</span><span class="cx"> // Print sublayers if needed
</span><span class="cx"> int n = intern(layer)->sublayerCount();
</span><span class="cx"> if (n > 0) {
</span><del>- printIndent(indent + 1);
- fprintf(stderr, "(sublayers\n");
</del><ins>+ builder.append('\n');
+ printIndent(builder, indent + 1);
+ builder.append("(sublayers");
</ins><span class="cx">
</span><span class="cx"> PlatformCALayerList sublayers;
</span><span class="cx"> intern(layer)->getSublayers(sublayers);
</span><span class="cx"> ASSERT(n == sublayers.size());
</span><span class="cx"> for (int i = 0; i < n; ++i)
</span><del>- printLayer(sublayers[i].get(), indent + 2);
</del><ins>+ printLayer(builder, sublayers[i].get(), indent + 2);
</ins><span class="cx">
</span><del>- printIndent(indent + 1);
- fprintf(stderr, ")\n");
</del><ins>+ builder.append(')');
</ins><span class="cx"> }
</span><span class="cx">
</span><del>- printIndent(indent);
- fprintf(stderr, ")\n");
</del><ins>+ builder.append(')');
</ins><span class="cx"> }
</span><span class="cx">
</span><del>-void PlatformCALayerWin::printTree() const
</del><ins>+String PlatformCALayerWin::layerTreeAsString() const
</ins><span class="cx"> {
</span><span class="cx"> // Print heading info
</span><span class="cx"> CGRect rootBounds = bounds();
</span><del>- fprintf(stderr, "\n\n** Render tree at time %g (bounds %g, %g %gx%g) **\n\n",
- monotonicallyIncreasingTime(), rootBounds.origin.x, rootBounds.origin.y, rootBounds.size.width, rootBounds.size.height);
</del><span class="cx">
</span><ins>+ StringBuilder builder;
+ builder.append("\n\n** Render tree at time ");
+ builder.appendNumber(monotonicallyIncreasingTime());
+ builder.append(" (bounds ");
+ builder.appendNumber(rootBounds.origin.x);
+ builder.append(", ");
+ builder.appendNumber(rootBounds.origin.y);
+ builder.append(' ');
+ builder.appendNumber(rootBounds.size.width);
+ builder.append('x');
+ builder.appendNumber(rootBounds.size.height);
+ builder.append(") **\n\n");
+
</ins><span class="cx"> // Print layer tree from the root
</span><del>- printLayer(this, 0);
</del><ins>+ printLayer(builder, this, 0);
+
+ return builder.toString();
</ins><span class="cx"> }
</span><del>-#endif // #ifndef NDEBUG
</del><span class="cx">
</span><span class="cx"> PassRefPtr<PlatformCALayer> PlatformCALayerWin::createCompatibleLayer(PlatformCALayer::LayerType layerType, PlatformCALayerClient* client) const
</span><span class="cx"> {
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscawinPlatformCALayerWinh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWin.h        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -151,7 +151,7 @@
</span><span class="cx"> virtual void drawTextAtPoint(CGContextRef, CGFloat x, CGFloat y, const char* text, size_t length) const override;
</span><span class="cx">
</span><span class="cx"> #ifndef NDEBUG
</span><del>- virtual void printTree() const override;
</del><ins>+ virtual String layerTreeAsString() const override;
</ins><span class="cx"> #endif
</span><span class="cx">
</span><span class="cx"> virtual PassRefPtr<PlatformCALayer> clone(PlatformCALayerClient* owner) const override;
</span></span></pre></div>
<a id="trunkSourceWebCoreplatformgraphicscawinPlatformCALayerWinInternalcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebCore/platform/graphics/ca/win/PlatformCALayerWinInternal.cpp        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -124,6 +124,11 @@
</span><span class="cx">
</span><span class="cx"> void PlatformCALayerWinInternal::drawRepaintCounters(CACFLayerRef caLayer, CGContextRef context, CGRect layerBounds, int drawCount)
</span><span class="cx"> {
</span><ins>+ // We always update the repaint count, but we do not paint it for layers that
+ // only contain tiled backing layers. Those report their repaint counts themselves.
+ if (!owner() || owner()->usesTiledBackingLayer())
+ return;
+
</ins><span class="cx"> CGColorRef backgroundColor = nullptr;
</span><span class="cx"> // Make the background of the counter the same as the border color,
</span><span class="cx"> // unless there is no border, then make it red
</span></span></pre></div>
<a id="trunkSourceWebKitwinChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/ChangeLog (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/ChangeLog        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebKit/win/ChangeLog        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -1,3 +1,22 @@
</span><ins>+2015-09-15 Brent Fulgham <bfulgham@apple.com>
+
+ [Win] Provide a means for viewing the layer tree
+ https://bugs.webkit.org/show_bug.cgi?id=149165
+
+ Reviewed by Simon Fraser.
+
+ Add a new WebView method "printLayerTree" so that clients
+ can get a string dump of the current layer tree. Add this
+ to a new COM interface version so no existing clients break
+ compatibility.
+
+ * Interfaces/IWebViewPrivate.idl:
+ * WebView.cpp:
+ (WebView::QueryInterface): Recognize the new interface version.
+ (WebView::printLayerTree): Added. This just calls the WebCore
+ implementation.
+ * WebView.h:
+
</ins><span class="cx"> 2015-09-12 Brian Burg <bburg@apple.com>
</span><span class="cx">
</span><span class="cx"> Web Inspector: disambiguate inspected/frontend controllers and pages in backend code
</span></span></pre></div>
<a id="trunkSourceWebKitwinInterfacesIWebViewPrivateidl"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/Interfaces/IWebViewPrivate.idl (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/Interfaces/IWebViewPrivate.idl        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebKit/win/Interfaces/IWebViewPrivate.idl        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -319,4 +319,10 @@
</span><span class="cx"> [in] unsigned whitelistCount, [in, size_is(whitelistCount)] BSTR* whitelist,
</span><span class="cx"> [in] unsigned blacklistCount, [in, size_is(blacklistCount)] BSTR* blacklist,
</span><span class="cx"> [in] WebUserContentInjectedFrames injectedFrames);
</span><del>-}
</del><span class="cx">\ No newline at end of file
</span><ins>+}
+
+[ uuid(08C88359-76AA-48F2-BA27-820540E781E9) ]
+interface IWebViewPrivate3 : IWebViewPrivate2
+{
+ HRESULT layerTreeAsString([out] BSTR*);
+}
</ins></span></pre></div>
<a id="trunkSourceWebKitwinWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebView.cpp (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebView.cpp        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebKit/win/WebView.cpp        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -2627,6 +2627,8 @@
</span><span class="cx"> *ppvObject = static_cast<IWebViewPrivate*>(this);
</span><span class="cx"> else if (IsEqualGUID(riid, IID_IWebViewPrivate2))
</span><span class="cx"> *ppvObject = static_cast<IWebViewPrivate2*>(this);
</span><ins>+ else if (IsEqualGUID(riid, IID_IWebViewPrivate3))
+ *ppvObject = static_cast<IWebViewPrivate3*>(this);
</ins><span class="cx"> else if (IsEqualGUID(riid, IID_IWebIBActions))
</span><span class="cx"> *ppvObject = static_cast<IWebIBActions*>(this);
</span><span class="cx"> else if (IsEqualGUID(riid, IID_IWebViewCSS))
</span><span class="lines">@@ -7431,3 +7433,24 @@
</span><span class="cx">
</span><span class="cx"> return S_OK;
</span><span class="cx"> }
</span><ins>+
+HRESULT WebView::layerTreeAsString(_Deref_opt_out_ BSTR* treeBstr)
+{
+ if (!treeBstr)
+ return E_POINTER;
+
+ *treeBstr = nullptr;
+
+#if USE(CA)
+ if (!m_layerTreeHost)
+ return S_OK;
+
+ String tree = m_layerTreeHost->layerTreeAsString();
+
+ *treeBstr = BString(tree).release();
+ if (!*treeBstr && tree.length())
+ return E_OUTOFMEMORY;
+#endif
+
+ return S_OK;
+}
</ins></span></pre></div>
<a id="trunkSourceWebKitwinWebViewh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/win/WebView.h (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/win/WebView.h        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Source/WebKit/win/WebView.h        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -82,7 +82,7 @@
</span><span class="cx">
</span><span class="cx"> class WebView
</span><span class="cx"> : public IWebView
</span><del>- , public IWebViewPrivate2
</del><ins>+ , public IWebViewPrivate3
</ins><span class="cx"> , public IWebIBActions
</span><span class="cx"> , public IWebViewCSS
</span><span class="cx"> , public IWebViewEditing
</span><span class="lines">@@ -390,6 +390,9 @@
</span><span class="cx"> virtual HRESULT STDMETHODCALLTYPE addUserStyleSheetToGroup(_In_ BSTR groupName, _In_opt_ IWebScriptWorld*, _In_ BSTR source, _In_ BSTR url,
</span><span class="cx"> unsigned whitelistCount, __inout_ecount_full(whitelistCount) BSTR* whitelist, unsigned blacklistCount, __inout_ecount_full(blacklistCount) BSTR* blacklist, WebUserContentInjectedFrames);
</span><span class="cx">
</span><ins>+ // IWebViewPrivate3
+ HRESULT STDMETHODCALLTYPE layerTreeAsString(_Deref_opt_out_ BSTR*);
+
</ins><span class="cx"> // WebView
</span><span class="cx"> bool shouldUseEmbeddedView(const WTF::String& mimeType) const;
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Tools/ChangeLog        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -1,3 +1,21 @@
</span><ins>+2015-09-15 Brent Fulgham <bfulgham@apple.com>
+
+ [Win] Provide a means for viewing the layer tree
+ https://bugs.webkit.org/show_bug.cgi?id=149165
+
+ Reviewed by Simon Fraser.
+
+ Update MiniBrowser with a new Debug menu option that will
+ dump the current layer tree to the debug console.
+
+ * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc:
+ * MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h:
+ * MiniBrowser/win/Common.cpp:
+ (WndProc): Add handler for 'Print Layer Tree' menu option.
+ * MiniBrowser/win/MiniBrowser.cpp:
+ (MiniBrowser::printLayerTree): Added Handler.
+ * MiniBrowser/win/MiniBrowser.h:
+
</ins><span class="cx"> 2015-09-14 Myles C. Maxfield <mmaxfield@apple.com>
</span><span class="cx">
</span><span class="cx"> WebKitTestRunner declarative language setting is broken for iOS
</span></span></pre></div>
<a id="trunkToolsMiniBrowserMiniBrowservcxprojMiniBrowserLibrc"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLib.rc        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -107,6 +107,7 @@
</span><span class="cx"> MENUITEM "Show Compositing Borders", IDM_COMPOSITING_BORDERS
</span><span class="cx"> MENUITEM SEPARATOR
</span><span class="cx"> MENUITEM "Show Caches Window", IDM_CACHES
</span><ins>+ MENUITEM "Show Layer Tree", IDM_SHOW_LAYER_TREE
</ins><span class="cx"> END
</span><span class="cx"> END
</span><span class="cx">
</span></span></pre></div>
<a id="trunkToolsMiniBrowserMiniBrowservcxprojMiniBrowserLibResourceh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Tools/MiniBrowser/MiniBrowser.vcxproj/MiniBrowserLibResource.h        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -52,6 +52,7 @@
</span><span class="cx"> #define IDM_ACTUAL_SIZE 171
</span><span class="cx"> #define IDM_ZOOM_IN 172
</span><span class="cx"> #define IDM_ZOOM_OUT 173
</span><ins>+#define IDM_SHOW_LAYER_TREE 174
</ins><span class="cx"> #define IDC_EMPTY_URL_CACHE 1000
</span><span class="cx"> #define IDC_RETURN_FREE_MEMORY 1001
</span><span class="cx"> #define IDC_EMPTY_WEBCORE_CACHE 1002
</span></span></pre></div>
<a id="trunkToolsMiniBrowserwinCommoncpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/win/Common.cpp (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/win/Common.cpp        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Tools/MiniBrowser/win/Common.cpp        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -90,7 +90,7 @@
</span><span class="cx">
</span><span class="cx"> // Support moving the transparent window
</span><span class="cx"> POINT s_windowPosition = { 100, 100 };
</span><del>-SIZE s_windowSize = { 800, 400 };
</del><ins>+SIZE s_windowSize = { 500, 200 };
</ins><span class="cx">
</span><span class="cx"> // Forward declarations of functions included in this code module:
</span><span class="cx"> ATOM MyRegisterClass(HINSTANCE hInstance);
</span><span class="lines">@@ -512,6 +512,10 @@
</span><span class="cx"> if (gMiniBrowser)
</span><span class="cx"> gMiniBrowser->zoomOut();
</span><span class="cx"> break;
</span><ins>+ case IDM_SHOW_LAYER_TREE:
+ if (gMiniBrowser)
+ gMiniBrowser->showLayerTree();
+ break;
</ins><span class="cx"> default:
</span><span class="cx"> if (!ToggleMenuItem(hWnd, wmId))
</span><span class="cx"> return CallWindowProc(parentProc, hWnd, message, wParam, lParam);
</span></span></pre></div>
<a id="trunkToolsMiniBrowserwinMiniBrowsercpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/win/MiniBrowser.cpp (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/win/MiniBrowser.cpp        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Tools/MiniBrowser/win/MiniBrowser.cpp        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -486,6 +486,24 @@
</span><span class="cx"> webActions->zoomPageOut(nullptr);
</span><span class="cx"> }
</span><span class="cx">
</span><ins>+typedef _com_ptr_t<_com_IIID<IWebViewPrivate3, &__uuidof(IWebViewPrivate3)>> IWebViewPrivate3Ptr;
+
+void MiniBrowser::showLayerTree()
+{
+ IWebViewPrivate3Ptr webViewPrivate;
+ if (FAILED(m_webView->QueryInterface(IID_IWebViewPrivate3, reinterpret_cast<void**>(&webViewPrivate.GetInterfacePtr()))))
+ return;
+
+ OutputDebugString(L"CURRENT TREE:\n");
+
+ _bstr_t layerTreeBstr;
+ if (FAILED(webViewPrivate->layerTreeAsString(layerTreeBstr.GetAddress())))
+ OutputDebugString(L" Failed to retrieve the layer tree.\n");
+ else
+ OutputDebugString(layerTreeBstr);
+ OutputDebugString(L"\n\n");
+}
+
</ins><span class="cx"> void MiniBrowser::generateFontForScaleFactor(float scaleFactor)
</span><span class="cx"> {
</span><span class="cx"> if (m_hURLBarFont)
</span></span></pre></div>
<a id="trunkToolsMiniBrowserwinMiniBrowserh"></a>
<div class="modfile"><h4>Modified: trunk/Tools/MiniBrowser/win/MiniBrowser.h (189832 => 189833)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/MiniBrowser/win/MiniBrowser.h        2015-09-16 00:30:38 UTC (rev 189832)
+++ trunk/Tools/MiniBrowser/win/MiniBrowser.h        2015-09-16 01:00:32 UTC (rev 189833)
</span><span class="lines">@@ -90,6 +90,8 @@
</span><span class="cx"> void zoomIn();
</span><span class="cx"> void zoomOut();
</span><span class="cx">
</span><ins>+ void showLayerTree();
+
</ins><span class="cx"> float deviceScaleFactor() { return m_deviceScaleFactor; }
</span><span class="cx"> void updateDeviceScaleFactor();
</span><span class="cx">
</span></span></pre>
</div>
</div>
</body>
</html>