Title: [230562] trunk
Revision
230562
Author
zandober...@gmail.com
Date
2018-04-12 01:19:35 -0700 (Thu, 12 Apr 2018)

Log Message

[WPE] Switch testing process to using WPEBackend-fdo
https://bugs.webkit.org/show_bug.cgi?id=184357

Reviewed by Carlos Alberto Lopez Perez.

.:

* Source/cmake/FindWPEBackend-fdo.cmake: Renamed from Source/cmake/FindWPEBackend-mesa.cmake.

Tools:

Switch WPE testing to using the WPEBackend-fdo implementation that
depends on the WL_bind_wayland_display EGL extension, as defined under
the freedesktop.org project.
https://cgit.freedesktop.org/mesa/mesa/tree/docs/specs/WL_bind_wayland_display.spec

HeadlessViewBackend is refactored to use the WPEBackend-fdo API, but
otherwise is not changed in functionality.

Unit tests now have to unconditionally use HeadlessViewBackend as a
wpe_view_backend provider, since WPEBackend-fdo does not provide a
default wpe_view_backend implementation. Unit tests covering that are
adjusted to instead use a mock wpe_view_backend interface.

* Scripts/webkitdirs.pm:
(builtDylibPathForName): Fix the libWPEWebKit.so name to also include
the API version that was added in r230449.
* Scripts/webkitpy/port/waylanddriver.py:
(WaylandDriver._setup_environ_for_test): Export EGL_PLATFORM=wayland.
* Scripts/webkitpy/port/wpe.py:
(WPEPort._driver_class): Use WaylandDriver by default.
* TestWebKitAPI/PlatformWebView.h:
(): Deleted.
* TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
(testWebViewWebBackend):
* TestWebKitAPI/glib/WebKitGLib/TestMain.h:
(Test::createWebViewBackend):
* TestWebKitAPI/wpe/PlatformWebViewWPE.cpp:
(TestWebKitAPI::PlatformWebView::~PlatformWebView):
(TestWebKitAPI::PlatformWebView::initialize):
* wpe/HeadlessViewBackend/CMakeLists.txt:
* wpe/HeadlessViewBackend/HeadlessViewBackend.cpp:
(getEGLDisplay):
(HeadlessViewBackend::HeadlessViewBackend):
(HeadlessViewBackend::~HeadlessViewBackend):
(HeadlessViewBackend::backend const):
(HeadlessViewBackend::createSnapshot):
(HeadlessViewBackend::performUpdate):
(HeadlessViewBackend::makeCurrent): Deleted.
* wpe/HeadlessViewBackend/HeadlessViewBackend.h:
* wpe/jhbuild.modules: Module name cleanup. Dyz version is bumped.

Modified Paths

Added Paths

Removed Paths

Diff

Modified: trunk/ChangeLog (230561 => 230562)


--- trunk/ChangeLog	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/ChangeLog	2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,3 +1,12 @@
+2018-04-12  Zan Dobersek  <zdober...@igalia.com>
+
+        [WPE] Switch testing process to using WPEBackend-fdo
+        https://bugs.webkit.org/show_bug.cgi?id=184357
+
+        Reviewed by Carlos Alberto Lopez Perez.
+
+        * Source/cmake/FindWPEBackend-fdo.cmake: Renamed from Source/cmake/FindWPEBackend-mesa.cmake.
+
 2018-04-11  Thibault Saunier  <tsaun...@igalia.com>
 
         [GStreamer] Use of playbin3 when USE_PLAYBIN3 environment variable is set

Added: trunk/Source/cmake/FindWPEBackend-fdo.cmake (0 => 230562)


--- trunk/Source/cmake/FindWPEBackend-fdo.cmake	                        (rev 0)
+++ trunk/Source/cmake/FindWPEBackend-fdo.cmake	2018-04-12 08:19:35 UTC (rev 230562)
@@ -0,0 +1,47 @@
+# - Try to find WPEBackend-fdo.
+# Once done, this will define
+#
+#  WPEBACKEND_FDO_FOUND - system has WPEBackend-fdo.
+#  WPEBACKEND_FDO_INCLUDE_DIRS - the WPEBackend-fdo include directories
+#  WPEBACKEND_FDO_LIBRARIES - link these to use WPEBackend-fdo.
+#
+# Copyright (C) 2016 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 THE COPYRIGHT HOLDER 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 THE COPYRIGHT HOLDER 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.
+
+find_package(PkgConfig)
+pkg_check_modules(PC_WPEBACKEND_FDO QUIET wpebackend-fdo)
+
+find_path(WPEBACKEND_FDO_INCLUDE_DIRS
+    NAMES wpe-fdo/initialize-egl.h
+    HINTS ${PC_WPEBACKEND_FDO_INCLUDEDIR} ${PC_WPEBACKEND_FDO_INCLUDE_DIRS}
+)
+
+find_library(WPEBACKEND_FDO_LIBRARIES
+    NAMES WPEBackend-fdo
+    HINTS ${PC_WPEBACKEND_FDO_LIBDIR} ${PC_WPEBACKEND_FDO_LIBRARY_DIRS}
+)
+
+mark_as_advanced(WPEBACKEND_FDO_INCLUDE_DIRS WPEBACKEND_FDO_LIBRARIES)
+
+include(FindPackageHandleStandardArgs)
+find_package_handle_standard_args(WPEBackend-fdo REQUIRED_VARS WPEBACKEND_FDO_INCLUDE_DIRS WPEBACKEND_FDO_LIBRARIES)

Deleted: trunk/Source/cmake/FindWPEBackend-mesa.cmake (230561 => 230562)


--- trunk/Source/cmake/FindWPEBackend-mesa.cmake	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Source/cmake/FindWPEBackend-mesa.cmake	2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,47 +0,0 @@
-# - Try to find WPE-mesa.
-# Once done, this will define
-#
-#  WPE_MESA_FOUND - system has WPE-mesa.
-#  WPE_MESA_INCLUDE_DIRS - the WPE-mesa include directories
-#  WPE_MESA_LIBRARIES - link these to use WPE-mesa.
-#
-# Copyright (C) 2016 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 THE COPYRIGHT HOLDER 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 THE COPYRIGHT HOLDER 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.
-
-find_package(PkgConfig)
-pkg_check_modules(PC_WPE_MESA QUIET wpe-mesa)
-
-find_path(WPE_MESA_INCLUDE_DIRS
-    NAMES wpe-mesa/view-backend-exportable-dma-buf.h
-    HINTS ${PC_WPE_MESA_INCLUDEDIR} ${PC_WPE_MESA_INCLUDE_DIRS}
-)
-
-find_library(WPE_MESA_LIBRARIES
-    NAMES WPEBackend-mesa
-    HINTS ${PC_WPE_MESA_LIBDIR} ${PC_WPE_MESA_LIBRARY_DIRS}
-)
-
-mark_as_advanced(WPE_MESA_INCLUDE_DIRS WPE_MESA_LIBRARIES)
-
-include(FindPackageHandleStandardArgs)
-find_package_handle_standard_args(WPEBackend-mesa REQUIRED_VARS WPE_MESA_INCLUDE_DIRS WPE_MESA_LIBRARIES)

Modified: trunk/Tools/ChangeLog (230561 => 230562)


--- trunk/Tools/ChangeLog	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/ChangeLog	2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,3 +1,51 @@
+2018-04-12  Zan Dobersek  <zdober...@igalia.com>
+
+        [WPE] Switch testing process to using WPEBackend-fdo
+        https://bugs.webkit.org/show_bug.cgi?id=184357
+
+        Reviewed by Carlos Alberto Lopez Perez.
+
+        Switch WPE testing to using the WPEBackend-fdo implementation that
+        depends on the WL_bind_wayland_display EGL extension, as defined under
+        the freedesktop.org project.
+        https://cgit.freedesktop.org/mesa/mesa/tree/docs/specs/WL_bind_wayland_display.spec
+
+        HeadlessViewBackend is refactored to use the WPEBackend-fdo API, but
+        otherwise is not changed in functionality.
+
+        Unit tests now have to unconditionally use HeadlessViewBackend as a
+        wpe_view_backend provider, since WPEBackend-fdo does not provide a
+        default wpe_view_backend implementation. Unit tests covering that are
+        adjusted to instead use a mock wpe_view_backend interface.
+
+        * Scripts/webkitdirs.pm:
+        (builtDylibPathForName): Fix the libWPEWebKit.so name to also include
+        the API version that was added in r230449.
+        * Scripts/webkitpy/port/waylanddriver.py:
+        (WaylandDriver._setup_environ_for_test): Export EGL_PLATFORM=wayland.
+        * Scripts/webkitpy/port/wpe.py:
+        (WPEPort._driver_class): Use WaylandDriver by default.
+        * TestWebKitAPI/PlatformWebView.h:
+        (): Deleted.
+        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
+        (testWebViewWebBackend):
+        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
+        (Test::createWebViewBackend):
+        * TestWebKitAPI/wpe/PlatformWebViewWPE.cpp:
+        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
+        (TestWebKitAPI::PlatformWebView::initialize):
+        * wpe/HeadlessViewBackend/CMakeLists.txt:
+        * wpe/HeadlessViewBackend/HeadlessViewBackend.cpp:
+        (getEGLDisplay):
+        (HeadlessViewBackend::HeadlessViewBackend):
+        (HeadlessViewBackend::~HeadlessViewBackend):
+        (HeadlessViewBackend::backend const):
+        (HeadlessViewBackend::createSnapshot):
+        (HeadlessViewBackend::performUpdate):
+        (HeadlessViewBackend::makeCurrent): Deleted.
+        * wpe/HeadlessViewBackend/HeadlessViewBackend.h:
+        * wpe/jhbuild.modules: Module name cleanup. Dyz version is bumped.
+
 2018-04-12  Carlos Garcia Campos  <cgar...@igalia.com>
 
         [GTK] Switch to use always complex text code path

Modified: trunk/Tools/Scripts/webkitdirs.pm (230561 => 230562)


--- trunk/Tools/Scripts/webkitdirs.pm	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/Scripts/webkitdirs.pm	2018-04-12 08:19:35 UTC (rev 230562)
@@ -1036,7 +1036,7 @@
         }
     }
     if (isWPE()) {
-        return "$configurationProductDir/lib/libWPEWebKit.so";
+        return "$configurationProductDir/lib/libWPEWebKit-0.1.so";
     }
 
     die "Unsupported platform, can't determine built library locations.\nTry `build-webkit --help` for more information.\n";

Modified: trunk/Tools/Scripts/webkitpy/port/waylanddriver.py (230561 => 230562)


--- trunk/Tools/Scripts/webkitpy/port/waylanddriver.py	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/Scripts/webkitpy/port/waylanddriver.py	2018-04-12 08:19:35 UTC (rev 230562)
@@ -49,6 +49,7 @@
         self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_DISPLAY')
         self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_SOCKET')
         driver_environment['GDK_BACKEND'] = 'wayland'
+        driver_environment['EGL_PLATFORM'] = 'wayland'
         driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
         if self._driver_tempdir is not None:
             driver_environment['DUMPRENDERTREE_TEMP'] = str(self._driver_tempdir)

Modified: trunk/Tools/Scripts/webkitpy/port/wpe.py (230561 => 230562)


--- trunk/Tools/Scripts/webkitpy/port/wpe.py	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/Scripts/webkitpy/port/wpe.py	2018-04-12 08:19:35 UTC (rev 230562)
@@ -66,9 +66,7 @@
 
     @memoized
     def _driver_class(self):
-        if self._display_server == "wayland":
-            return WaylandDriver
-        return HeadlessDriver
+        return WaylandDriver
 
     def setup_environ_for_server(self, server_name=None):
         environment = super(WPEPort, self).setup_environ_for_server(server_name)

Modified: trunk/Tools/TestWebKitAPI/PlatformWebView.h (230561 => 230562)


--- trunk/Tools/TestWebKitAPI/PlatformWebView.h	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/PlatformWebView.h	2018-04-12 08:19:35 UTC (rev 230562)
@@ -88,9 +88,6 @@
 
     PlatformWKView m_view;
     PlatformWindow m_window;
-#if PLATFORM(WPE)
-    struct wpe_view_backend* m_backend { nullptr };
-#endif
 };
 
 } // namespace TestWebKitAPI

Modified: trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp (230561 => 230562)


--- trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp	2018-04-12 08:19:35 UTC (rev 230562)
@@ -108,8 +108,19 @@
 #if PLATFORM(WPE)
 static void testWebViewWebBackend(Test* test, gconstpointer)
 {
+    static struct wpe_view_backend_interface s_testingInterface = {
+        // create
+        [](void*, struct wpe_view_backend*) -> void* { return nullptr; },
+        // destroy
+        [](void*) { },
+        // initialize
+        [](void*) { },
+        // get_renderer_host_fd
+        [](void*) -> int { return -1; }
+    };
+
     // User provided backend with default deleter (we don't have a way to check the backend will be actually freed).
-    GRefPtr<WebKitWebView> webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpe_view_backend_create(), nullptr, nullptr)));
+    GRefPtr<WebKitWebView> webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr), nullptr, nullptr)));
     test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
     auto* viewBackend = webkit_web_view_get_backend(webView.get());
     g_assert(viewBackend);
@@ -118,7 +129,7 @@
     webView = nullptr;
 
     // User provided backend with destroy notify.
-    wpeBackend = wpe_view_backend_create();
+    wpeBackend = wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr);
     webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpeBackend, [](gpointer userData) {
         auto* backend = *static_cast<struct wpe_view_backend**>(userData);
         wpe_view_backend_destroy(backend);
@@ -145,7 +156,7 @@
 
         struct wpe_view_backend* backend;
     };
-    auto* owner = new BackendOwner(wpe_view_backend_create());
+    auto* owner = new BackendOwner(wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr));
     g_assert(hasInstance);
     webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(owner->backend, [](gpointer userData) {
         delete static_cast<BackendOwner*>(userData);

Modified: trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h (230561 => 230562)


--- trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h	2018-04-12 08:19:35 UTC (rev 230562)
@@ -143,11 +143,6 @@
 #if PLATFORM(WPE)
     static WebKitWebViewBackend* createWebViewBackend()
     {
-        const char* useHeadlessViewBackend = g_getenv("WPE_USE_HEADLESS_VIEW_BACKEND");
-        if (!useHeadlessViewBackend || !strcmp(useHeadlessViewBackend, "0")) {
-            auto* backend = wpe_view_backend_create();
-            return webkit_web_view_backend_new(backend, reinterpret_cast<GDestroyNotify>(wpe_view_backend_destroy), backend);
-        }
         auto* headlessBackend = new HeadlessViewBackend;
         return webkit_web_view_backend_new(headlessBackend->backend(), [](gpointer userData) {
             delete static_cast<HeadlessViewBackend*>(userData);

Modified: trunk/Tools/TestWebKitAPI/wpe/PlatformWebViewWPE.cpp (230561 => 230562)


--- trunk/Tools/TestWebKitAPI/wpe/PlatformWebViewWPE.cpp	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/TestWebKitAPI/wpe/PlatformWebViewWPE.cpp	2018-04-12 08:19:35 UTC (rev 230562)
@@ -61,21 +61,13 @@
 
 PlatformWebView::~PlatformWebView()
 {
-    if (m_backend)
-        wpe_view_backend_destroy(m_backend);
-
     delete m_window;
 }
 
 void PlatformWebView::initialize(WKPageConfigurationRef configuration)
 {
-    const char* useHeadlessViewBackend = g_getenv("WPE_USE_HEADLESS_VIEW_BACKEND");
-    if (useHeadlessViewBackend && strcmp(useHeadlessViewBackend, "0"))
-        m_window = new HeadlessViewBackend;
-    else
-        m_backend = wpe_view_backend_create();
-
-    m_view = WKViewCreate(m_window ? m_window->backend() : m_backend, configuration);
+    m_window = new HeadlessViewBackend;
+    m_view = WKViewCreate(m_window->backend(), configuration);
 }
 
 WKPageRef PlatformWebView::page() const

Modified: trunk/Tools/wpe/HeadlessViewBackend/CMakeLists.txt (230561 => 230562)


--- trunk/Tools/wpe/HeadlessViewBackend/CMakeLists.txt	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/HeadlessViewBackend/CMakeLists.txt	2018-04-12 08:19:35 UTC (rev 230562)
@@ -1,5 +1,5 @@
 find_package(LibGBM REQUIRED)
-find_package(WPEBackend-mesa REQUIRED)
+find_package(WPEBackend-fdo REQUIRED)
 
 set(WPEHeadlessViewBackend_SOURCES
     ${TOOLS_DIR}/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp
@@ -9,7 +9,7 @@
     ${CAIRO_INCLUDE_DIRS}
     ${GLIB_INCLUDE_DIRS}
     ${LIBGBM_INCLUDE_DIRS}
-    ${WPE_MESA_INCLUDE_DIRS}
+    ${WPEBACKEND_FDO_INCLUDE_DIRS}
 )
 
 set(WPEHeadlessViewBackend_LIBRARIES
@@ -16,7 +16,7 @@
     ${CAIRO_LIBRARIES}
     ${GLIB_LIBRARIES}
     ${LIBGBM_LIBRARIES}
-    ${WPE_MESA_LIBRARIES}
+    ${WPEBACKEND_FDO_LIBRARIES}
 )
 
 add_library(WPEHeadlessViewBackend ${WPEHeadlessViewBackend_SOURCES})

Modified: trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp (230561 => 230562)


--- trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp	2018-04-12 08:19:35 UTC (rev 230562)
@@ -28,6 +28,7 @@
 #include <cassert>
 #include <fcntl.h>
 #include <unistd.h>
+#include <wpe-fdo/initialize-egl.h>
 
 // Manually provide the EGL_CAST C++ definition in case eglplatform.h doesn't provide it.
 #ifndef EGL_CAST
@@ -37,20 +38,11 @@
 // Keep this in sync with wtf/glib/RunLoopSourcePriority.h.
 static int kRunLoopSourcePriorityDispatcher = -70;
 
-// FIXME: Deploy good practices and clean up GBM resources at process exit.
 static EGLDisplay getEGLDisplay()
 {
     static EGLDisplay s_display = EGL_NO_DISPLAY;
     if (s_display == EGL_NO_DISPLAY) {
-        int fd = open("/dev/dri/renderD128", O_RDWR | O_CLOEXEC | O_NOCTTY | O_NONBLOCK);
-        if (fd < 0)
-            return EGL_NO_DISPLAY;
-
-        struct gbm_device* device = gbm_create_device(fd);
-        if (!device)
-            return EGL_NO_DISPLAY;
-
-        EGLDisplay display = eglGetDisplay(device);
+        EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
         if (display == EGL_NO_DISPLAY)
             return EGL_NO_DISPLAY;
 
@@ -60,6 +52,7 @@
         if (!eglBindAPI(EGL_OPENGL_ES_API))
             return EGL_NO_DISPLAY;
 
+        wpe_fdo_initialize_for_egl_display(display);
         s_display = display;
     }
 
@@ -99,9 +92,10 @@
 
     m_egl.createImage = reinterpret_cast<PFNEGLCREATEIMAGEKHRPROC>(eglGetProcAddress("eglCreateImageKHR"));
     m_egl.destroyImage = reinterpret_cast<PFNEGLDESTROYIMAGEKHRPROC>(eglGetProcAddress("eglDestroyImageKHR"));
+    m_egl.queryBuffer = reinterpret_cast<PFNEGLQUERYWAYLANDBUFFERWL>(eglGetProcAddress("eglQueryWaylandBufferWL"));
     m_egl.imageTargetTexture2DOES = reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(eglGetProcAddress("glEGLImageTargetTexture2DOES"));
 
-    m_exportable = wpe_mesa_view_backend_exportable_dma_buf_create(&s_exportableClient, this);
+    m_exportable = wpe_view_backend_exportable_fdo_create(&s_exportableClient, this, 800, 600);
 
     m_updateSource = g_timeout_source_new(m_frameRate / 1000);
     g_source_set_callback(m_updateSource,
@@ -116,8 +110,10 @@
 
 HeadlessViewBackend::~HeadlessViewBackend()
 {
-    if (m_updateSource)
+    if (m_updateSource) {
         g_source_destroy(m_updateSource);
+        g_source_unref(m_updateSource);
+    }
 
     if (auto image = std::get<0>(m_pendingImage.second))
         m_egl.destroyImage(m_egl.display, image);
@@ -124,21 +120,15 @@
     if (auto image = std::get<0>(m_lockedImage.second))
         m_egl.destroyImage(m_egl.display, image);
 
-    for (auto it : m_exportMap) {
-        int fd = it.second;
-        if (fd >= 0)
-            close(fd);
-    }
-
     if (m_egl.context)
         eglDestroyContext(m_egl.display, m_egl.context);
 
-    wpe_mesa_view_backend_exportable_dma_buf_destroy(m_exportable);
+    wpe_view_backend_exportable_fdo_destroy(m_exportable);
 }
 
 struct wpe_view_backend* HeadlessViewBackend::backend() const
 {
-    return wpe_mesa_view_backend_exportable_dma_buf_get_view_backend(m_exportable);
+    return wpe_view_backend_exportable_fdo_get_view_backend(m_exportable);
 }
 
 cairo_surface_t* HeadlessViewBackend::createSnapshot()
@@ -155,7 +145,8 @@
     uint8_t* buffer = new uint8_t[4 * width * height];
     bool successfulSnapshot = false;
 
-    makeCurrent();
+    if (!eglMakeCurrent(m_egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, m_egl.context))
+        return nullptr;
 
     GLuint imageTexture;
     glGenTextures(1, &imageTexture);
@@ -203,57 +194,42 @@
     return imageSurface;
 }
 
-bool HeadlessViewBackend::makeCurrent()
-{
-    return eglMakeCurrent(m_egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, m_egl.context);
-}
-
 void HeadlessViewBackend::performUpdate()
 {
     if (!m_pendingImage.first)
         return;
 
-    wpe_mesa_view_backend_exportable_dma_buf_dispatch_frame_complete(m_exportable);
+    wpe_view_backend_exportable_fdo_dispatch_frame_complete(m_exportable);
     if (m_lockedImage.first) {
-        wpe_mesa_view_backend_exportable_dma_buf_dispatch_release_buffer(m_exportable, m_lockedImage.first);
+        wpe_view_backend_exportable_fdo_dispatch_release_buffer(m_exportable, m_lockedImage.first);
         m_egl.destroyImage(m_egl.display, std::get<0>(m_lockedImage.second));
     }
 
     m_lockedImage = m_pendingImage;
-    m_pendingImage = std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> { };
+    m_pendingImage = std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> { };
 }
 
-struct wpe_mesa_view_backend_exportable_dma_buf_client HeadlessViewBackend::s_exportableClient = {
-    // export_dma_buf
-    [](void* data, struct wpe_mesa_view_backend_exportable_dma_buf_data* imageData)
+struct wpe_view_backend_exportable_fdo_client HeadlessViewBackend::s_exportableClient = {
+    // export_buffer_resource
+    [](void* data, struct wl_resource* bufferResource)
     {
         auto& backend = *static_cast<HeadlessViewBackend*>(data);
+        if (backend.m_pendingImage.first)
+            std::abort();
 
-        auto it = backend.m_exportMap.end();
-        if (imageData->fd >= 0) {
-            assert(backend.m_exportMap.find(imageData->handle) == backend.m_exportMap.end());
+        auto& egl = backend.m_egl;
 
-            it = backend.m_exportMap.insert({ imageData->handle, imageData->fd }).first;
-        } else {
-            assert(backend.m_exportMap.find(imageData->handle) != backend.m_exportMap.end());
-            it = backend.m_exportMap.find(imageData->handle);
-        }
+        EGLint format = 0;
+        if (!egl.queryBuffer(egl.display, bufferResource, EGL_TEXTURE_FORMAT, &format) || format != EGL_TEXTURE_RGBA)
+            return;
 
-        assert(it != backend.m_exportMap.end());
-        int32_t fd = it->second;
+        EGLint width, height;
+        if (!egl.queryBuffer(egl.display, bufferResource, EGL_WIDTH, &width)
+            || !egl.queryBuffer(egl.display, bufferResource, EGL_HEIGHT, &height))
+            return;
 
-        backend.makeCurrent();
-
-        EGLint attributes[] = {
-            EGL_WIDTH, static_cast<EGLint>(imageData->width),
-            EGL_HEIGHT, static_cast<EGLint>(imageData->height),
-            EGL_LINUX_DRM_FOURCC_EXT, static_cast<EGLint>(imageData->format),
-            EGL_DMA_BUF_PLANE0_FD_EXT, fd,
-            EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0,
-            EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<EGLint>(imageData->stride),
-            EGL_NONE,
-        };
-        EGLImageKHR image = backend.m_egl.createImage(backend.m_egl.display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, attributes);
-        backend.m_pendingImage = { imageData->handle, std::make_tuple(image, imageData->width, imageData->height) };
+        EGLint attributes[] = { EGL_WAYLAND_PLANE_WL, 0, EGL_NONE };
+        EGLImageKHR image = egl.createImage(egl.display, EGL_NO_CONTEXT, EGL_WAYLAND_BUFFER_WL, bufferResource, attributes);
+        backend.m_pendingImage = { bufferResource, std::make_tuple(image, width, height) };
     },
 };

Modified: trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.h (230561 => 230562)


--- trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.h	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.h	2018-04-12 08:19:35 UTC (rev 230562)
@@ -32,8 +32,16 @@
 #include <cairo.h>
 #include <glib.h>
 #include <unordered_map>
-#include <wpe-mesa/view-backend-exportable-dma-buf.h>
+#include <wpe-fdo/view-backend-exportable.h>
 
+#ifndef EGL_WL_bind_wayland_display
+#define EGL_WL_bind_wayland_display 1
+typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
+
+#define EGL_WAYLAND_BUFFER_WL       0x31D5 /* eglCreateImageKHR target */
+#define EGL_WAYLAND_PLANE_WL        0x31D6 /* eglCreateImageKHR target */
+#endif
+
 class HeadlessViewBackend {
 public:
     HeadlessViewBackend();
@@ -44,26 +52,25 @@
     cairo_surface_t* createSnapshot();
 
 private:
-    bool makeCurrent();
     void performUpdate();
 
-    static struct wpe_mesa_view_backend_exportable_dma_buf_client s_exportableClient;
+    static struct wpe_view_backend_exportable_fdo_client s_exportableClient;
 
     struct {
         EGLDisplay display;
         EGLConfig config;
-        EGLContext context;
+        EGLContext context { nullptr };
 
         PFNEGLCREATEIMAGEKHRPROC createImage;
         PFNEGLDESTROYIMAGEKHRPROC destroyImage;
+        PFNEGLQUERYWAYLANDBUFFERWL queryBuffer;
         PFNGLEGLIMAGETARGETTEXTURE2DOESPROC imageTargetTexture2DOES;
     } m_egl;
 
-    struct wpe_mesa_view_backend_exportable_dma_buf* m_exportable;
+    struct wpe_view_backend_exportable_fdo* m_exportable;
 
-    std::unordered_map<uint32_t, int32_t> m_exportMap;
-    std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_pendingImage { };
-    std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_lockedImage { };
+    std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_pendingImage { };
+    std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_lockedImage { };
 
     GSource* m_updateSource;
     gint64 m_frameRate { G_USEC_PER_SEC / 60 };

Modified: trunk/Tools/wpe/jhbuild.modules (230561 => 230562)


--- trunk/Tools/wpe/jhbuild.modules	2018-04-12 08:01:36 UTC (rev 230561)
+++ trunk/Tools/wpe/jhbuild.modules	2018-04-12 08:19:35 UTC (rev 230562)
@@ -19,8 +19,8 @@
       <dep package="xkbcommon"/>
       <dep package="webkit-gstreamer-testing-dependencies"/>
       <dep package="woff2"/>
-      <dep package="wpe"/>
-      <dep package="wpe-mesa"/>
+      <dep package="wpebackend"/>
+      <dep package="wpebackend-fdo"/>
       <dep package="libgpg-error"/>
       <dep package="libgcrypt"/>
       <dep package="libepoxy"/>
@@ -172,19 +172,19 @@
             hash="sha1:7127993bfb69e13cdff25fb8b3c8f26ce6be5bfa"/>
   </autotools>
 
-  <cmake id="wpe">
+  <cmake id="wpebackend">
     <branch repo="github.com" module="WebPlatformForEmbedded/WPEBackend.git"
             tag="3013faaebab42e7ef7497b3850a2902978eb3d6f" />
   </cmake>
 
-  <cmake id="wpe-mesa">
+  <cmake id="wpebackend-fdo">
     <dependencies>
-      <dep package="wpe" />
-      <dep package="glib" />
-      <dep package="xkbcommon" />
+      <dep package="wpebackend"/>
+      <dep package="glib"/>
+      <dep package="xkbcommon"/>
     </dependencies>
-    <branch repo="github.com" module="WebPlatformForEmbedded/WPEBackend-mesa.git"
-            tag="8e159832dc55164758f68fad02f52e6ad7c70642" />
+    <branch repo="github.com" module="Igalia/WPEBackend-fdo.git"
+            tag="064c60806422ff1bb32cef7fb1de68923aecba82"/>
   </cmake>
 
   <autotools id="libgpg-error" autogen-sh="configure">
@@ -213,7 +213,7 @@
   </autotools>
 
   <autotools id="dyz" supports-non-srcdir-builds="no">
-    <branch repo="github.com" module="Igalia/dyz" tag="203a1ebd1481e44aa8105e862c02f317e6653627"/>
+    <branch repo="github.com" module="Igalia/dyz" tag="74a368cc63a0ff9bba675182affa3a3fd13aad80"/>
   </autotools>
 
   <meson id="graphene">
_______________________________________________
webkit-changes mailing list
webkit-changes@lists.webkit.org
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to