<!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>[201872] 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/201872">201872</a></dd>
<dt>Author</dt> <dd>beidson@apple.com</dd>
<dt>Date</dt> <dd>2016-06-09 10:34:55 -0700 (Thu, 09 Jun 2016)</dd>
</dl>

<h3>Log Message</h3>
<pre>Greatly simplify CrossThreadTask.h.
https://bugs.webkit.org/show_bug.cgi?id=158542

Reviewed by Darin Adler.

Source/WTF:

* wtf/CrossThreadTask.h:
(WTF::crossThreadCopy):
(WTF::callFunctionForCrossThreadTaskImpl):
(WTF::callFunctionForCrossThreadTask):
(WTF::createCrossThreadTask):
(WTF::callMemberFunctionForCrossThreadTaskImpl):
(WTF::callMemberFunctionForCrossThreadTask):

Tools:

* TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp:
(TestWebKitAPI::TEST):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWTFChangeLog">trunk/Source/WTF/ChangeLog</a></li>
<li><a href="#trunkSourceWTFwtfCrossThreadTaskh">trunk/Source/WTF/wtf/CrossThreadTask.h</a></li>
<li><a href="#trunkToolsChangeLog">trunk/Tools/ChangeLog</a></li>
<li><a href="#trunkToolsTestWebKitAPITestsWTFCrossThreadTaskcpp">trunk/Tools/TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWTFChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/ChangeLog (201871 => 201872)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/ChangeLog        2016-06-09 17:31:08 UTC (rev 201871)
+++ trunk/Source/WTF/ChangeLog        2016-06-09 17:34:55 UTC (rev 201872)
</span><span class="lines">@@ -1,3 +1,18 @@
</span><ins>+2016-06-09  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Greatly simplify CrossThreadTask.h.
+        https://bugs.webkit.org/show_bug.cgi?id=158542
+
+        Reviewed by Darin Adler.
+
+        * wtf/CrossThreadTask.h:
+        (WTF::crossThreadCopy):
+        (WTF::callFunctionForCrossThreadTaskImpl):
+        (WTF::callFunctionForCrossThreadTask):
+        (WTF::createCrossThreadTask):
+        (WTF::callMemberFunctionForCrossThreadTaskImpl):
+        (WTF::callMemberFunctionForCrossThreadTask):
+
</ins><span class="cx"> 2016-06-08  Brady Eidson  &lt;beidson@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Make CrossThreadCopier more efficient (fewer copies!).
</span></span></pre></div>
<a id="trunkSourceWTFwtfCrossThreadTaskh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WTF/wtf/CrossThreadTask.h (201871 => 201872)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WTF/wtf/CrossThreadTask.h        2016-06-09 17:31:08 UTC (rev 201871)
+++ trunk/Source/WTF/wtf/CrossThreadTask.h        2016-06-09 17:34:55 UTC (rev 201872)
</span><span class="lines">@@ -32,24 +32,6 @@
</span><span class="cx"> namespace WTF {
</span><span class="cx"> 
</span><span class="cx"> class CrossThreadTask {
</span><del>-    template&lt;class T&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)());
-    template&lt;class T, class P1, class MP1&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1), const P1&amp;);
-    template&lt;class T, class P1, class MP1, class P2, class MP2&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1, MP2), const P1&amp;, const P2&amp;);
-    template&lt;class T, class P1, class MP1, class P2, class MP2, class P3, class MP3&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1, MP2, MP3), const P1&amp;, const P2&amp;, const P3&amp;);
-    template&lt;class T, class P1, class MP1, class P2, class MP2, class P3, class MP3, class P4, class MP4&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1, MP2, MP3, MP4), const P1&amp;, const P2&amp;, const P3&amp;, const P4&amp;);
-    template&lt;class T, class P1, class MP1, class P2, class MP2, class P3, class MP3, class P4, class MP4, class P5, class MP5&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1, MP2, MP3, MP4, MP5), const P1&amp;, const P2&amp;, const P3&amp;, const P4&amp;, const P5&amp;);
-    template&lt;class T, class P1, class MP1, class P2, class MP2, class P3, class MP3, class P4, class MP4, class P5, class MP5, class P6, class MP6&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1, MP2, MP3, MP4, MP5, MP6), const P1&amp;, const P2&amp;, const P3&amp;, const P4&amp;, const P5&amp;, const P6&amp;);
-    template&lt;class T, class P1, class MP1, class P2, class MP2, class P3, class MP3, class P4, class MP4, class P5, class MP5, class P6, class MP6, class P7, class MP7&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1, MP2, MP3, MP4, MP5, MP6, MP7), const P1&amp;, const P2&amp;, const P3&amp;, const P4&amp;, const P5&amp;, const P6&amp;, const P7&amp;);
-    template&lt;class T, class P1, class MP1, class P2, class MP2, class P3, class MP3, class P4, class MP4, class P5, class MP5, class P6, class MP6, class P7, class MP7, class P8, class MP8&gt;
-    friend CrossThreadTask createCrossThreadTask(T&amp;, void (T::*)(MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8), const P1&amp;, const P2&amp;, const P3&amp;, const P4&amp;, const P5&amp;, const P6&amp;, const P7&amp;, const P8&amp;);
</del><span class="cx"> public:
</span><span class="cx">     CrossThreadTask() = default;
</span><span class="cx"> 
</span><span class="lines">@@ -68,183 +50,52 @@
</span><span class="cx">     NoncopyableFunction&lt;void ()&gt; m_taskFunction;
</span><span class="cx"> };
</span><span class="cx"> 
</span><del>-template&lt;typename T&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)())
</del><ins>+template &lt;typename T&gt;
+T crossThreadCopy(const T&amp; t)
</ins><span class="cx"> {
</span><del>-    return CrossThreadTask([callee = &amp;callee, method]() mutable {
-        (callee-&gt;*method)();
-    });
</del><ins>+    return CrossThreadCopier&lt;T&gt;::copy(t);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T, typename P1, typename MP1&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1),
-    const P1&amp; parameter1)
</del><ins>+template &lt;typename F, typename ArgsTuple, size_t... ArgsIndex&gt;
+void callFunctionForCrossThreadTaskImpl(F function, ArgsTuple&amp;&amp; args, std::index_sequence&lt;ArgsIndex...&gt;)
</ins><span class="cx"> {
</span><del>-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1)]() mutable {
-        (callee-&gt;*method)(p1);
-    });
</del><ins>+    function(std::get&lt;ArgsIndex&gt;(std::forward&lt;ArgsTuple&gt;(args))...);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2)
</del><ins>+template &lt;typename F, typename ArgsTuple, typename ArgsIndicies = std::make_index_sequence&lt;std::tuple_size&lt;ArgsTuple&gt;::value&gt;&gt;
+void callFunctionForCrossThreadTask(F function, ArgsTuple&amp;&amp; args)
</ins><span class="cx"> {
</span><del>-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2)]() mutable {
-        (callee-&gt;*method)(p1, p2);
-    });
</del><ins>+    callFunctionForCrossThreadTaskImpl(function, std::forward&lt;ArgsTuple&gt;(args), ArgsIndicies());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3)
</del><ins>+template&lt;typename... Parameters, typename... Arguments&gt;
+CrossThreadTask createCrossThreadTask(void (*method)(Parameters...), const Arguments&amp;... arguments)
</ins><span class="cx"> {
</span><del>-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        p3 = CrossThreadCopier&lt;P3&gt;::copy(parameter3)]() mutable {
-        (callee-&gt;*method)(p1, p2, p3);
</del><ins>+    return CrossThreadTask([method, arguments = std::make_tuple(crossThreadCopy&lt;Arguments&gt;(arguments)...)]() mutable {
+        callFunctionForCrossThreadTask(method, WTFMove(arguments));
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3&gt;
-CrossThreadTask createCrossThreadTask(
-    void (*method)(MP1, MP2, MP3),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3)
</del><ins>+template &lt;typename C, typename MF, typename ArgsTuple, size_t... ArgsIndex&gt;
+void callMemberFunctionForCrossThreadTaskImpl(C* object, MF function, ArgsTuple&amp;&amp; args, std::index_sequence&lt;ArgsIndex...&gt;)
</ins><span class="cx"> {
</span><del>-    return CrossThreadTask([method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        p3 = CrossThreadCopier&lt;P3&gt;::copy(parameter3)]() mutable {
-        method(p1, p2, p3);
-    });
</del><ins>+    (object-&gt;*function)(std::get&lt;ArgsIndex&gt;(std::forward&lt;ArgsTuple&gt;(args))...);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3, MP4),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3,
-    const P4&amp; parameter4)
</del><ins>+template &lt;typename C, typename MF, typename ArgsTuple, typename ArgsIndicies = std::make_index_sequence&lt;std::tuple_size&lt;ArgsTuple&gt;::value&gt;&gt;
+void callMemberFunctionForCrossThreadTask(C* object, MF function, ArgsTuple&amp;&amp; args)
</ins><span class="cx"> {
</span><del>-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        p3 = CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        p4 = CrossThreadCopier&lt;P4&gt;::copy(parameter4)]() mutable {
-        (callee-&gt;*method)(p1, p2, p3, p4);
-    });
</del><ins>+    callMemberFunctionForCrossThreadTaskImpl(object, function, std::forward&lt;ArgsTuple&gt;(args), ArgsIndicies());
</ins><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3, MP4, MP5),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3,
-    const P4&amp; parameter4,
-    const P5&amp; parameter5)
</del><ins>+template&lt;typename T, typename... Parameters, typename... Arguments&gt;
+CrossThreadTask createCrossThreadTask(T&amp; callee, void (T::*method)(Parameters...), const Arguments&amp;... arguments)
</ins><span class="cx"> {
</span><del>-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        p3 = CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        p4 = CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        p5 = CrossThreadCopier&lt;P5&gt;::copy(parameter5)]() mutable {
-        (callee-&gt;*method)(p1, p2, p3, p4, p5);
</del><ins>+    return CrossThreadTask([callee = &amp;callee, method, arguments = std::make_tuple(crossThreadCopy&lt;Arguments&gt;(arguments)...)]() mutable {
+        callMemberFunctionForCrossThreadTask(callee, method, WTFMove(arguments));
</ins><span class="cx">     });
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3, MP4, MP5, MP6),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3,
-    const P4&amp; parameter4,
-    const P5&amp; parameter5,
-    const P6&amp; parameter6)
-{
-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        p3 = CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        p4 = CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        p5 = CrossThreadCopier&lt;P5&gt;::copy(parameter5),
-        p6 = CrossThreadCopier&lt;P6&gt;::copy(parameter6)]() mutable {
-        (callee-&gt;*method)(p1, p2, p3, p4, p5, p6);
-    });
-}
-
-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3, MP4, MP5, MP6, MP7),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3,
-    const P4&amp; parameter4,
-    const P5&amp; parameter5,
-    const P6&amp; parameter6,
-    const P7&amp; parameter7)
-{
-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        p3 = CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        p4 = CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        p5 = CrossThreadCopier&lt;P5&gt;::copy(parameter5),
-        p6 = CrossThreadCopier&lt;P6&gt;::copy(parameter6),
-        p7 = CrossThreadCopier&lt;P7&gt;::copy(parameter7)]() mutable {
-        (callee-&gt;*method)(p1, p2, p3, p4, p5, p6, p7);
-    });
-}
-
-template&lt;typename T, typename P1, typename MP1, typename P2, typename MP2, typename P3, typename MP3, typename P4, typename MP4, typename P5, typename MP5, typename P6, typename MP6, typename P7, typename MP7, typename P8, typename MP8&gt;
-CrossThreadTask createCrossThreadTask(
-    T&amp; callee,
-    void (T::*method)(MP1, MP2, MP3, MP4, MP5, MP6, MP7, MP8),
-    const P1&amp; parameter1,
-    const P2&amp; parameter2,
-    const P3&amp; parameter3,
-    const P4&amp; parameter4,
-    const P5&amp; parameter5,
-    const P6&amp; parameter6,
-    const P7&amp; parameter7,
-    const P8&amp; parameter8)
-{
-    return CrossThreadTask([callee = &amp;callee, method,
-        p1 = CrossThreadCopier&lt;P1&gt;::copy(parameter1),
-        p2 = CrossThreadCopier&lt;P2&gt;::copy(parameter2),
-        p3 = CrossThreadCopier&lt;P3&gt;::copy(parameter3),
-        p4 = CrossThreadCopier&lt;P4&gt;::copy(parameter4),
-        p5 = CrossThreadCopier&lt;P5&gt;::copy(parameter5),
-        p6 = CrossThreadCopier&lt;P6&gt;::copy(parameter6),
-        p7 = CrossThreadCopier&lt;P7&gt;::copy(parameter7),
-        p8 = CrossThreadCopier&lt;P8&gt;::copy(parameter8)]() mutable {
-        (callee-&gt;*method)(p1, p2, p3, p4, p5, p6, p7, p8);
-    });
-}
-
</del><span class="cx"> } // namespace WTF
</span><span class="cx"> 
</span><span class="cx"> using WTF::CrossThreadTask;
</span></span></pre></div>
<a id="trunkToolsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Tools/ChangeLog (201871 => 201872)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/ChangeLog        2016-06-09 17:31:08 UTC (rev 201871)
+++ trunk/Tools/ChangeLog        2016-06-09 17:34:55 UTC (rev 201872)
</span><span class="lines">@@ -1,3 +1,13 @@
</span><ins>+2016-06-09  Brady Eidson  &lt;beidson@apple.com&gt;
+
+        Greatly simplify CrossThreadTask.h.
+        https://bugs.webkit.org/show_bug.cgi?id=158542
+
+        Reviewed by Darin Adler.
+
+        * TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp:
+        (TestWebKitAPI::TEST):
+
</ins><span class="cx"> 2016-06-09  Chris Dumez  &lt;cdumez@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed, rolling out r201836, r201845, and r201848.
</span></span></pre></div>
<a id="trunkToolsTestWebKitAPITestsWTFCrossThreadTaskcpp"></a>
<div class="modfile"><h4>Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp (201871 => 201872)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Tools/TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp        2016-06-09 17:31:08 UTC (rev 201871)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/CrossThreadTask.cpp        2016-06-09 17:34:55 UTC (rev 201872)
</span><span class="lines">@@ -85,7 +85,6 @@
</span><span class="cx">         log().str(&quot;&quot;);
</span><span class="cx">         return string;
</span><span class="cx">     }
</span><del>-
</del><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> void testFunction(const LifetimeLogger&amp;, const LifetimeLogger&amp;, const LifetimeLogger&amp;)
</span><span class="lines">@@ -103,7 +102,7 @@
</span><span class="cx">         auto task = createCrossThreadTask(testFunction, logger1, logger2, logger3);
</span><span class="cx">         task.performTask();
</span><span class="cx">     }
</span><del>-    ASSERT_STREQ(&quot;default_constructor(&lt;default&gt;-0-0) copy_constructor(&lt;default&gt;-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(&lt;default&gt;-1-0) isolatedCopy() copy_constructor(&lt;default&gt;-2-0) isolatedCopy() copy_constructor(logger-1-0) move_constructor(&lt;default&gt;-1-1) move_constructor(&lt;default&gt;-2-1) move_constructor(logger-1-1) destructor(logger-1-0) destructor(&lt;default&gt;-2-0) destructor(&lt;default&gt;-1-0) testFunction called destructor(logger-1-1) destructor(&lt;default&gt;-2-1) destructor(&lt;default&gt;-1-1) destructor(logger-0-0) destructor(&lt;default&gt;-1-0) destructor(&lt;default&gt;-0-0) &quot;, LifetimeLogger::takeLogStr().c_str());
</del><ins>+    ASSERT_STREQ(&quot;default_constructor(&lt;default&gt;-0-0) copy_constructor(&lt;default&gt;-1-0) name_constructor(logger-0-0) isolatedCopy() copy_constructor(&lt;default&gt;-1-0) isolatedCopy() copy_constructor(&lt;default&gt;-2-0) isolatedCopy() copy_constructor(logger-1-0) move_constructor(&lt;default&gt;-1-1) move_constructor(&lt;default&gt;-2-1) move_constructor(logger-1-1) destructor(logger-1-0) destructor(&lt;default&gt;-2-0) destructor(&lt;default&gt;-1-0) move_constructor(&lt;default&gt;-1-2) move_constructor(&lt;default&gt;-2-2) move_constructor(logger-1-2) destructor(logger-1-1) destructor(&lt;default&gt;-2-1) destructor(&lt;default&gt;-1-1) testFunction called destructor(logger-1-2) destructor(&lt;default&gt;-2-2) destructor(&lt;default&gt;-1-2) destructor(logger-0-0) destructor(&lt;default&gt;-1-0) destructor(&lt;default&gt;-0-0) &quot;, LifetimeLogger::takeLogStr().c_str());
</ins><span class="cx"> }
</span><span class="cx">     
</span><span class="cx"> } // namespace TestWebKitAPI
</span></span></pre>
</div>
</div>

</body>
</html>