<!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>[178509] 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/178509">178509</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2015-01-15 05:07:42 -0800 (Thu, 15 Jan 2015)</dd>
</dl>

<h3>Log Message</h3>
<pre>REGRESSION(<a href="http://trac.webkit.org/projects/webkit/changeset/177075">r177075</a>): [GTK] Creating a second web view disables accelerated compositing in existing web view
https://bugs.webkit.org/show_bug.cgi?id=140494

Reviewed by Gustavo Noronha Silva.

The problem is that <a href="http://trac.webkit.org/projects/webkit/changeset/177075">r177075</a> moved the creation of the redirected
XComposite window to realize method, but leaving the call to
webkitWebViewBaseUpdatePreferences() in both places Realize() and
CreateWebPage(). webkitWebViewBaseUpdatePreferences() only updates
the accelerating compositing setting nowadays, depending on
whether the redirected XComposited window could be created or not
(something that depends on whether XRender, XComposite and XDamage
extensions are available in the current display). So, when the
first web view is created, webkitWebViewBaseUpdatePreferences() is
called first from CreateWebPage(), and always disabling
accelerated compositing because the redirected window hasn't been
created yet, and then from Realize() right after the redirected
window is created so that accelerated compositing is enabled. When
the second web view is created the same happens, but since
settings are shared among web views, the first call to
webkitWebViewBaseUpdatePreferences() from CreateWebPage() disables
accelerated compositing and the web page exists accelerated
compositing mode and never enters it again unless the page is
reloaded. I guess the web page should enter accelerated
compositing mode again when the setting is enabled again from
Realize(), but since the setting is global and doesn't depend on
every web view, we should never disable it once it has been
enabled in any case.
Since we want to enable accelerated compositing mode when the
redirected XComposite window has been successfully created, we can
use the SetNativeSurfaceHandleForCompositing message to enable the
setting and remove webkitWebViewBaseUpdatePreferences().

* UIProcess/API/gtk/WebKitWebView.cpp:
(webkitWebViewUpdateSettings):
* UIProcess/API/gtk/WebKitWebViewBase.cpp:
(webkitWebViewBaseRealize):
(webkitWebViewBaseCreateWebPage):
(webkitWebViewBaseUpdatePreferences): Deleted.
* UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
* WebProcess/WebPage/DrawingAreaImpl.cpp:
(WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing):</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewcpp">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewBasecpp">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewBasePrivateh">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h</a></li>
<li><a href="#trunkSourceWebKit2WebProcessWebPageDrawingAreaImplcpp">trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (178508 => 178509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2015-01-15 12:20:45 UTC (rev 178508)
+++ trunk/Source/WebKit2/ChangeLog        2015-01-15 13:07:42 UTC (rev 178509)
</span><span class="lines">@@ -1,3 +1,48 @@
</span><ins>+2015-01-15  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        REGRESSION(r177075): [GTK] Creating a second web view disables accelerated compositing in existing web view
+        https://bugs.webkit.org/show_bug.cgi?id=140494
+
+        Reviewed by Gustavo Noronha Silva.
+
+        The problem is that r177075 moved the creation of the redirected
+        XComposite window to realize method, but leaving the call to
+        webkitWebViewBaseUpdatePreferences() in both places Realize() and
+        CreateWebPage(). webkitWebViewBaseUpdatePreferences() only updates
+        the accelerating compositing setting nowadays, depending on
+        whether the redirected XComposited window could be created or not
+        (something that depends on whether XRender, XComposite and XDamage
+        extensions are available in the current display). So, when the
+        first web view is created, webkitWebViewBaseUpdatePreferences() is
+        called first from CreateWebPage(), and always disabling
+        accelerated compositing because the redirected window hasn't been
+        created yet, and then from Realize() right after the redirected
+        window is created so that accelerated compositing is enabled. When
+        the second web view is created the same happens, but since
+        settings are shared among web views, the first call to
+        webkitWebViewBaseUpdatePreferences() from CreateWebPage() disables
+        accelerated compositing and the web page exists accelerated
+        compositing mode and never enters it again unless the page is
+        reloaded. I guess the web page should enter accelerated
+        compositing mode again when the setting is enabled again from
+        Realize(), but since the setting is global and doesn't depend on
+        every web view, we should never disable it once it has been
+        enabled in any case.
+        Since we want to enable accelerated compositing mode when the
+        redirected XComposite window has been successfully created, we can
+        use the SetNativeSurfaceHandleForCompositing message to enable the
+        setting and remove webkitWebViewBaseUpdatePreferences().
+
+        * UIProcess/API/gtk/WebKitWebView.cpp:
+        (webkitWebViewUpdateSettings):
+        * UIProcess/API/gtk/WebKitWebViewBase.cpp:
+        (webkitWebViewBaseRealize):
+        (webkitWebViewBaseCreateWebPage):
+        (webkitWebViewBaseUpdatePreferences): Deleted.
+        * UIProcess/API/gtk/WebKitWebViewBasePrivate.h:
+        * WebProcess/WebPage/DrawingAreaImpl.cpp:
+        (WebKit::DrawingAreaImpl::setNativeSurfaceHandleForCompositing):
+
</ins><span class="cx"> 2015-01-14  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         Unreviewed. Fix GTK+ build after r178464.
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp (178508 => 178509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp        2015-01-15 12:20:45 UTC (rev 178508)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebView.cpp        2015-01-15 13:07:42 UTC (rev 178509)
</span><span class="lines">@@ -486,8 +486,6 @@
</span><span class="cx">     page-&gt;setCanRunModal(webkit_settings_get_allow_modal_dialogs(settings));
</span><span class="cx">     page-&gt;setCustomUserAgent(String::fromUTF8(webkit_settings_get_user_agent(settings)));
</span><span class="cx"> 
</span><del>-    webkitWebViewBaseUpdatePreferences(WEBKIT_WEB_VIEW_BASE(webView));
-
</del><span class="cx">     g_signal_connect(settings, &quot;notify::allow-modal-dialogs&quot;, G_CALLBACK(allowModalDialogsChanged), webView);
</span><span class="cx">     g_signal_connect(settings, &quot;notify::zoom-text-only&quot;, G_CALLBACK(zoomTextOnlyChanged), webView);
</span><span class="cx">     g_signal_connect(settings, &quot;notify::user-agent&quot;, G_CALLBACK(userAgentChanged), webView);
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewBasecpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp (178508 => 178509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp        2015-01-15 12:20:45 UTC (rev 178508)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBase.cpp        2015-01-15 13:07:42 UTC (rev 178509)
</span><span class="lines">@@ -328,7 +328,6 @@
</span><span class="cx">             DrawingAreaProxyImpl* drawingArea = static_cast&lt;DrawingAreaProxyImpl*&gt;(priv-&gt;pageProxy-&gt;drawingArea());
</span><span class="cx">             drawingArea-&gt;setNativeSurfaceHandleForCompositing(priv-&gt;redirectedWindow-&gt;windowID());
</span><span class="cx">         }
</span><del>-        webkitWebViewBaseUpdatePreferences(webView);
</del><span class="cx">     }
</span><span class="cx"> #endif
</span><span class="cx"> 
</span><span class="lines">@@ -1105,19 +1104,6 @@
</span><span class="cx">     return webkitWebViewBase-&gt;priv-&gt;pageProxy.get();
</span><span class="cx"> }
</span><span class="cx"> 
</span><del>-void webkitWebViewBaseUpdatePreferences(WebKitWebViewBase* webkitWebViewBase)
-{
-    WebKitWebViewBasePrivate* priv = webkitWebViewBase-&gt;priv;
-
-#if USE(TEXTURE_MAPPER_GL) &amp;&amp; PLATFORM(X11)
-    bool acceleratedCompositingEnabled = priv-&gt;redirectedWindow ? true : false;
-#else
-    bool acceleratedCompositingEnabled = false;
-#endif
-
-    priv-&gt;pageProxy-&gt;preferences().setAcceleratedCompositingEnabled(acceleratedCompositingEnabled);
-}
-
</del><span class="cx"> #if HAVE(GTK_SCALE_FACTOR)
</span><span class="cx"> static void deviceScaleFactorChanged(WebKitWebViewBase* webkitWebViewBase)
</span><span class="cx"> {
</span><span class="lines">@@ -1144,8 +1130,6 @@
</span><span class="cx">     priv-&gt;pageProxy-&gt;setIntrinsicDeviceScaleFactor(gtk_widget_get_scale_factor(GTK_WIDGET(webkitWebViewBase)));
</span><span class="cx">     g_signal_connect(webkitWebViewBase, &quot;notify::scale-factor&quot;, G_CALLBACK(deviceScaleFactorChanged), nullptr);
</span><span class="cx"> #endif
</span><del>-
-    webkitWebViewBaseUpdatePreferences(webkitWebViewBase);
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void webkitWebViewBaseSetTooltipText(WebKitWebViewBase* webViewBase, const char* tooltip)
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitWebViewBasePrivateh"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h (178508 => 178509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h        2015-01-15 12:20:45 UTC (rev 178508)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitWebViewBasePrivate.h        2015-01-15 13:07:42 UTC (rev 178509)
</span><span class="lines">@@ -53,12 +53,7 @@
</span><span class="cx"> GdkEvent* webkitWebViewBaseTakeContextMenuEvent(WebKitWebViewBase*);
</span><span class="cx"> void webkitWebViewBaseSetInputMethodState(WebKitWebViewBase*, bool enabled);
</span><span class="cx"> void webkitWebViewBaseUpdateTextInputState(WebKitWebViewBase*);
</span><del>-void webkitWebViewBaseUpdatePreferences(WebKitWebViewBase*);
</del><span class="cx"> 
</span><del>-#if USE(TEXTURE_MAPPER_GL)
-void webkitWebViewBaseQueueDrawOfAcceleratedCompositingResults(WebKitWebViewBase*);
-#endif
-
</del><span class="cx"> void webkitWebViewBaseSetFocus(WebKitWebViewBase*, bool focused);
</span><span class="cx"> bool webkitWebViewBaseIsInWindowActive(WebKitWebViewBase*);
</span><span class="cx"> bool webkitWebViewBaseIsFocused(WebKitWebViewBase*);
</span></span></pre></div>
<a id="trunkSourceWebKit2WebProcessWebPageDrawingAreaImplcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp (178508 => 178509)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp        2015-01-15 12:20:45 UTC (rev 178508)
+++ trunk/Source/WebKit2/WebProcess/WebPage/DrawingAreaImpl.cpp        2015-01-15 13:07:42 UTC (rev 178509)
</span><span class="lines">@@ -688,6 +688,7 @@
</span><span class="cx"> void DrawingAreaImpl::setNativeSurfaceHandleForCompositing(uint64_t handle)
</span><span class="cx"> {
</span><span class="cx">     m_nativeSurfaceHandleForCompositing = handle;
</span><ins>+    m_webPage.corePage()-&gt;settings().setAcceleratedCompositingEnabled(true);
</ins><span class="cx"> 
</span><span class="cx"> #if USE(COORDINATED_GRAPHICS_THREADED)
</span><span class="cx">     if (m_layerTreeHost)
</span></span></pre>
</div>
</div>

</body>
</html>