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

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

<h3>Log Message</h3>
<pre>[Threaded Compositor] ASSERTION FAILED: isMainThread() when ThreadedCompositor is destroyed since <a href="http://trac.webkit.org/projects/webkit/changeset/203718">r203718</a>
https://bugs.webkit.org/show_bug.cgi?id=160197

Reviewed by Žan Doberšek.

ThreadedCompositor can be destroyed from a secondary thread, for example, when a task takes a reference and the
main threads derefs it, when the task finishes in the secondary thread the lambda ends up deleting the threaded
compositor. This is ok for the Threaded compositor but not for the CompositingRunLoop class. this was not a
problem before <a href="http://trac.webkit.org/projects/webkit/changeset/203718">r203718</a> because the CompositingRunLoop object was created and destroyed in the same thread
always, but now it's part of the ThreadedCompositor class. This patch uses std:unique_ptr again to explicitly
create the CompositingRunLoop in the ThreadedCompositor constructor and delete in the invalidate() method to
make sure it happens in the main thread in both cases.

* Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
(WebKit::WorkQueuePool::invalidate):
(WebKit::WorkQueuePool::getOrCreateWorkQueueForContext):
* Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
* Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
(WebKit::ThreadedCompositor::ThreadedCompositor):
(WebKit::ThreadedCompositor::invalidate):
(WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
(WebKit::ThreadedCompositor::setDeviceScaleFactor):
(WebKit::ThreadedCompositor::setDrawsBackground):
(WebKit::ThreadedCompositor::didChangeViewportSize):
(WebKit::ThreadedCompositor::didChangeViewportAttribute):
(WebKit::ThreadedCompositor::didChangeContentsSize):
(WebKit::ThreadedCompositor::scrollTo):
(WebKit::ThreadedCompositor::scrollBy):
(WebKit::ThreadedCompositor::updateViewport):
(WebKit::ThreadedCompositor::scheduleDisplayImmediately):
(WebKit::ThreadedCompositor::forceRepaint):
* Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorCompositingRunLoopcpp">trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorCompositingRunLooph">trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorcpp">trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp</a></li>
<li><a href="#trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorh">trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (203720 => 203721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2016-07-26 16:23:09 UTC (rev 203720)
+++ trunk/Source/WebKit2/ChangeLog        2016-07-26 16:25:26 UTC (rev 203721)
</span><span class="lines">@@ -1,3 +1,38 @@
</span><ins>+2016-07-26  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [Threaded Compositor] ASSERTION FAILED: isMainThread() when ThreadedCompositor is destroyed since r203718
+        https://bugs.webkit.org/show_bug.cgi?id=160197
+
+        Reviewed by Žan Doberšek.
+
+        ThreadedCompositor can be destroyed from a secondary thread, for example, when a task takes a reference and the
+        main threads derefs it, when the task finishes in the secondary thread the lambda ends up deleting the threaded
+        compositor. This is ok for the Threaded compositor but not for the CompositingRunLoop class. this was not a
+        problem before r203718 because the CompositingRunLoop object was created and destroyed in the same thread
+        always, but now it's part of the ThreadedCompositor class. This patch uses std:unique_ptr again to explicitly
+        create the CompositingRunLoop in the ThreadedCompositor constructor and delete in the invalidate() method to
+        make sure it happens in the main thread in both cases.
+
+        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp:
+        (WebKit::WorkQueuePool::invalidate):
+        (WebKit::WorkQueuePool::getOrCreateWorkQueueForContext):
+        * Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h:
+        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
+        (WebKit::ThreadedCompositor::ThreadedCompositor):
+        (WebKit::ThreadedCompositor::invalidate):
+        (WebKit::ThreadedCompositor::setNativeSurfaceHandleForCompositing):
+        (WebKit::ThreadedCompositor::setDeviceScaleFactor):
+        (WebKit::ThreadedCompositor::setDrawsBackground):
+        (WebKit::ThreadedCompositor::didChangeViewportSize):
+        (WebKit::ThreadedCompositor::didChangeViewportAttribute):
+        (WebKit::ThreadedCompositor::didChangeContentsSize):
+        (WebKit::ThreadedCompositor::scrollTo):
+        (WebKit::ThreadedCompositor::scrollBy):
+        (WebKit::ThreadedCompositor::updateViewport):
+        (WebKit::ThreadedCompositor::scheduleDisplayImmediately):
+        (WebKit::ThreadedCompositor::forceRepaint):
+        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
+
</ins><span class="cx"> 2016-07-26  Youenn Fablet  &lt;youenn@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Remove ClientCredentialPolicy cross-origin option from ResourceLoaderOptions
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorCompositingRunLoopcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp (203720 => 203721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp        2016-07-26 16:23:09 UTC (rev 203720)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.cpp        2016-07-26 16:25:26 UTC (rev 203721)
</span><span class="lines">@@ -60,7 +60,7 @@
</span><span class="cx">     void invalidate(void* context)
</span><span class="cx">     {
</span><span class="cx">         auto workQueue = m_workQueueMap.take(context);
</span><del>-        RELEASE_ASSERT(workQueue);
</del><ins>+        ASSERT(workQueue);
</ins><span class="cx">         if (m_workQueueMap.isEmpty()) {
</span><span class="cx">             m_sharedWorkQueue = nullptr;
</span><span class="cx">             m_threadCount = 0;
</span><span class="lines">@@ -85,7 +85,7 @@
</span><span class="cx">             // FIXME: This is OK for now, and it works for a single-thread limit. But for configurations where more (but not unlimited)
</span><span class="cx">             // threads could be used, one option would be to use a HashSet here and disperse the contexts across the available threads.
</span><span class="cx">             if (m_threadCount &gt;= m_threadCountLimit) {
</span><del>-                RELEASE_ASSERT(m_sharedWorkQueue);
</del><ins>+                ASSERT(m_sharedWorkQueue);
</ins><span class="cx">                 addResult.iterator-&gt;value = m_sharedWorkQueue;
</span><span class="cx">             } else {
</span><span class="cx">                 addResult.iterator-&gt;value = WorkQueue::create(&quot;org.webkit.ThreadedCompositorWorkQueue&quot;);
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorCompositingRunLooph"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h (203720 => 203721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h        2016-07-26 16:23:09 UTC (rev 203720)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/CompositingRunLoop.h        2016-07-26 16:25:26 UTC (rev 203721)
</span><span class="lines">@@ -29,6 +29,7 @@
</span><span class="cx"> #if USE(COORDINATED_GRAPHICS_THREADED)
</span><span class="cx"> 
</span><span class="cx"> #include &lt;wtf/Condition.h&gt;
</span><ins>+#include &lt;wtf/FastMalloc.h&gt;
</ins><span class="cx"> #include &lt;wtf/Function.h&gt;
</span><span class="cx"> #include &lt;wtf/NeverDestroyed.h&gt;
</span><span class="cx"> #include &lt;wtf/Noncopyable.h&gt;
</span><span class="lines">@@ -38,6 +39,7 @@
</span><span class="cx"> 
</span><span class="cx"> class CompositingRunLoop {
</span><span class="cx">     WTF_MAKE_NONCOPYABLE(CompositingRunLoop);
</span><ins>+    WTF_MAKE_FAST_ALLOCATED;
</ins><span class="cx"> public:
</span><span class="cx">     enum UpdateTiming {
</span><span class="cx">         Immediate,
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp (203720 => 203721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp        2016-07-26 16:23:09 UTC (rev 203720)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp        2016-07-26 16:25:26 UTC (rev 203721)
</span><span class="lines">@@ -48,9 +48,9 @@
</span><span class="cx"> 
</span><span class="cx"> ThreadedCompositor::ThreadedCompositor(Client* client)
</span><span class="cx">     : m_client(client)
</span><del>-    , m_compositingRunLoop([this] { renderLayerTree(); })
</del><ins>+    , m_compositingRunLoop(std::make_unique&lt;CompositingRunLoop&gt;([this] { renderLayerTree(); }))
</ins><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTaskSync([this, protectedThis = makeRef(*this)] {
</del><ins>+    m_compositingRunLoop-&gt;performTaskSync([this, protectedThis = makeRef(*this)] {
</ins><span class="cx">         m_scene = adoptRef(new CoordinatedGraphicsScene(this));
</span><span class="cx">         m_viewportController = std::make_unique&lt;SimpleViewportController&gt;(this);
</span><span class="cx">     });
</span><span class="lines">@@ -64,19 +64,20 @@
</span><span class="cx"> void ThreadedCompositor::invalidate()
</span><span class="cx"> {
</span><span class="cx">     m_scene-&gt;detach();
</span><del>-    m_compositingRunLoop.stopUpdateTimer();
-    m_compositingRunLoop.performTaskSync([this, protectedThis = makeRef(*this)] {
</del><ins>+    m_compositingRunLoop-&gt;stopUpdateTimer();
+    m_compositingRunLoop-&gt;performTaskSync([this, protectedThis = makeRef(*this)] {
</ins><span class="cx">         m_context = nullptr;
</span><span class="cx">         m_scene = nullptr;
</span><span class="cx">         m_viewportController = nullptr;
</span><span class="cx">     });
</span><ins>+    m_compositingRunLoop = nullptr;
</ins><span class="cx">     m_client = nullptr;
</span><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::setNativeSurfaceHandleForCompositing(uint64_t handle)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.stopUpdateTimer();
-    m_compositingRunLoop.performTaskSync([this, protectedThis = makeRef(*this), handle] {
</del><ins>+    m_compositingRunLoop-&gt;stopUpdateTimer();
+    m_compositingRunLoop-&gt;performTaskSync([this, protectedThis = makeRef(*this), handle] {
</ins><span class="cx">         m_scene-&gt;setActive(!!handle);
</span><span class="cx"> 
</span><span class="cx">         // A new native handle can't be set without destroying the previous one first if any.
</span><span class="lines">@@ -89,7 +90,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::setDeviceScaleFactor(float scale)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTask([this, protectedThis = makeRef(*this), scale] {
</del><ins>+    m_compositingRunLoop-&gt;performTask([this, protectedThis = makeRef(*this), scale] {
</ins><span class="cx">         m_deviceScaleFactor = scale;
</span><span class="cx">         scheduleDisplayImmediately();
</span><span class="cx">     });
</span><span class="lines">@@ -97,7 +98,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::setDrawsBackground(bool drawsBackground)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTask([this, protectedThis = Ref&lt;ThreadedCompositor&gt;(*this), drawsBackground] {
</del><ins>+    m_compositingRunLoop-&gt;performTask([this, protectedThis = Ref&lt;ThreadedCompositor&gt;(*this), drawsBackground] {
</ins><span class="cx">         m_drawsBackground = drawsBackground;
</span><span class="cx">         scheduleDisplayImmediately();
</span><span class="cx">     });
</span><span class="lines">@@ -105,7 +106,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::didChangeViewportSize(const IntSize&amp; size)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTaskSync([this, protectedThis = makeRef(*this), size] {
</del><ins>+    m_compositingRunLoop-&gt;performTaskSync([this, protectedThis = makeRef(*this), size] {
</ins><span class="cx">         m_viewportController-&gt;didChangeViewportSize(size);
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="lines">@@ -112,7 +113,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::didChangeViewportAttribute(const ViewportAttributes&amp; attr)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTask([this, protectedThis = makeRef(*this), attr] {
</del><ins>+    m_compositingRunLoop-&gt;performTask([this, protectedThis = makeRef(*this), attr] {
</ins><span class="cx">         m_viewportController-&gt;didChangeViewportAttribute(attr);
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="lines">@@ -119,7 +120,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::didChangeContentsSize(const IntSize&amp; size)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTask([this, protectedThis = makeRef(*this), size] {
</del><ins>+    m_compositingRunLoop-&gt;performTask([this, protectedThis = makeRef(*this), size] {
</ins><span class="cx">         m_viewportController-&gt;didChangeContentsSize(size);
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="lines">@@ -126,7 +127,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::scrollTo(const IntPoint&amp; position)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTask([this, protectedThis = makeRef(*this), position] {
</del><ins>+    m_compositingRunLoop-&gt;performTask([this, protectedThis = makeRef(*this), position] {
</ins><span class="cx">         m_viewportController-&gt;scrollTo(position);
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="lines">@@ -133,7 +134,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::scrollBy(const IntSize&amp; delta)
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTask([this, protectedThis = makeRef(*this), delta] {
</del><ins>+    m_compositingRunLoop-&gt;performTask([this, protectedThis = makeRef(*this), delta] {
</ins><span class="cx">         m_viewportController-&gt;scrollBy(delta);
</span><span class="cx">     });
</span><span class="cx"> }
</span><span class="lines">@@ -158,12 +159,12 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::updateViewport()
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.startUpdateTimer(CompositingRunLoop::WaitUntilNextFrame);
</del><ins>+    m_compositingRunLoop-&gt;startUpdateTimer(CompositingRunLoop::WaitUntilNextFrame);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::scheduleDisplayImmediately()
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.startUpdateTimer(CompositingRunLoop::Immediate);
</del><ins>+    m_compositingRunLoop-&gt;startUpdateTimer(CompositingRunLoop::Immediate);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> bool ThreadedCompositor::tryEnsureGLContext()
</span><span class="lines">@@ -198,7 +199,7 @@
</span><span class="cx"> 
</span><span class="cx"> void ThreadedCompositor::forceRepaint()
</span><span class="cx"> {
</span><del>-    m_compositingRunLoop.performTaskSync([this, protectedThis = makeRef(*this)] {
</del><ins>+    m_compositingRunLoop-&gt;performTaskSync([this, protectedThis = makeRef(*this)] {
</ins><span class="cx">         renderLayerTree();
</span><span class="cx">     });
</span><span class="cx"> }
</span></span></pre></div>
<a id="trunkSourceWebKit2SharedCoordinatedGraphicsthreadedcompositorThreadedCompositorh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h (203720 => 203721)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h        2016-07-26 16:23:09 UTC (rev 203720)
+++ trunk/Source/WebKit2/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h        2016-07-26 16:25:26 UTC (rev 203721)
</span><span class="lines">@@ -105,7 +105,7 @@
</span><span class="cx">     bool m_drawsBackground { true };
</span><span class="cx">     uint64_t m_nativeSurfaceHandle { 0 };
</span><span class="cx"> 
</span><del>-    CompositingRunLoop m_compositingRunLoop;
</del><ins>+    std::unique_ptr&lt;CompositingRunLoop&gt; m_compositingRunLoop;
</ins><span class="cx"> };
</span><span class="cx"> 
</span><span class="cx"> } // namespace WebKit
</span></span></pre>
</div>
</div>

</body>
</html>