<!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>[190238] 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/190238">190238</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-09-25 02:42:20 -0700 (Fri, 25 Sep 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>[GTK] ASSERTION FAILED: !m_inUpdateBackingStoreState in DrawingAreaImpl::display() after DrawingAreaImpl::forceRepaint()
https://bugs.webkit.org/show_bug.cgi?id=148956

Reviewed by Žan Doberšek.

Source/WebKit2:

This is because those tests call notifyDone in the onresize event
handler. InjectedBundlePage::dump() always calls WKBundlePageForceRepaint()
before dumping. When the view is resized DrawingAreaImpl::updateBackingStoreState()
is called, so if the size has changed the FrameView::resize()
method is called and all children are resized, so the onresize
handlers happen at that point, before the
m_inUpdateBackingStoreState is set to false again. For WTR we
could probably just return early from froceReapaint() when
m_inUpdateBackingStoreState is true, because in that case we know
the layout is updated because of the resize and the actual display
is not really needed. But the UI process can also request a force
repaint, so we could wait until the backing store update is done
and then force the repaint. For WTR it will happen after the
dump, but it shouldn't be a problem.

* WebProcess/WebPage/DrawingAreaImpl.cpp:
(WebKit::DrawingAreaImpl::forceRepaint):
(WebKit::DrawingAreaImpl::updateBackingStoreState):
* WebProcess/WebPage/DrawingAreaImpl.h:

LayoutTests:

Unskip tests that should pass now.

* platform/gtk/TestExpectations:</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkLayoutTestsChangeLog">trunk/LayoutTests/ChangeLog</a></li>
<li><a href="#trunkLayoutTestsplatformgtkTestExpectations">trunk/LayoutTests/platform/gtk/TestExpectations</a></li>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageDrawingAreaImplcpp">trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageDrawingAreaImplh">trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkLayoutTestsChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/ChangeLog (190237 => 190238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/ChangeLog        2015-09-25 06:58:25 UTC (rev 190237)
+++ trunk/LayoutTests/ChangeLog        2015-09-25 09:42:20 UTC (rev 190238)
</span><span class="lines">@@ -1,3 +1,14 @@
</span><ins>+2015-09-25  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [GTK] ASSERTION FAILED: !m_inUpdateBackingStoreState in DrawingAreaImpl::display() after DrawingAreaImpl::forceRepaint()
+        https://bugs.webkit.org/show_bug.cgi?id=148956
+
+        Reviewed by Žan Doberšek.
+
+        Unskip tests that should pass now.
+
+        * platform/gtk/TestExpectations:
+
</ins><span class="cx"> 2015-09-24  Beth Dakin  &lt;bdakin@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         This started failing after this rollout: 
</span></span></pre></div>
<a id="trunkLayoutTestsplatformgtkTestExpectations"></a>
<div class="modfile"><h4>Modified: trunk/LayoutTests/platform/gtk/TestExpectations (190237 => 190238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/LayoutTests/platform/gtk/TestExpectations        2015-09-25 06:58:25 UTC (rev 190237)
+++ trunk/LayoutTests/platform/gtk/TestExpectations        2015-09-25 09:42:20 UTC (rev 190238)
</span><span class="lines">@@ -698,16 +698,6 @@
</span><span class="cx"> 
</span><span class="cx"> webkit.org/b/144771 editing/selection/selection-invalid-offset.html [ Crash ]
</span><span class="cx"> 
</span><del>-webkit.org/b/148956 [ Debug ] css3/viewport-percentage-lengths/viewport-percentage-lengths-anonymous-block.html [ Crash ]
-webkit.org/b/148956 [ Debug ] css3/viewport-percentage-lengths/viewport-percentage-lengths-percent-size-child.html [ Crash ]
-webkit.org/b/148956 [ Debug ] css3/viewport-percentage-lengths/viewport-percentage-lengths-relative-font-size.html [ Crash ]
-webkit.org/b/148956 [ Debug ] css3/viewport-percentage-lengths/viewport-percentage-lengths-resize.html [ Crash ]
-webkit.org/b/148956 [ Debug ] fast/css-grid-layout/flex-content-sized-columns-resize.html [ Crash ]
-webkit.org/b/148956 [ Debug ] fast/dom/Window/window-resize-contents.html [ Crash ]
-webkit.org/b/148956 [ Debug ] fast/dom/rtl-scroll-to-leftmost-and-resize.html [ Crash ]
-webkit.org/b/148956 [ Debug ] fast/dynamic/window-resize-scrollbars-test.html [ Crash ]
-webkit.org/b/148956 [ Debug ] fast/fixed-layout/fixed-layout.html [ Crash ]
-
</del><span class="cx"> #////////////////////////////////////////////////////////////////////////////////////////
</span><span class="cx"> # End of Crashing tests
</span><span class="cx"> #////////////////////////////////////////////////////////////////////////////////////////
</span></span></pre></div>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (190237 => 190238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-09-25 06:58:25 UTC (rev 190237)
+++ trunk/Source/WebKit2/ChangeLog        2015-09-25 09:42:20 UTC (rev 190238)
</span><span class="lines">@@ -1,3 +1,30 @@
</span><ins>+2015-09-25  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [GTK] ASSERTION FAILED: !m_inUpdateBackingStoreState in DrawingAreaImpl::display() after DrawingAreaImpl::forceRepaint()
+        https://bugs.webkit.org/show_bug.cgi?id=148956
+
+        Reviewed by Žan Doberšek.
+
+        This is because those tests call notifyDone in the onresize event
+        handler. InjectedBundlePage::dump() always calls WKBundlePageForceRepaint()
+        before dumping. When the view is resized DrawingAreaImpl::updateBackingStoreState()
+        is called, so if the size has changed the FrameView::resize()
+        method is called and all children are resized, so the onresize
+        handlers happen at that point, before the
+        m_inUpdateBackingStoreState is set to false again. For WTR we
+        could probably just return early from froceReapaint() when
+        m_inUpdateBackingStoreState is true, because in that case we know
+        the layout is updated because of the resize and the actual display
+        is not really needed. But the UI process can also request a force
+        repaint, so we could wait until the backing store update is done
+        and then force the repaint. For WTR it will happen after the
+        dump, but it shouldn't be a problem.
+
+        * WebProcess/WebPage/DrawingAreaImpl.cpp:
+        (WebKit::DrawingAreaImpl::forceRepaint):
+        (WebKit::DrawingAreaImpl::updateBackingStoreState):
+        * WebProcess/WebPage/DrawingAreaImpl.h:
+
</ins><span class="cx"> 2015-09-24  Tim Horton  &lt;timothy_horton@apple.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Find hole drawn at subframe's 0x0 when a subframe find match is not rendered
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageDrawingAreaImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp (190237 => 190238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp        2015-09-25 06:58:25 UTC (rev 190237)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp        2015-09-25 09:42:20 UTC (rev 190238)
</span><span class="lines">@@ -197,6 +197,12 @@
</span><span class="cx"> 
</span><span class="cx"> void DrawingAreaImpl::forceRepaint()
</span><span class="cx"> {
</span><ins>+    if (m_inUpdateBackingStoreState) {
+        m_forceRepaintAfterBackingStoreStateUpdate = true;
+        return;
+    }
+
+    m_forceRepaintAfterBackingStoreStateUpdate = false;
</ins><span class="cx">     setNeedsDisplay();
</span><span class="cx"> 
</span><span class="cx">     m_webPage.layoutIfNeeded();
</span><span class="lines">@@ -375,6 +381,8 @@
</span><span class="cx">     }
</span><span class="cx"> 
</span><span class="cx">     m_inUpdateBackingStoreState = false;
</span><ins>+    if (m_forceRepaintAfterBackingStoreStateUpdate)
+        forceRepaint();
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void DrawingAreaImpl::sendDidUpdateBackingStoreState()
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageDrawingAreaImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h (190237 => 190238)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h        2015-09-25 06:58:25 UTC (rev 190237)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.h        2015-09-25 09:42:20 UTC (rev 190238)
</span><span class="lines">@@ -132,6 +132,8 @@
</span><span class="cx">     bool m_isPaintingSuspended;
</span><span class="cx">     bool m_alwaysUseCompositing;
</span><span class="cx"> 
</span><ins>+    bool m_forceRepaintAfterBackingStoreStateUpdate { false };
+
</ins><span class="cx">     RunLoop::Timer&lt;DrawingAreaImpl&gt; m_displayTimer;
</span><span class="cx">     RunLoop::Timer&lt;DrawingAreaImpl&gt; m_exitCompositingTimer;
</span><span class="cx"> 
</span></span></pre>
</div>
</div>

</body>
</html>