<!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>[205822] 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/205822">205822</a></dd>
<dt>Author</dt> <dd>sbarati@apple.com</dd>
<dt>Date</dt> <dd>2016-09-12 14:13:09 -0700 (Mon, 12 Sep 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Add WebKit support for an option in Safari's debug menu similar to &quot;Get Bytecode Profile&quot; but for the Sampling Profiler's data
https://bugs.webkit.org/show_bug.cgi?id=161785

Reviewed by Tim Horton.

Source/WebCore:

* ForwardingHeaders/runtime/SamplingProfiler.h: Added.

Source/WebKit2:

This patch follows in the steps of how we dump output for the
internal JSC bytecode profiler tool, but now also for the internal
JSC sampling profiler tool. This can be used when doing performance
analysis work analyzing the JS execution of a page.

* UIProcess/API/C/WKPage.cpp:
(WKPageGetSamplingProfilerOutput):
* UIProcess/API/C/WKPagePrivate.h:
* UIProcess/WebPageProxy.cpp:
(WebKit::WebPageProxy::getSamplingProfilerOutput):
(WebKit::WebPageProxy::invalidateStringCallback):
* UIProcess/WebPageProxy.h:
* UIProcess/WebPageProxy.messages.in:
* WebProcess/WebPage/WebPage.cpp:
(WebKit::WebPage::getSamplingProfilerOutput):
* WebProcess/WebPage/WebPage.h:
* WebProcess/WebPage/WebPage.messages.in:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreChangeLog">trunk/Source/WebCore/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagecpp">trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPICWKPagePrivateh">trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxycpp">trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxyh">trunk/Source/WebKit2/UIProcess/WebPageProxy.h</a></li>
<li><a href="#trunkSourceWebKit2UIProcessWebPageProxymessagesin">trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagecpp">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPageh">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageWebPagemessagesin">trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebCoreForwardingHeadersruntimeSamplingProfilerh">trunk/Source/WebCore/ForwardingHeaders/runtime/SamplingProfiler.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebCoreChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebCore/ChangeLog (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ChangeLog        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebCore/ChangeLog        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -1,3 +1,12 @@
</span><ins>+2016-09-12  Saam Barati  &lt;sbarati@apple.com&gt;
+
+        Add WebKit support for an option in Safari's debug menu similar to &quot;Get Bytecode Profile&quot; but for the Sampling Profiler's data
+        https://bugs.webkit.org/show_bug.cgi?id=161785
+
+        Reviewed by Tim Horton.
+
+        * ForwardingHeaders/runtime/SamplingProfiler.h: Added.
+
</ins><span class="cx"> 2016-09-12  Dave Hyatt  &lt;hyatt@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [CSS Parser] Add support for the parsing of the HTML sizes attribute
</span></span></pre></div>
<a id="trunkSourceWebCoreForwardingHeadersruntimeSamplingProfilerh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebCore/ForwardingHeaders/runtime/SamplingProfiler.h (0 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebCore/ForwardingHeaders/runtime/SamplingProfiler.h                                (rev 0)
+++ trunk/Source/WebCore/ForwardingHeaders/runtime/SamplingProfiler.h        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -0,0 +1,4 @@
</span><ins>+#ifndef WebCore_FWD_SamplingProfiler_h
+#define WebCore_FWD_SamplingProfiler_h
+#include &lt;JavaScriptCore/SamplingProfiler.h&gt;
+#endif
</ins></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/ChangeLog        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -1,3 +1,28 @@
</span><ins>+2016-09-12  Saam Barati  &lt;sbarati@apple.com&gt;
+
+        Add WebKit support for an option in Safari's debug menu similar to &quot;Get Bytecode Profile&quot; but for the Sampling Profiler's data
+        https://bugs.webkit.org/show_bug.cgi?id=161785
+
+        Reviewed by Tim Horton.
+
+        This patch follows in the steps of how we dump output for the
+        internal JSC bytecode profiler tool, but now also for the internal
+        JSC sampling profiler tool. This can be used when doing performance
+        analysis work analyzing the JS execution of a page.
+
+        * UIProcess/API/C/WKPage.cpp:
+        (WKPageGetSamplingProfilerOutput):
+        * UIProcess/API/C/WKPagePrivate.h:
+        * UIProcess/WebPageProxy.cpp:
+        (WebKit::WebPageProxy::getSamplingProfilerOutput):
+        (WebKit::WebPageProxy::invalidateStringCallback):
+        * UIProcess/WebPageProxy.h:
+        * UIProcess/WebPageProxy.messages.in:
+        * WebProcess/WebPage/WebPage.cpp:
+        (WebKit::WebPage::getSamplingProfilerOutput):
+        * WebProcess/WebPage/WebPage.h:
+        * WebProcess/WebPage/WebPage.messages.in:
+
</ins><span class="cx"> 2016-09-12  Keith Rollin  &lt;krollin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Enhance Network logging
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPage.cpp        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -2438,6 +2438,11 @@
</span><span class="cx">     toImpl(pageRef)-&gt;getBytecodeProfile(toGenericCallbackFunction(context, callback));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WKPageGetSamplingProfilerOutput(WKPageRef pageRef, void* context, WKPageGetSamplingProfilerOutputFunction callback)
+{
+    toImpl(pageRef)-&gt;getSamplingProfilerOutput(toGenericCallbackFunction(context, callback));
+}
+
</ins><span class="cx"> void WKPageIsWebProcessResponsive(WKPageRef pageRef, void* context, WKPageIsWebProcessResponsiveFunction callback)
</span><span class="cx"> {
</span><span class="cx">     toImpl(pageRef)-&gt;isWebProcessResponsive([context, callback](bool isWebProcessResponsive) {
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPICWKPagePrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/UIProcess/API/C/WKPagePrivate.h        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -96,6 +96,9 @@
</span><span class="cx"> typedef void (*WKPageGetBytecodeProfileFunction)(WKStringRef, WKErrorRef, void*);
</span><span class="cx"> WK_EXPORT void WKPageGetBytecodeProfile(WKPageRef page, void* context, WKPageGetBytecodeProfileFunction function);
</span><span class="cx"> 
</span><ins>+typedef void (*WKPageGetSamplingProfilerOutputFunction)(WKStringRef, WKErrorRef, void*);
+WK_EXPORT void WKPageGetSamplingProfilerOutput(WKPageRef page, void* context, WKPageGetSamplingProfilerOutputFunction function);
+
</ins><span class="cx"> typedef void (*WKPageIsWebProcessResponsiveFunction)(bool isWebProcessResponsive, void* context);
</span><span class="cx"> WK_EXPORT void WKPageIsWebProcessResponsive(WKPageRef page, void* context, WKPageIsWebProcessResponsiveFunction function);
</span><span class="cx">     
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxycpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.cpp        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -2877,6 +2877,18 @@
</span><span class="cx">     m_process-&gt;send(Messages::WebPage::GetBytecodeProfile(callbackID), m_pageID);
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPageProxy::getSamplingProfilerOutput(std::function&lt;void (const String&amp;, CallbackBase::Error)&gt; callbackFunction)
+{
+    if (!isValid()) {
+        callbackFunction(String(), CallbackBase::Error::Unknown);
+        return;
+    }
+    
+    uint64_t callbackID = m_callbacks.put(WTFMove(callbackFunction), m_process-&gt;throttler().backgroundActivityToken());
+    m_loadDependentStringCallbackIDs.add(callbackID);
+    m_process-&gt;send(Messages::WebPage::GetSamplingProfilerOutput(callbackID), m_pageID);
+}
+
</ins><span class="cx"> void WebPageProxy::isWebProcessResponsive(std::function&lt;void (bool isWebProcessResponsive)&gt; callbackFunction)
</span><span class="cx"> {
</span><span class="cx">     if (!isValid()) {
</span><span class="lines">@@ -4984,6 +4996,20 @@
</span><span class="cx">     callback-&gt;performCallbackWithReturnValue(resultString.impl());
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPageProxy::invalidateStringCallback(uint64_t callbackID)
+{
+    auto callback = m_callbacks.take&lt;StringCallback&gt;(callbackID);
+    if (!callback) {
+        // FIXME: Log error or assert.
+        // this can validly happen if a load invalidated the callback, though
+        return;
+    }
+
+    m_loadDependentStringCallbackIDs.remove(callbackID);
+
+    callback-&gt;invalidate();
+}
+
</ins><span class="cx"> void WebPageProxy::scriptValueCallback(const IPC::DataReference&amp; dataReference, bool hadException, const ExceptionDetails&amp; details, uint64_t callbackID)
</span><span class="cx"> {
</span><span class="cx">     auto callback = m_callbacks.take&lt;ScriptValueCallback&gt;(callbackID);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxyh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.h (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.h        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -759,6 +759,7 @@
</span><span class="cx"> 
</span><span class="cx">     void getContentsAsString(std::function&lt;void (const String&amp;, CallbackBase::Error)&gt;);
</span><span class="cx">     void getBytecodeProfile(std::function&lt;void (const String&amp;, CallbackBase::Error)&gt;);
</span><ins>+    void getSamplingProfilerOutput(std::function&lt;void (const String&amp;, CallbackBase::Error)&gt;);
</ins><span class="cx">     void isWebProcessResponsive(std::function&lt;void (bool isWebProcessResponsive)&gt;);
</span><span class="cx"> 
</span><span class="cx"> #if ENABLE(MHTML)
</span><span class="lines">@@ -1374,6 +1375,7 @@
</span><span class="cx">     void dataCallback(const IPC::DataReference&amp;, uint64_t);
</span><span class="cx">     void imageCallback(const ShareableBitmap::Handle&amp;, uint64_t);
</span><span class="cx">     void stringCallback(const String&amp;, uint64_t);
</span><ins>+    void invalidateStringCallback(uint64_t);
</ins><span class="cx">     void scriptValueCallback(const IPC::DataReference&amp;, bool hadException, const WebCore::ExceptionDetails&amp;, uint64_t);
</span><span class="cx">     void computedPagesCallback(const Vector&lt;WebCore::IntRect&gt;&amp;, double totalScaleFactorForPrinting, uint64_t);
</span><span class="cx">     void validateCommandCallback(const String&amp;, bool, int, uint64_t);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessWebPageProxymessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/UIProcess/WebPageProxy.messages.in        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -161,6 +161,7 @@
</span><span class="cx">     DataCallback(IPC::DataReference resultData, uint64_t callbackID)
</span><span class="cx">     ImageCallback(WebKit::ShareableBitmap::Handle bitmapHandle, uint64_t callbackID)
</span><span class="cx">     StringCallback(String resultString, uint64_t callbackID)
</span><ins>+    InvalidateStringCallback(uint64_t callbackID)
</ins><span class="cx">     ScriptValueCallback(IPC::DataReference resultData, bool hadException, struct WebCore::ExceptionDetails details, uint64_t callbackID)
</span><span class="cx">     ComputedPagesCallback(Vector&lt;WebCore::IntRect&gt; pageRects, double totalScaleFactorForPrinting, uint64_t callbackID)
</span><span class="cx">     ValidateCommandCallback(String command, bool isEnabled, int32_t state, uint64_t callbackID)
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.cpp        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -183,6 +183,7 @@
</span><span class="cx"> #include &lt;runtime/JSCInlines.h&gt;
</span><span class="cx"> #include &lt;runtime/JSCJSValue.h&gt;
</span><span class="cx"> #include &lt;runtime/JSLock.h&gt;
</span><ins>+#include &lt;runtime/SamplingProfiler.h&gt;
</ins><span class="cx"> #include &lt;wtf/RunLoop.h&gt;
</span><span class="cx"> #include &lt;wtf/TemporaryChange.h&gt;
</span><span class="cx"> 
</span><span class="lines">@@ -5378,6 +5379,24 @@
</span><span class="cx">     send(Messages::WebPageProxy::StringCallback(result, callbackID));
</span><span class="cx"> }
</span><span class="cx"> 
</span><ins>+void WebPage::getSamplingProfilerOutput(uint64_t callbackID)
+{
+#if ENABLE(SAMPLING_PROFILER)
+    SamplingProfiler* samplingProfiler = JSDOMWindow::commonVM().samplingProfiler();
+    if (!samplingProfiler) {
+        send(Messages::WebPageProxy::InvalidateStringCallback(callbackID));
+        return;
+    }
+
+    StringPrintStream result;
+    samplingProfiler-&gt;reportTopFunctions(result);
+    samplingProfiler-&gt;reportTopBytecodes(result);
+    send(Messages::WebPageProxy::StringCallback(result.toString(), callbackID));
+#else
+    send(Messages::WebPageProxy::InvalidateStringCallback(callbackID));
+#endif
+}
+
</ins><span class="cx"> PassRefPtr&lt;WebCore::Range&gt; WebPage::rangeFromEditingRange(WebCore::Frame&amp; frame, const EditingRange&amp; range, EditingRangeIsRelativeTo editingRangeIsRelativeTo)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(range.location != notFound);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPageh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.h        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -909,6 +909,7 @@
</span><span class="cx">     void updateCachedDocumentLoader(WebDocumentLoader&amp;, WebCore::Frame&amp;);
</span><span class="cx"> 
</span><span class="cx">     void getBytecodeProfile(uint64_t callbackID);
</span><ins>+    void getSamplingProfilerOutput(uint64_t callbackID);
</ins><span class="cx">     
</span><span class="cx"> #if ENABLE(SERVICE_CONTROLS) || ENABLE(TELEPHONE_NUMBER_DETECTION)
</span><span class="cx">     void handleTelephoneNumberClick(const String&amp; number, const WebCore::IntPoint&amp;);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageWebPagemessagesin"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in (205821 => 205822)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2016-09-12 21:12:41 UTC (rev 205821)
+++ trunk/Source/WebKit2/WebProcess/WebPage/WebPage.messages.in        2016-09-12 21:13:09 UTC (rev 205822)
</span><span class="lines">@@ -402,6 +402,8 @@
</span><span class="cx">     SetScrollbarOverlayStyle(Optional&lt;uint32_t&gt; scrollbarStyle)
</span><span class="cx"> 
</span><span class="cx">     GetBytecodeProfile(uint64_t callbackID)
</span><ins>+
+    GetSamplingProfilerOutput(uint64_t callbackID)
</ins><span class="cx">     
</span><span class="cx">     TakeSnapshot(WebCore::IntRect snapshotRect, WebCore::IntSize bitmapSize, uint32_t options, uint64_t callbackID)
</span><span class="cx"> #if PLATFORM(MAC)
</span></span></pre>
</div>
</div>

</body>
</html>