Update to 2.41.91

This commit is contained in:
Michael Catanzaro 2023-08-19 13:44:52 -05:00
parent 4b92cd6fc1
commit 11e3dc7d2f
4 changed files with 5 additions and 366 deletions

2
.gitignore vendored
View File

@ -21,3 +21,5 @@
/webkitgtk-2.41.4.tar.xz.asc
/webkitgtk-2.41.5.tar.xz.asc
/webkitgtk-2.41.6.tar.xz.asc
/webkitgtk-2.41.90.tar.xz.asc
/webkitgtk-2.41.91.tar.xz.asc

View File

@ -1,358 +0,0 @@
From d6459980ac8a200f46efd4d0668efdb17a9bf951 Mon Sep 17 00:00:00 2001
From: Carlos Garcia Campos <cgarcia@igalia.com>
Date: Wed, 19 Jul 2023 14:00:45 +0200
Subject: [PATCH] REGRESSION(2.41.6): [GTK] Yelp help viewer and Epiphany
browser do not show content on a virtual machine (llvmpipe?) with WebKitGTK
2.41.6 https://bugs.webkit.org/show_bug.cgi?id=259320
Reviewed by NOBODY (OOPS!).
The problem is that for some reason the surfaceless platform is claiming
to support EGL_MESA_image_dma_buf_export with llvmpipe driver, while the
display in the UI process doesn't support EGL_EXT_image_dma_buf_import
with llvmpipe as expected. So, we end up exporting DMABuf buffers (or
trying) that the UI process can't handle. We should always pass to the
web process the buffers supported by the UI process (hardware or shared
memory) and ensure we only export buffers supported by the UI process.
* Source/WebKit/Shared/WebProcessCreationParameters.h:
* Source/WebKit/Shared/WebProcessCreationParameters.serialization.in:
* Source/WebKit/Shared/glib/DMABufRendererBufferMode.h: Added.
* Source/WebKit/UIProcess/API/glib/WebKitProtocolHandler.cpp:
(WebKit::dmabufRendererWithSupportedBuffers):
(WebKit::WebKitProtocolHandler::handleGPU):
* Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp:
(WebKit::WebProcessPool::platformInitializeWebProcess):
* Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp:
(WebKit::AcceleratedBackingStoreDMABuf::rendererBufferMode):
(WebKit::AcceleratedBackingStoreDMABuf::checkRequirements):
* Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.h:
* Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceDMABuf.cpp:
(WebKit::AcceleratedSurfaceDMABuf::clientResize):
* Source/WebKit/WebProcess/WebProcess.h:
(WebKit::WebProcess::dmaBufRendererBufferMode const):
* Source/WebKit/WebProcess/glib/WebProcessGLib.cpp:
(WebKit::WebProcess::platformInitializeWebProcess):
---
.../Shared/WebProcessCreationParameters.h | 3 +-
...ProcessCreationParameters.serialization.in | 2 +-
.../Shared/glib/DMABufRendererBufferMode.h | 49 +++++++++++++++++++
.../API/glib/WebKitProtocolHandler.cpp | 23 ++++++++-
.../UIProcess/glib/WebProcessPoolGLib.cpp | 4 +-
.../gtk/AcceleratedBackingStoreDMABuf.cpp | 26 +++++++---
.../gtk/AcceleratedBackingStoreDMABuf.h | 3 ++
.../WebPage/gtk/AcceleratedSurfaceDMABuf.cpp | 2 +-
Source/WebKit/WebProcess/WebProcess.h | 7 ++-
.../WebKit/WebProcess/glib/WebProcessGLib.cpp | 15 +++---
10 files changed, 112 insertions(+), 22 deletions(-)
create mode 100644 Source/WebKit/Shared/glib/DMABufRendererBufferMode.h
diff --git a/Source/WebKit/Shared/WebProcessCreationParameters.h b/Source/WebKit/Shared/WebProcessCreationParameters.h
index cd6a3ffdd9f39..4544644d34ec4 100644
--- a/Source/WebKit/Shared/WebProcessCreationParameters.h
+++ b/Source/WebKit/Shared/WebProcessCreationParameters.h
@@ -57,6 +57,7 @@
#endif
#if PLATFORM(GTK)
+#include "DMABufRendererBufferMode.h"
#include "GtkSettingsState.h"
#endif
@@ -219,7 +220,7 @@ struct WebProcessCreationParameters {
#endif
#if PLATFORM(GTK)
- bool useDMABufSurfaceForCompositing { false };
+ OptionSet<DMABufRendererBufferMode> dmaBufRendererBufferMode;
bool useSystemAppearanceForScrollbars { false };
GtkSettingsState gtkSettings;
#endif
diff --git a/Source/WebKit/Shared/WebProcessCreationParameters.serialization.in b/Source/WebKit/Shared/WebProcessCreationParameters.serialization.in
index 5716042447a78..99db37e67b4a5 100644
--- a/Source/WebKit/Shared/WebProcessCreationParameters.serialization.in
+++ b/Source/WebKit/Shared/WebProcessCreationParameters.serialization.in
@@ -173,7 +173,7 @@ struct WebKit::WebProcessCreationParameters {
#endif
#if PLATFORM(GTK)
- bool useDMABufSurfaceForCompositing;
+ OptionSet<WebKit::DMABufRendererBufferMode> dmaBufRendererBufferMode;
bool useSystemAppearanceForScrollbars;
WebKit::GtkSettingsState gtkSettings;
#endif
diff --git a/Source/WebKit/Shared/glib/DMABufRendererBufferMode.h b/Source/WebKit/Shared/glib/DMABufRendererBufferMode.h
new file mode 100644
index 0000000000000..5cc9ef29de52f
--- /dev/null
+++ b/Source/WebKit/Shared/glib/DMABufRendererBufferMode.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2023 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 INC. AND ITS CONTRIBUTORS ``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 INC. OR ITS 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 <wtf/EnumTraits.h>
+
+namespace WebKit {
+
+enum class DMABufRendererBufferMode : uint8_t {
+ Hardware = 1 << 0,
+ SharedMemory = 1 << 1
+};
+
+} // namespace WebKit
+
+namespace WTF {
+
+template<> struct EnumTraits<WebKit::DMABufRendererBufferMode> {
+ using values = EnumValues<
+ WebKit::DMABufRendererBufferMode,
+ WebKit::DMABufRendererBufferMode::Hardware,
+ WebKit::DMABufRendererBufferMode::SharedMemory
+ >;
+};
+
+} // namespace WTF
diff --git a/Source/WebKit/UIProcess/API/glib/WebKitProtocolHandler.cpp b/Source/WebKit/UIProcess/API/glib/WebKitProtocolHandler.cpp
index 1a89c19966022..8bdcf48b446ab 100644
--- a/Source/WebKit/UIProcess/API/glib/WebKitProtocolHandler.cpp
+++ b/Source/WebKit/UIProcess/API/glib/WebKitProtocolHandler.cpp
@@ -46,6 +46,7 @@
#if PLATFORM(GTK)
#include "AcceleratedBackingStoreDMABuf.h"
+#include "DMABufRendererBufferMode.h"
#include <WebCore/PlatformDisplaySurfaceless.h>
#include <gtk/gtk.h>
@@ -158,6 +159,24 @@ static const char* openGLAPI()
return "OpenGL ES 2 (libepoxy)";
}
+#if PLATFORM(GTK)
+static String dmabufRendererWithSupportedBuffers()
+{
+ StringBuilder buffers;
+ buffers.append("DMABuf (Supported buffers: "_s);
+ auto mode = AcceleratedBackingStoreDMABuf::rendererBufferMode();
+ if (mode.contains(DMABufRendererBufferMode::Hardware))
+ buffers.append("Hardware"_s);
+ if (mode.contains(DMABufRendererBufferMode::SharedMemory)) {
+ if (mode.contains(DMABufRendererBufferMode::Hardware))
+ buffers.append(", ");
+ buffers.append("Shared Memory"_s);
+ }
+ buffers.append(')');
+ return buffers.toString();
+}
+#endif
+
void WebKitProtocolHandler::handleGPU(WebKitURISchemeRequest* request)
{
GString* html = g_string_new(
@@ -324,11 +343,11 @@ void WebKitProtocolHandler::handleGPU(WebKitURISchemeRequest* request)
addTableRow(jsonObject, "API"_s, String::fromUTF8(openGLAPI()));
#if PLATFORM(WAYLAND)
if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::Wayland)
- addTableRow(hardwareAccelerationObject, "Renderer"_s, usingDMABufRenderer ? "DMABuf"_s : "WPE"_s);
+ addTableRow(hardwareAccelerationObject, "Renderer"_s, usingDMABufRenderer ? dmabufRendererWithSupportedBuffers() : "WPE"_s);
#endif
#if PLATFORM(X11)
if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::X11)
- addTableRow(hardwareAccelerationObject, "Renderer"_s, usingDMABufRenderer ? "DMABuf"_s : "XWindow"_s);
+ addTableRow(hardwareAccelerationObject, "Renderer"_s, usingDMABufRenderer ? dmabufRendererWithSupportedBuffers() : "XWindow"_s);
#endif
addTableRow(hardwareAccelerationObject, "Native interface"_s, uiProcessContextIsEGL() ? "EGL"_s : "None"_s);
diff --git a/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp b/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp
index 55f27c64aa992..d439751cee32f 100644
--- a/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp
+++ b/Source/WebKit/UIProcess/glib/WebProcessPoolGLib.cpp
@@ -89,11 +89,11 @@ void WebProcessPool::platformInitializeWebProcess(const WebProcessProxy& process
#endif
#if PLATFORM(GTK)
- parameters.useDMABufSurfaceForCompositing = AcceleratedBackingStoreDMABuf::checkRequirements();
+ parameters.dmaBufRendererBufferMode = AcceleratedBackingStoreDMABuf::rendererBufferMode();
#endif
#if PLATFORM(WAYLAND)
- if (WebCore::PlatformDisplay::sharedDisplay().type() == WebCore::PlatformDisplay::Type::Wayland && !parameters.useDMABufSurfaceForCompositing) {
+ if (WebCore::PlatformDisplay::sharedDisplay().type() == WebCore::PlatformDisplay::Type::Wayland && parameters.dmaBufRendererBufferMode.isEmpty()) {
wpe_loader_init("libWPEBackend-fdo-1.0.so.1");
if (AcceleratedBackingStoreWayland::checkRequirements()) {
parameters.hostClientFileDescriptor = UnixFileDescriptor { wpe_renderer_host_create_client(), UnixFileDescriptor::Adopt };
diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp
index 5a5d2fc4ceacb..1a208de31a054 100644
--- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp
+++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.cpp
@@ -28,6 +28,7 @@
#include "AcceleratedBackingStoreDMABufMessages.h"
#include "AcceleratedSurfaceDMABufMessages.h"
+#include "DMABufRendererBufferMode.h"
#include "LayerTreeContext.h"
#include "ShareableBitmap.h"
#include "WebPageProxy.h"
@@ -49,23 +50,32 @@
namespace WebKit {
-bool AcceleratedBackingStoreDMABuf::checkRequirements()
+OptionSet<DMABufRendererBufferMode> AcceleratedBackingStoreDMABuf::rendererBufferMode()
{
- static bool available;
+ static OptionSet<DMABufRendererBufferMode> mode;
static std::once_flag onceFlag;
std::call_once(onceFlag, [] {
const char* disableDMABuf = getenv("WEBKIT_DISABLE_DMABUF_RENDERER");
- if (disableDMABuf && strcmp(disableDMABuf, "0")) {
- available = false;
+ if (disableDMABuf && strcmp(disableDMABuf, "0"))
+ return;
+
+ const char* platformExtensions = eglQueryString(nullptr, EGL_EXTENSIONS);
+ if (!WebCore::GLContext::isExtensionSupported(platformExtensions, "EGL_KHR_platform_gbm")
+ && !WebCore::GLContext::isExtensionSupported(platformExtensions, "EGL_MESA_platform_surfaceless")) {
return;
}
+ mode.add(DMABufRendererBufferMode::SharedMemory);
+
const auto& eglExtensions = WebCore::PlatformDisplay::sharedDisplay().eglExtensions();
- available = eglExtensions.KHR_image_base
- && eglExtensions.KHR_surfaceless_context
- && WebCore::GLContext::isExtensionSupported(eglQueryString(nullptr, EGL_EXTENSIONS), "EGL_MESA_platform_surfaceless");
+ if (eglExtensions.KHR_image_base && eglExtensions.EXT_image_dma_buf_import)
+ mode.add(DMABufRendererBufferMode::Hardware);
});
- return available;
+ return mode;
+}
+bool AcceleratedBackingStoreDMABuf::checkRequirements()
+{
+ return !rendererBufferMode().isEmpty();
}
std::unique_ptr<AcceleratedBackingStoreDMABuf> AcceleratedBackingStoreDMABuf::create(WebPageProxy& webPage)
diff --git a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.h b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.h
index bd52cafbcec61..1bc769ada3135 100644
--- a/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.h
+++ b/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreDMABuf.h
@@ -32,6 +32,7 @@
#include <WebCore/RefPtrCairo.h>
#include <gtk/gtk.h>
#include <wtf/CompletionHandler.h>
+#include <wtf/OptionSet.h>
#include <wtf/glib/GRefPtr.h>
#include <wtf/unix/UnixFileDescriptor.h>
@@ -54,10 +55,12 @@ namespace WebKit {
class ShareableBitmap;
class ShareableBitmapHandle;
class WebPageProxy;
+enum class DMABufRendererBufferMode : uint8_t;
class AcceleratedBackingStoreDMABuf final : public AcceleratedBackingStore, public IPC::MessageReceiver {
WTF_MAKE_NONCOPYABLE(AcceleratedBackingStoreDMABuf); WTF_MAKE_FAST_ALLOCATED;
public:
+ static OptionSet<DMABufRendererBufferMode> rendererBufferMode();
static bool checkRequirements();
static std::unique_ptr<AcceleratedBackingStoreDMABuf> create(WebPageProxy&);
~AcceleratedBackingStoreDMABuf();
diff --git a/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceDMABuf.cpp b/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceDMABuf.cpp
index c0fce2b286395..e5c49fbf92b63 100644
--- a/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceDMABuf.cpp
+++ b/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceDMABuf.cpp
@@ -442,7 +442,7 @@ void AcceleratedSurfaceDMABuf::clientResize(const WebCore::IntSize& size)
auto& display = WebCore::PlatformDisplay::sharedDisplayForCompositing();
switch (display.type()) {
case WebCore::PlatformDisplay::Type::Surfaceless:
- if (display.eglExtensions().MESA_image_dma_buf_export)
+ if (display.eglExtensions().MESA_image_dma_buf_export && WebProcess::singleton().dmaBufRendererBufferMode().contains(DMABufRendererBufferMode::Hardware))
m_target = RenderTargetTexture::create(m_id, size);
else
m_target = RenderTargetSHMImage::create(m_id, size);
diff --git a/Source/WebKit/WebProcess/WebProcess.h b/Source/WebKit/WebProcess/WebProcess.h
index 4a4d5031d4ef3..14c298a0f41bf 100644
--- a/Source/WebKit/WebProcess/WebProcess.h
+++ b/Source/WebKit/WebProcess/WebProcess.h
@@ -416,6 +416,10 @@ class WebProcess : public AuxiliaryProcess
void revokeLaunchServicesSandboxExtension();
#endif
+#if PLATFORM(GTK)
+ const OptionSet<DMABufRendererBufferMode>& dmaBufRendererBufferMode() const { return m_dmaBufRendererBufferMode; }
+#endif
+
private:
WebProcess();
~WebProcess();
@@ -739,8 +743,9 @@ class WebProcess : public AuxiliaryProcess
WeakHashMap<WebCore::UserGestureToken, uint64_t> m_userGestureTokens;
-#if PLATFORM(GTK) && USE(EGL)
+#if PLATFORM(GTK)
std::unique_ptr<WebCore::PlatformDisplay> m_displayForCompositing;
+ OptionSet<DMABufRendererBufferMode> m_dmaBufRendererBufferMode;
#endif
bool m_hasSuspendedPageProxy { false };
diff --git a/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp b/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp
index a8ed70bc573e8..686004f4ee825 100644
--- a/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp
+++ b/Source/WebKit/WebProcess/glib/WebProcessGLib.cpp
@@ -142,12 +142,15 @@ void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& para
#endif
#if PLATFORM(GTK)
- if (parameters.useDMABufSurfaceForCompositing) {
+ m_dmaBufRendererBufferMode = parameters.dmaBufRendererBufferMode;
+ if (!m_dmaBufRendererBufferMode.isEmpty()) {
#if USE(GBM)
- const char* disableGBM = getenv("WEBKIT_DMABUF_RENDERER_DISABLE_GBM");
- if (!disableGBM || !strcmp(disableGBM, "0")) {
- if (auto* device = WebCore::GBMDevice::singleton().device())
- m_displayForCompositing = WebCore::PlatformDisplayGBM::create(device);
+ if (m_dmaBufRendererBufferMode.contains(DMABufRendererBufferMode::Hardware)) {
+ const char* disableGBM = getenv("WEBKIT_DMABUF_RENDERER_DISABLE_GBM");
+ if (!disableGBM || !strcmp(disableGBM, "0")) {
+ if (auto* device = WebCore::GBMDevice::singleton().device())
+ m_displayForCompositing = WebCore::PlatformDisplayGBM::create(device);
+ }
}
#endif
if (!m_displayForCompositing)
@@ -156,7 +159,7 @@ void WebProcess::platformInitializeWebProcess(WebProcessCreationParameters& para
#endif
#if PLATFORM(WAYLAND)
- if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::Wayland && !parameters.isServiceWorkerProcess && !parameters.useDMABufSurfaceForCompositing) {
+ if (PlatformDisplay::sharedDisplay().type() == PlatformDisplay::Type::Wayland && !parameters.isServiceWorkerProcess && m_dmaBufRendererBufferMode.isEmpty()) {
auto hostClientFileDescriptor = parameters.hostClientFileDescriptor.release();
if (hostClientFileDescriptor != -1) {
wpe_loader_init(parameters.implementationLibraryName.data());

View File

@ -1,2 +1,2 @@
SHA512 (webkitgtk-2.41.6.tar.xz) = 89cc03b86a689fcf6edccf9e7adc9e128fe55776d46ab81b08332f490bbe8b63af96c4595d3e040133f83e8e0af1b5cf95b09936698e531f4c2cf99b052d316e
SHA512 (webkitgtk-2.41.6.tar.xz.asc) = c50546dc09fce1808af069ebe6ad12277c3e254e9d47d93ecc6b1fb8be1e635ccf1594bf7c13dcf2e3ad7e866e7f65cdc3a993b59c690094f79f6aac83f7b45d
SHA512 (webkitgtk-2.41.91.tar.xz.asc) = 8519795d85809e5c9ecfb8292e5bb9e6a963ff00388c08b1fb1d4d9554503212d1ab3fe51cbeecd4d391f4bc87b0770d28bc6428b38e0639807a98619320c961
SHA512 (webkitgtk-2.41.91.tar.xz) = 14381994830daff1a5126f0919760fdb7689a6ef4d96bdc147546839fbe5c012f71f3c4b51be6714bc25a0dc04260d4809d569fcc96cf60ae620fb8aeff5184a

View File

@ -22,7 +22,7 @@
%endif
Name: webkitgtk
Version: 2.41.6
Version: 2.41.91
Release: %autorelease
Summary: GTK web content engine library
@ -35,11 +35,6 @@ Source1: https://webkitgtk.org/releases/webkitgtk-%{version}.tar.xz.asc
# $ gpg --export --export-options export-minimal D7FCF61CF9A2DEAB31D81BD3F3D322D0EC4582C3 5AA3BC334FD7E3369E7C77B291C559DBE4C9123B > webkitgtk-keys.gpg
Source2: webkitgtk-keys.gpg
# https://github.com/WebKit/WebKit/pull/15929
# https://bugs.webkit.org/show_bug.cgi?id=259320
# Fix content not shown on llvmpipe on Rawhide
Patch0: 15929.patch
BuildRequires: bison
BuildRequires: bubblewrap
BuildRequires: cmake