<!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>[260186] trunk/Source/WebKit</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/260186">260186</a></dd>
<dt>Author</dt> <dd>timothy_horton@apple.com</dd>
<dt>Date</dt> <dd>2020-04-16 08:33:34 -0700 (Thu, 16 Apr 2020)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION (<a href="http://trac.webkit.org/projects/webkit/changeset/259898">r259898</a>): WebKit-based Books views are all blank
https://bugs.webkit.org/show_bug.cgi?id=210590
<rdar://problem/61791109>

Reviewed by Chris Dumez.

* UIProcess/Cocoa/WebViewImpl.h:
* UIProcess/Cocoa/WebViewImpl.mm:
(WebKit::WebViewImpl::enterAcceleratedCompositingWithRootLayer):
(WebKit::WebViewImpl::setAcceleratedCompositingRootLayer):
(WebKit::WebViewImpl::setAcceleratedCompositingRootLayerAfterFlush): Deleted.
* UIProcess/mac/PageClientImplMac.mm:
(WebKit::PageClientImpl::enterAcceleratedCompositingMode):
(WebKit::PageClientImpl::didFirstLayerFlush):
The changes to setAcceleratedCompositingRootLayer in <a href="http://trac.webkit.org/projects/webkit/changeset/259898">r259898</a> proved
to be wrong in a second way (the first being fixed in <a href="http://trac.webkit.org/projects/webkit/changeset/260104">r260104</a>): when
setAcceleratedCompositingRootLayer is called from updateAcceleratedCompositingMode,
because the layer hosting mode changed (Books appears to use app-hosted layers),
it incorrectly identified the root layer change as a process swap, resulting
in the correct layer never being unhidden.

This is enough mistakes that I'm going to try a different approach:
put setAcceleratedCompositingRootLayer back to the way it was before, where
it immediately updates the layer without any smarts, remove
setAcceleratedCompositingRootLayerAfterFlush, because it's no longer necessary,
and add enterAcceleratedCompositingWithRootLayer, which is specifically only
called in the case where DrawingArea will for-sure send us a follow-up
(didFirstLayerFlush) that will unhide the root layer.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKitChangeLog">trunk/Source/WebKit/ChangeLog</a></li>
<li><a href="#trunkSourceWebKitUIProcessCocoaWebViewImplh">trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h</a></li>
<li><a href="#trunkSourceWebKitUIProcessCocoaWebViewImplmm">trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm</a></li>
<li><a href="#trunkSourceWebKitUIProcessmacPageClientImplMacmm">trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKitChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/ChangeLog (260185 => 260186)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/ChangeLog    2020-04-16 14:55:32 UTC (rev 260185)
+++ trunk/Source/WebKit/ChangeLog       2020-04-16 15:33:34 UTC (rev 260186)
</span><span class="lines">@@ -1,3 +1,34 @@
</span><ins>+2020-04-16  Tim Horton  <timothy_horton@apple.com>
+
+        REGRESSION (r259898): WebKit-based Books views are all blank
+        https://bugs.webkit.org/show_bug.cgi?id=210590
+        <rdar://problem/61791109>
+
+        Reviewed by Chris Dumez.
+
+        * UIProcess/Cocoa/WebViewImpl.h:
+        * UIProcess/Cocoa/WebViewImpl.mm:
+        (WebKit::WebViewImpl::enterAcceleratedCompositingWithRootLayer):
+        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayer):
+        (WebKit::WebViewImpl::setAcceleratedCompositingRootLayerAfterFlush): Deleted.
+        * UIProcess/mac/PageClientImplMac.mm:
+        (WebKit::PageClientImpl::enterAcceleratedCompositingMode):
+        (WebKit::PageClientImpl::didFirstLayerFlush):
+        The changes to setAcceleratedCompositingRootLayer in r259898 proved
+        to be wrong in a second way (the first being fixed in r260104): when
+        setAcceleratedCompositingRootLayer is called from updateAcceleratedCompositingMode,
+        because the layer hosting mode changed (Books appears to use app-hosted layers),
+        it incorrectly identified the root layer change as a process swap, resulting
+        in the correct layer never being unhidden.
+
+        This is enough mistakes that I'm going to try a different approach:
+        put setAcceleratedCompositingRootLayer back to the way it was before, where
+        it immediately updates the layer without any smarts, remove
+        setAcceleratedCompositingRootLayerAfterFlush, because it's no longer necessary,
+        and add enterAcceleratedCompositingWithRootLayer, which is specifically only
+        called in the case where DrawingArea will for-sure send us a follow-up
+        (didFirstLayerFlush) that will unhide the root layer.
+
</ins><span class="cx"> 2020-04-16  Eric Carlson  <eric.carlson@apple.com>
</span><span class="cx"> 
</span><span class="cx">         [macOS] Update ScreenTime as playback state changes
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessCocoaWebViewImplh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h (260185 => 260186)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h        2020-04-16 14:55:32 UTC (rev 260185)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.h   2020-04-16 15:33:34 UTC (rev 260186)
</span><span class="lines">@@ -431,8 +431,8 @@
</span><span class="cx">     NSString *stringForToolTip(NSToolTipTag tag);
</span><span class="cx">     void toolTipChanged(const String& oldToolTip, const String& newToolTip);
</span><span class="cx"> 
</span><ins>+    void enterAcceleratedCompositingWithRootLayer(CALayer *);
</ins><span class="cx">     void setAcceleratedCompositingRootLayer(CALayer *);
</span><del>-    void setAcceleratedCompositingRootLayerAfterFlush(CALayer *);
</del><span class="cx">     CALayer *acceleratedCompositingRootLayer() const { return m_rootLayer.get(); }
</span><span class="cx"> 
</span><span class="cx">     void setThumbnailView(_WKThumbnailView *);
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessCocoaWebViewImplmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm (260185 => 260186)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm       2020-04-16 14:55:32 UTC (rev 260185)
+++ trunk/Source/WebKit/UIProcess/Cocoa/WebViewImpl.mm  2020-04-16 15:33:34 UTC (rev 260186)
</span><span class="lines">@@ -3804,17 +3804,17 @@
</span><span class="cx">     }
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebViewImpl::setAcceleratedCompositingRootLayer(CALayer *rootLayer)
</del><ins>+void WebViewImpl::enterAcceleratedCompositingWithRootLayer(CALayer *rootLayer)
</ins><span class="cx"> {
</span><del>-    [rootLayer web_disableAllActions];
-
</del><span class="cx">     // This is the process-swap case. We add the new layer behind the existing root layer and mark it as hidden.
</span><span class="cx">     // This way, the new layer gets accelerated compositing but won't be visible until
</span><del>-    // setAcceleratedCompositingRootLayerAfterFlush() is called, in order to prevent flashing.
</del><ins>+    // setAcceleratedCompositingRootLayer() is called by didFirstLayerFlush(), in order to prevent flashing.
</ins><span class="cx">     if (m_rootLayer && rootLayer && m_rootLayer != rootLayer) {
</span><span class="cx">         if (m_thumbnailView)
</span><span class="cx">             return;
</span><span class="cx"> 
</span><ins>+        [rootLayer web_disableAllActions];
+
</ins><span class="cx">         [CATransaction begin];
</span><span class="cx">         [CATransaction setDisableActions:YES];
</span><span class="cx"> 
</span><span class="lines">@@ -3825,6 +3825,13 @@
</span><span class="cx">         return;
</span><span class="cx">     }
</span><span class="cx"> 
</span><ins>+    setAcceleratedCompositingRootLayer(rootLayer);
+}
+
+void WebViewImpl::setAcceleratedCompositingRootLayer(CALayer *rootLayer)
+{
+    [rootLayer web_disableAllActions];
+
</ins><span class="cx">     m_rootLayer = rootLayer;
</span><span class="cx">     rootLayer.hidden = NO;
</span><span class="cx"> 
</span><span class="lines">@@ -3841,12 +3848,6 @@
</span><span class="cx">     [CATransaction commit];
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void WebViewImpl::setAcceleratedCompositingRootLayerAfterFlush(CALayer *rootLayer)
-{
-    m_rootLayer = nullptr; // Make sure we replace the existing layer.
-    setAcceleratedCompositingRootLayer(rootLayer);
-}
-
</del><span class="cx"> void WebViewImpl::setThumbnailView(_WKThumbnailView *thumbnailView)
</span><span class="cx"> {
</span><span class="cx">     ASSERT(!m_thumbnailView || !thumbnailView);
</span></span></pre></div>
<a id="trunkSourceWebKitUIProcessmacPageClientImplMacmm"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm (260185 => 260186)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm   2020-04-16 14:55:32 UTC (rev 260185)
+++ trunk/Source/WebKit/UIProcess/mac/PageClientImplMac.mm      2020-04-16 15:33:34 UTC (rev 260186)
</span><span class="lines">@@ -530,7 +530,7 @@
</span><span class="cx">     ASSERT(!layerTreeContext.isEmpty());
</span><span class="cx"> 
</span><span class="cx">     CALayer *renderLayer = [CALayer _web_renderLayerWithContextID:layerTreeContext.contextID];
</span><del>-    m_impl->setAcceleratedCompositingRootLayer(renderLayer);
</del><ins>+    m_impl->enterAcceleratedCompositingWithRootLayer(renderLayer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PageClientImpl::didFirstLayerFlush(const LayerTreeContext& layerTreeContext)
</span><span class="lines">@@ -538,7 +538,7 @@
</span><span class="cx">     ASSERT(!layerTreeContext.isEmpty());
</span><span class="cx"> 
</span><span class="cx">     CALayer *renderLayer = [CALayer _web_renderLayerWithContextID:layerTreeContext.contextID];
</span><del>-    m_impl->setAcceleratedCompositingRootLayerAfterFlush(renderLayer);
</del><ins>+    m_impl->setAcceleratedCompositingRootLayer(renderLayer);
</ins><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void PageClientImpl::exitAcceleratedCompositingMode()
</span></span></pre>
</div>
</div>

</body>
</html>