<!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>[211412] 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/211412">211412</a></dd>
<dt>Author</dt> <dd>carlosgc@webkit.org</dd>
<dt>Date</dt> <dd>2017-01-31 00:57:21 -0800 (Tue, 31 Jan 2017)</dd>
</dl>

<h3>Log Message</h3>
<pre>[GTK] Environment variables for enabling/disabling AC mode should take precedence over the API.
https://bugs.webkit.org/show_bug.cgi?id=167605

Reviewed by Žan Doberšek.

Add HardwareAccelerationManager singleton helper to handle the global values for enabling, disabling or forcing
accelerated compositing. This is used by WebPreferences to initialize the values like always, but also by
WebKitSettings to ensure those values are honored and are not changed when it's not possible. This new class can
be used in the future to implement the GPU blacklist.

* PlatformGTK.cmake: Add new files to compilation.
* UIProcess/API/gtk/WebKitSettings.cpp:
(webkit_settings_class_init): Document that the setting depends on actual hardware capabilities.
(webkit_settings_set_hardware_acceleration_policy): Check HardwareAccelerationManager before trying to change
the settings.
* UIProcess/gtk/HardwareAccelerationManager.cpp: Added.
(WebKit::HardwareAccelerationManager::singleton):
(WebKit::HardwareAccelerationManager::HardwareAccelerationManager): Initialize m_canUseHardwareAcceleration and
m_forceHardwareAcceleration dependoing on hardware and system capabilites and
WEBKIT_DISABLE_COMPOSITING_MODE/WEBKIT_FORCE_COMPOSITING_MODE variables.
* UIProcess/gtk/HardwareAccelerationManager.h: Added.
(WebKit::HardwareAccelerationManager::canUseHardwareAcceleration):
(WebKit::HardwareAccelerationManager::forceHardwareAcceleration):
* UIProcess/gtk/WebPreferencesGtk.cpp:
(WebKit::WebPreferences::platformInitializeStore): Use HardwareAccelerationManager to set the initial values.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2ChangeLog">trunk/Source/WebKit2/ChangeLog</a></li>
<li><a href="#trunkSourceWebKit2PlatformGTKcmake">trunk/Source/WebKit2/PlatformGTK.cmake</a></li>
<li><a href="#trunkSourceWebKit2UIProcessAPIgtkWebKitSettingscpp">trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessgtkWebPreferencesGtkcpp">trunk/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp</a></li>
</ul>

<h3>Added Paths</h3>
<ul>
<li><a href="#trunkSourceWebKit2UIProcessgtkHardwareAccelerationManagercpp">trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.cpp</a></li>
<li><a href="#trunkSourceWebKit2UIProcessgtkHardwareAccelerationManagerh">trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.h</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunkSourceWebKit2ChangeLog"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/ChangeLog (211411 => 211412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/ChangeLog        2017-01-31 08:07:49 UTC (rev 211411)
+++ trunk/Source/WebKit2/ChangeLog        2017-01-31 08:57:21 UTC (rev 211412)
</span><span class="lines">@@ -1,3 +1,31 @@
</span><ins>+2017-01-31  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
+
+        [GTK] Environment variables for enabling/disabling AC mode should take precedence over the API.
+        https://bugs.webkit.org/show_bug.cgi?id=167605
+
+        Reviewed by Žan Doberšek.
+
+        Add HardwareAccelerationManager singleton helper to handle the global values for enabling, disabling or forcing
+        accelerated compositing. This is used by WebPreferences to initialize the values like always, but also by
+        WebKitSettings to ensure those values are honored and are not changed when it's not possible. This new class can
+        be used in the future to implement the GPU blacklist.
+
+        * PlatformGTK.cmake: Add new files to compilation.
+        * UIProcess/API/gtk/WebKitSettings.cpp:
+        (webkit_settings_class_init): Document that the setting depends on actual hardware capabilities.
+        (webkit_settings_set_hardware_acceleration_policy): Check HardwareAccelerationManager before trying to change
+        the settings.
+        * UIProcess/gtk/HardwareAccelerationManager.cpp: Added.
+        (WebKit::HardwareAccelerationManager::singleton):
+        (WebKit::HardwareAccelerationManager::HardwareAccelerationManager): Initialize m_canUseHardwareAcceleration and
+        m_forceHardwareAcceleration dependoing on hardware and system capabilites and
+        WEBKIT_DISABLE_COMPOSITING_MODE/WEBKIT_FORCE_COMPOSITING_MODE variables.
+        * UIProcess/gtk/HardwareAccelerationManager.h: Added.
+        (WebKit::HardwareAccelerationManager::canUseHardwareAcceleration):
+        (WebKit::HardwareAccelerationManager::forceHardwareAcceleration):
+        * UIProcess/gtk/WebPreferencesGtk.cpp:
+        (WebKit::WebPreferences::platformInitializeStore): Use HardwareAccelerationManager to set the initial values.
+
</ins><span class="cx"> 2017-01-30  Carlos Garcia Campos  &lt;cgarcia@igalia.com&gt;
</span><span class="cx"> 
</span><span class="cx">         [GTK] HTTP authentication is not implemented for downloads
</span></span></pre></div>
<a id="trunkSourceWebKit2PlatformGTKcmake"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/PlatformGTK.cmake (211411 => 211412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/PlatformGTK.cmake        2017-01-31 08:07:49 UTC (rev 211411)
+++ trunk/Source/WebKit2/PlatformGTK.cmake        2017-01-31 08:57:21 UTC (rev 211412)
</span><span class="lines">@@ -310,6 +310,7 @@
</span><span class="cx">     UIProcess/gtk/AcceleratedBackingStoreX11.cpp
</span><span class="cx">     UIProcess/gtk/DragAndDropHandler.cpp
</span><span class="cx">     UIProcess/gtk/GestureController.cpp
</span><ins>+    UIProcess/gtk/HardwareAccelerationManager.cpp
</ins><span class="cx">     UIProcess/gtk/InputMethodFilter.cpp
</span><span class="cx">     UIProcess/gtk/KeyBindingTranslator.cpp
</span><span class="cx">     UIProcess/gtk/TextCheckerGtk.cpp
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessAPIgtkWebKitSettingscpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp (211411 => 211412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp        2017-01-31 08:07:49 UTC (rev 211411)
+++ trunk/Source/WebKit2/UIProcess/API/gtk/WebKitSettings.cpp        2017-01-31 08:57:21 UTC (rev 211412)
</span><span class="lines">@@ -31,6 +31,7 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;WebKitSettings.h&quot;
</span><span class="cx"> 
</span><ins>+#include &quot;HardwareAccelerationManager.h&quot;
</ins><span class="cx"> #include &quot;WebKitEnumTypes.h&quot;
</span><span class="cx"> #include &quot;WebKitPrivate.h&quot;
</span><span class="cx"> #include &quot;WebKitSettingsPrivate.h&quot;
</span><span class="lines">@@ -1294,6 +1295,10 @@
</span><span class="cx">      * completely using %WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER. Note that disabling hardware
</span><span class="cx">      * acceleration might cause some websites to not render correctly or consume more CPU.
</span><span class="cx">      *
</span><ins>+     * Note that changing this setting might not be possible if hardware acceleration is not
+     * supported by the hardware or the system. In that case you can get the value to know the
+     * actual policy being used, but changing the setting will not have any effect.
+     *
</ins><span class="cx">      * Since: 2.16
</span><span class="cx">      */
</span><span class="cx">     g_object_class_install_property(gObjectClass,
</span><span class="lines">@@ -3209,6 +3214,8 @@
</span><span class="cx">     bool changed = false;
</span><span class="cx">     switch (policy) {
</span><span class="cx">     case WEBKIT_HARDWARE_ACCELERATION_POLICY_ALWAYS:
</span><ins>+        if (!HardwareAccelerationManager::singleton().canUseHardwareAcceleration())
+            return;
</ins><span class="cx">         if (!priv-&gt;preferences-&gt;acceleratedCompositingEnabled()) {
</span><span class="cx">             priv-&gt;preferences-&gt;setAcceleratedCompositingEnabled(true);
</span><span class="cx">             changed = true;
</span><span class="lines">@@ -3219,6 +3226,8 @@
</span><span class="cx">         }
</span><span class="cx">         break;
</span><span class="cx">     case WEBKIT_HARDWARE_ACCELERATION_POLICY_NEVER:
</span><ins>+        if (HardwareAccelerationManager::singleton().forceHardwareAcceleration())
+            return;
</ins><span class="cx">         if (priv-&gt;preferences-&gt;acceleratedCompositingEnabled()) {
</span><span class="cx">             priv-&gt;preferences-&gt;setAcceleratedCompositingEnabled(false);
</span><span class="cx">             changed = true;
</span><span class="lines">@@ -3229,18 +3238,16 @@
</span><span class="cx">             changed = true;
</span><span class="cx">         }
</span><span class="cx">         break;
</span><del>-
</del><span class="cx">     case WEBKIT_HARDWARE_ACCELERATION_POLICY_ON_DEMAND:
</span><del>-        if (!priv-&gt;preferences-&gt;acceleratedCompositingEnabled()) {
</del><ins>+        if (!priv-&gt;preferences-&gt;acceleratedCompositingEnabled() &amp;&amp; HardwareAccelerationManager::singleton().canUseHardwareAcceleration()) {
</ins><span class="cx">             priv-&gt;preferences-&gt;setAcceleratedCompositingEnabled(true);
</span><span class="cx">             changed = true;
</span><span class="cx">         }
</span><span class="cx"> 
</span><del>-        if (priv-&gt;preferences-&gt;forceCompositingMode()) {
</del><ins>+        if (priv-&gt;preferences-&gt;forceCompositingMode() &amp;&amp; !HardwareAccelerationManager::singleton().forceHardwareAcceleration()) {
</ins><span class="cx">             priv-&gt;preferences-&gt;setForceCompositingMode(false);
</span><span class="cx">             changed = true;
</span><span class="cx">         }
</span><del>-
</del><span class="cx">         break;
</span><span class="cx">     }
</span><span class="cx"> 
</span></span></pre></div>
<a id="trunkSourceWebKit2UIProcessgtkHardwareAccelerationManagercpp"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.cpp (0 => 211412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.cpp                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.cpp        2017-01-31 08:57:21 UTC (rev 211412)
</span><span class="lines">@@ -0,0 +1,87 @@
</span><ins>+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include &quot;config.h&quot;
+#include &quot;HardwareAccelerationManager.h&quot;
+
+#include &quot;WaylandCompositor.h&quot;
+#include &lt;WebCore/NotImplemented.h&gt;
+#include &lt;WebCore/PlatformDisplay.h&gt;
+
+#if USE(REDIRECTED_XCOMPOSITE_WINDOW)
+#include &lt;WebCore/PlatformDisplayX11.h&gt;
+#endif
+
+using namespace WebCore;
+
+namespace WebKit {
+
+HardwareAccelerationManager&amp; HardwareAccelerationManager::singleton()
+{
+    static NeverDestroyed&lt;HardwareAccelerationManager&gt; manager;
+    return manager;
+}
+
+HardwareAccelerationManager::HardwareAccelerationManager()
+    : m_canUseHardwareAcceleration(true)
+    , m_forceHardwareAcceleration(false)
+{
+#if !ENABLE(OPENGL)
+    m_canUseHardwareAcceleration = false;
+    return;
+#endif
+
+    const char* disableCompositing = getenv(&quot;WEBKIT_DISABLE_COMPOSITING_MODE&quot;);
+    if (disableCompositing &amp;&amp; strcmp(disableCompositing, &quot;0&quot;)) {
+        m_canUseHardwareAcceleration = false;
+        return;
+    }
+
+#if USE(REDIRECTED_XCOMPOSITE_WINDOW)
+    if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) {
+        auto&amp; display = downcast&lt;PlatformDisplayX11&gt;(PlatformDisplay::sharedDisplay());
+        std::optional&lt;int&gt; damageBase, errorBase;
+        if (!display.supportsXComposite() || !display.supportsXDamage(damageBase, errorBase)) {
+            m_canUseHardwareAcceleration = false;
+            return;
+        }
+    }
+#endif
+
+#if PLATFORM(WAYLAND)
+    if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::Wayland) {
+        if (!WaylandCompositor::singleton().isRunning()) {
+            m_canUseHardwareAcceleration = false;
+            return;
+        }
+    }
+#endif
+
+    const char* forceCompositing = getenv(&quot;WEBKIT_FORCE_COMPOSITING_MODE&quot;);
+    if (forceCompositing &amp;&amp; strcmp(forceCompositing, &quot;0&quot;))
+        m_forceHardwareAcceleration = true;
+}
+
+} // namespace WebKit
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessgtkHardwareAccelerationManagerh"></a>
<div class="addfile"><h4>Added: trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.h (0 => 211412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.h                                (rev 0)
+++ trunk/Source/WebKit2/UIProcess/gtk/HardwareAccelerationManager.h        2017-01-31 08:57:21 UTC (rev 211412)
</span><span class="lines">@@ -0,0 +1,48 @@
</span><ins>+/*
+ * Copyright (C) 2017 Igalia S.L.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY APPLE COMPUTER, INC. ``AS IS'' AND ANY
+ * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL APPLE COMPUTER, INC. OR
+ * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+ * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+ * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+ * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
+ * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+ * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#pragma once
+
+#include &lt;wtf/NeverDestroyed.h&gt;
+
+namespace WebKit {
+
+class HardwareAccelerationManager {
+    WTF_MAKE_NONCOPYABLE(HardwareAccelerationManager);
+    friend class NeverDestroyed&lt;HardwareAccelerationManager&gt;;
+public:
+    static HardwareAccelerationManager&amp; singleton();
+
+    bool canUseHardwareAcceleration() const { return m_canUseHardwareAcceleration; }
+    bool forceHardwareAcceleration() const { return m_forceHardwareAcceleration; }
+
+private:
+    HardwareAccelerationManager();
+
+    bool m_canUseHardwareAcceleration : 1;
+    bool m_forceHardwareAcceleration : 1;
+};
+
+} // namespace WebKit
</ins></span></pre></div>
<a id="trunkSourceWebKit2UIProcessgtkWebPreferencesGtkcpp"></a>
<div class="modfile"><h4>Modified: trunk/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp (211411 => 211412)</h4>
<pre class="diff"><span>
<span class="info">--- trunk/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp        2017-01-31 08:07:49 UTC (rev 211411)
+++ trunk/Source/WebKit2/UIProcess/gtk/WebPreferencesGtk.cpp        2017-01-31 08:57:21 UTC (rev 211412)
</span><span class="lines">@@ -27,50 +27,17 @@
</span><span class="cx"> #include &quot;config.h&quot;
</span><span class="cx"> #include &quot;WebPreferences.h&quot;
</span><span class="cx"> 
</span><del>-#include &quot;WaylandCompositor.h&quot;
</del><ins>+#include &quot;HardwareAccelerationManager.h&quot;
</ins><span class="cx"> #include &lt;WebCore/NotImplemented.h&gt;
</span><del>-#include &lt;WebCore/PlatformDisplay.h&gt;
</del><span class="cx"> 
</span><del>-#if USE(REDIRECTED_XCOMPOSITE_WINDOW)
-#include &lt;WebCore/PlatformDisplayX11.h&gt;
-#endif
-
-using namespace WebCore;
-
</del><span class="cx"> namespace WebKit {
</span><span class="cx"> 
</span><span class="cx"> void WebPreferences::platformInitializeStore()
</span><span class="cx"> {
</span><del>-#if !ENABLE(OPENGL)
-    setAcceleratedCompositingEnabled(false);
-#else
-    const char* forceCompositing = getenv(&quot;WEBKIT_FORCE_COMPOSITING_MODE&quot;);
-    if (forceCompositing &amp;&amp; strcmp(forceCompositing, &quot;0&quot;))
</del><ins>+    if (!HardwareAccelerationManager::singleton().canUseHardwareAcceleration())
+        setAcceleratedCompositingEnabled(false);
+    else if (HardwareAccelerationManager::singleton().forceHardwareAcceleration())
</ins><span class="cx">         setForceCompositingMode(true);
</span><del>-
-    const char* disableCompositing = getenv(&quot;WEBKIT_DISABLE_COMPOSITING_MODE&quot;);
-    if (disableCompositing &amp;&amp; strcmp(disableCompositing, &quot;0&quot;)) {
-        setAcceleratedCompositingEnabled(false);
-        return;
-    }
-
-#if USE(REDIRECTED_XCOMPOSITE_WINDOW)
-    if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11) {
-        auto&amp; display = downcast&lt;PlatformDisplayX11&gt;(PlatformDisplay::sharedDisplay());
-        std::optional&lt;int&gt; damageBase, errorBase;
-        if (!display.supportsXComposite() || !display.supportsXDamage(damageBase, errorBase))
-            setAcceleratedCompositingEnabled(false);
-    }
-#endif
-
-#if PLATFORM(WAYLAND)
-    if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::Wayland) {
-        if (!WaylandCompositor::singleton().isRunning())
-            setAcceleratedCompositingEnabled(false);
-    }
-#endif
-
-#endif // ENABLE(OPENGL)
</del><span class="cx"> }
</span><span class="cx"> 
</span><span class="cx"> void WebPreferences::platformUpdateStringValueForKey(const String&amp;, const String&amp;)
</span></span></pre>
</div>
</div>

</body>
</html>