Changeset 230562 in webkit


Ignore:
Timestamp:
Apr 12, 2018 1:19:35 AM (6 years ago)
Author:
zandobersek@gmail.com
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.
Location:
trunk
Files:
1 added
1 deleted
13 edited

Legend:

Unmodified
Added
Removed
  • trunk/ChangeLog

    r230540 r230562  
     12018-04-12  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        [WPE] Switch testing process to using WPEBackend-fdo
     4        https://bugs.webkit.org/show_bug.cgi?id=184357
     5
     6        Reviewed by Carlos Alberto Lopez Perez.
     7
     8        * Source/cmake/FindWPEBackend-fdo.cmake: Renamed from Source/cmake/FindWPEBackend-mesa.cmake.
     9
    1102018-04-11  Thibault Saunier  <tsaunier@igalia.com>
    211
  • trunk/Tools/ChangeLog

    r230559 r230562  
     12018-04-12  Zan Dobersek  <zdobersek@igalia.com>
     2
     3        [WPE] Switch testing process to using WPEBackend-fdo
     4        https://bugs.webkit.org/show_bug.cgi?id=184357
     5
     6        Reviewed by Carlos Alberto Lopez Perez.
     7
     8        Switch WPE testing to using the WPEBackend-fdo implementation that
     9        depends on the WL_bind_wayland_display EGL extension, as defined under
     10        the freedesktop.org project.
     11        https://cgit.freedesktop.org/mesa/mesa/tree/docs/specs/WL_bind_wayland_display.spec
     12
     13        HeadlessViewBackend is refactored to use the WPEBackend-fdo API, but
     14        otherwise is not changed in functionality.
     15
     16        Unit tests now have to unconditionally use HeadlessViewBackend as a
     17        wpe_view_backend provider, since WPEBackend-fdo does not provide a
     18        default wpe_view_backend implementation. Unit tests covering that are
     19        adjusted to instead use a mock wpe_view_backend interface.
     20
     21        * Scripts/webkitdirs.pm:
     22        (builtDylibPathForName): Fix the libWPEWebKit.so name to also include
     23        the API version that was added in r230449.
     24        * Scripts/webkitpy/port/waylanddriver.py:
     25        (WaylandDriver._setup_environ_for_test): Export EGL_PLATFORM=wayland.
     26        * Scripts/webkitpy/port/wpe.py:
     27        (WPEPort._driver_class): Use WaylandDriver by default.
     28        * TestWebKitAPI/PlatformWebView.h:
     29        (): Deleted.
     30        * TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp:
     31        (testWebViewWebBackend):
     32        * TestWebKitAPI/glib/WebKitGLib/TestMain.h:
     33        (Test::createWebViewBackend):
     34        * TestWebKitAPI/wpe/PlatformWebViewWPE.cpp:
     35        (TestWebKitAPI::PlatformWebView::~PlatformWebView):
     36        (TestWebKitAPI::PlatformWebView::initialize):
     37        * wpe/HeadlessViewBackend/CMakeLists.txt:
     38        * wpe/HeadlessViewBackend/HeadlessViewBackend.cpp:
     39        (getEGLDisplay):
     40        (HeadlessViewBackend::HeadlessViewBackend):
     41        (HeadlessViewBackend::~HeadlessViewBackend):
     42        (HeadlessViewBackend::backend const):
     43        (HeadlessViewBackend::createSnapshot):
     44        (HeadlessViewBackend::performUpdate):
     45        (HeadlessViewBackend::makeCurrent): Deleted.
     46        * wpe/HeadlessViewBackend/HeadlessViewBackend.h:
     47        * wpe/jhbuild.modules: Module name cleanup. Dyz version is bumped.
     48
    1492018-04-12  Carlos Garcia Campos  <cgarcia@igalia.com>
    250
  • trunk/Tools/Scripts/webkitdirs.pm

    r229711 r230562  
    10371037    }
    10381038    if (isWPE()) {
    1039         return "$configurationProductDir/lib/libWPEWebKit.so";
     1039        return "$configurationProductDir/lib/libWPEWebKit-0.1.so";
    10401040    }
    10411041
  • trunk/Tools/Scripts/webkitpy/port/waylanddriver.py

    r225740 r230562  
    5050        self._port._copy_value_from_environ_if_set(driver_environment, 'WAYLAND_SOCKET')
    5151        driver_environment['GDK_BACKEND'] = 'wayland'
     52        driver_environment['EGL_PLATFORM'] = 'wayland'
    5253        driver_environment['LOCAL_RESOURCE_ROOT'] = self._port.layout_tests_dir()
    5354        if self._driver_tempdir is not None:
  • trunk/Tools/Scripts/webkitpy/port/wpe.py

    r228881 r230562  
    6767    @memoized
    6868    def _driver_class(self):
    69         if self._display_server == "wayland":
    70             return WaylandDriver
    71         return HeadlessDriver
     69        return WaylandDriver
    7270
    7371    def setup_environ_for_server(self, server_name=None):
  • trunk/Tools/TestWebKitAPI/PlatformWebView.h

    r225046 r230562  
    8989    PlatformWKView m_view;
    9090    PlatformWindow m_window;
    91 #if PLATFORM(WPE)
    92     struct wpe_view_backend* m_backend { nullptr };
    93 #endif
    9491};
    9592
  • trunk/Tools/TestWebKitAPI/Tests/WebKitGLib/TestWebKitWebView.cpp

    r230557 r230562  
    109109static void testWebViewWebBackend(Test* test, gconstpointer)
    110110{
     111    static struct wpe_view_backend_interface s_testingInterface = {
     112        // create
     113        [](void*, struct wpe_view_backend*) -> void* { return nullptr; },
     114        // destroy
     115        [](void*) { },
     116        // initialize
     117        [](void*) { },
     118        // get_renderer_host_fd
     119        [](void*) -> int { return -1; }
     120    };
     121
    111122    // User provided backend with default deleter (we don't have a way to check the backend will be actually freed).
    112     GRefPtr<WebKitWebView> webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpe_view_backend_create(), nullptr, nullptr)));
     123    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)));
    113124    test->assertObjectIsDeletedWhenTestFinishes(G_OBJECT(webView.get()));
    114125    auto* viewBackend = webkit_web_view_get_backend(webView.get());
     
    119130
    120131    // User provided backend with destroy notify.
    121     wpeBackend = wpe_view_backend_create();
     132    wpeBackend = wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr);
    122133    webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(wpeBackend, [](gpointer userData) {
    123134        auto* backend = *static_cast<struct wpe_view_backend**>(userData);
     
    146157        struct wpe_view_backend* backend;
    147158    };
    148     auto* owner = new BackendOwner(wpe_view_backend_create());
     159    auto* owner = new BackendOwner(wpe_view_backend_create_with_backend_interface(&s_testingInterface, nullptr));
    149160    g_assert(hasInstance);
    150161    webView = adoptGRef(webkit_web_view_new(webkit_web_view_backend_new(owner->backend, [](gpointer userData) {
  • trunk/Tools/TestWebKitAPI/glib/WebKitGLib/TestMain.h

    r230557 r230562  
    144144    static WebKitWebViewBackend* createWebViewBackend()
    145145    {
    146         const char* useHeadlessViewBackend = g_getenv("WPE_USE_HEADLESS_VIEW_BACKEND");
    147         if (!useHeadlessViewBackend || !strcmp(useHeadlessViewBackend, "0")) {
    148             auto* backend = wpe_view_backend_create();
    149             return webkit_web_view_backend_new(backend, reinterpret_cast<GDestroyNotify>(wpe_view_backend_destroy), backend);
    150         }
    151146        auto* headlessBackend = new HeadlessViewBackend;
    152147        return webkit_web_view_backend_new(headlessBackend->backend(), [](gpointer userData) {
  • trunk/Tools/TestWebKitAPI/wpe/PlatformWebViewWPE.cpp

    r225046 r230562  
    6262PlatformWebView::~PlatformWebView()
    6363{
    64     if (m_backend)
    65         wpe_view_backend_destroy(m_backend);
    66 
    6764    delete m_window;
    6865}
     
    7067void PlatformWebView::initialize(WKPageConfigurationRef configuration)
    7168{
    72     const char* useHeadlessViewBackend = g_getenv("WPE_USE_HEADLESS_VIEW_BACKEND");
    73     if (useHeadlessViewBackend && strcmp(useHeadlessViewBackend, "0"))
    74         m_window = new HeadlessViewBackend;
    75     else
    76         m_backend = wpe_view_backend_create();
    77 
    78     m_view = WKViewCreate(m_window ? m_window->backend() : m_backend, configuration);
     69    m_window = new HeadlessViewBackend;
     70    m_view = WKViewCreate(m_window->backend(), configuration);
    7971}
    8072
  • trunk/Tools/wpe/HeadlessViewBackend/CMakeLists.txt

    r225045 r230562  
    11find_package(LibGBM REQUIRED)
    2 find_package(WPEBackend-mesa REQUIRED)
     2find_package(WPEBackend-fdo REQUIRED)
    33
    44set(WPEHeadlessViewBackend_SOURCES
     
    1010    ${GLIB_INCLUDE_DIRS}
    1111    ${LIBGBM_INCLUDE_DIRS}
    12     ${WPE_MESA_INCLUDE_DIRS}
     12    ${WPEBACKEND_FDO_INCLUDE_DIRS}
    1313)
    1414
     
    1717    ${GLIB_LIBRARIES}
    1818    ${LIBGBM_LIBRARIES}
    19     ${WPE_MESA_LIBRARIES}
     19    ${WPEBACKEND_FDO_LIBRARIES}
    2020)
    2121
  • trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.cpp

    r225045 r230562  
    2929#include <fcntl.h>
    3030#include <unistd.h>
     31#include <wpe-fdo/initialize-egl.h>
    3132
    3233// Manually provide the EGL_CAST C++ definition in case eglplatform.h doesn't provide it.
     
    3839static int kRunLoopSourcePriorityDispatcher = -70;
    3940
    40 // FIXME: Deploy good practices and clean up GBM resources at process exit.
    4141static EGLDisplay getEGLDisplay()
    4242{
    4343    static EGLDisplay s_display = EGL_NO_DISPLAY;
    4444    if (s_display == EGL_NO_DISPLAY) {
    45         int fd = open("/dev/dri/renderD128", O_RDWR | O_CLOEXEC | O_NOCTTY | O_NONBLOCK);
    46         if (fd < 0)
    47             return EGL_NO_DISPLAY;
    48 
    49         struct gbm_device* device = gbm_create_device(fd);
    50         if (!device)
    51             return EGL_NO_DISPLAY;
    52 
    53         EGLDisplay display = eglGetDisplay(device);
     45        EGLDisplay display = eglGetDisplay(EGL_DEFAULT_DISPLAY);
    5446        if (display == EGL_NO_DISPLAY)
    5547            return EGL_NO_DISPLAY;
     
    6153            return EGL_NO_DISPLAY;
    6254
     55        wpe_fdo_initialize_for_egl_display(display);
    6356        s_display = display;
    6457    }
     
    10093    m_egl.createImage = reinterpret_cast<PFNEGLCREATEIMAGEKHRPROC>(eglGetProcAddress("eglCreateImageKHR"));
    10194    m_egl.destroyImage = reinterpret_cast<PFNEGLDESTROYIMAGEKHRPROC>(eglGetProcAddress("eglDestroyImageKHR"));
     95    m_egl.queryBuffer = reinterpret_cast<PFNEGLQUERYWAYLANDBUFFERWL>(eglGetProcAddress("eglQueryWaylandBufferWL"));
    10296    m_egl.imageTargetTexture2DOES = reinterpret_cast<PFNGLEGLIMAGETARGETTEXTURE2DOESPROC>(eglGetProcAddress("glEGLImageTargetTexture2DOES"));
    10397
    104     m_exportable = wpe_mesa_view_backend_exportable_dma_buf_create(&s_exportableClient, this);
     98    m_exportable = wpe_view_backend_exportable_fdo_create(&s_exportableClient, this, 800, 600);
    10599
    106100    m_updateSource = g_timeout_source_new(m_frameRate / 1000);
     
    117111HeadlessViewBackend::~HeadlessViewBackend()
    118112{
    119     if (m_updateSource)
     113    if (m_updateSource) {
    120114        g_source_destroy(m_updateSource);
     115        g_source_unref(m_updateSource);
     116    }
    121117
    122118    if (auto image = std::get<0>(m_pendingImage.second))
     
    125121        m_egl.destroyImage(m_egl.display, image);
    126122
    127     for (auto it : m_exportMap) {
    128         int fd = it.second;
    129         if (fd >= 0)
    130             close(fd);
    131     }
    132 
    133123    if (m_egl.context)
    134124        eglDestroyContext(m_egl.display, m_egl.context);
    135125
    136     wpe_mesa_view_backend_exportable_dma_buf_destroy(m_exportable);
     126    wpe_view_backend_exportable_fdo_destroy(m_exportable);
    137127}
    138128
    139129struct wpe_view_backend* HeadlessViewBackend::backend() const
    140130{
    141     return wpe_mesa_view_backend_exportable_dma_buf_get_view_backend(m_exportable);
     131    return wpe_view_backend_exportable_fdo_get_view_backend(m_exportable);
    142132}
    143133
     
    156146    bool successfulSnapshot = false;
    157147
    158     makeCurrent();
     148    if (!eglMakeCurrent(m_egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, m_egl.context))
     149        return nullptr;
    159150
    160151    GLuint imageTexture;
     
    204195}
    205196
    206 bool HeadlessViewBackend::makeCurrent()
    207 {
    208     return eglMakeCurrent(m_egl.display, EGL_NO_SURFACE, EGL_NO_SURFACE, m_egl.context);
    209 }
    210 
    211197void HeadlessViewBackend::performUpdate()
    212198{
     
    214200        return;
    215201
    216     wpe_mesa_view_backend_exportable_dma_buf_dispatch_frame_complete(m_exportable);
     202    wpe_view_backend_exportable_fdo_dispatch_frame_complete(m_exportable);
    217203    if (m_lockedImage.first) {
    218         wpe_mesa_view_backend_exportable_dma_buf_dispatch_release_buffer(m_exportable, m_lockedImage.first);
     204        wpe_view_backend_exportable_fdo_dispatch_release_buffer(m_exportable, m_lockedImage.first);
    219205        m_egl.destroyImage(m_egl.display, std::get<0>(m_lockedImage.second));
    220206    }
    221207
    222208    m_lockedImage = m_pendingImage;
    223     m_pendingImage = std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> { };
    224 }
    225 
    226 struct wpe_mesa_view_backend_exportable_dma_buf_client HeadlessViewBackend::s_exportableClient = {
    227     // export_dma_buf
    228     [](void* data, struct wpe_mesa_view_backend_exportable_dma_buf_data* imageData)
     209    m_pendingImage = std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> { };
     210}
     211
     212struct wpe_view_backend_exportable_fdo_client HeadlessViewBackend::s_exportableClient = {
     213    // export_buffer_resource
     214    [](void* data, struct wl_resource* bufferResource)
    229215    {
    230216        auto& backend = *static_cast<HeadlessViewBackend*>(data);
    231 
    232         auto it = backend.m_exportMap.end();
    233         if (imageData->fd >= 0) {
    234             assert(backend.m_exportMap.find(imageData->handle) == backend.m_exportMap.end());
    235 
    236             it = backend.m_exportMap.insert({ imageData->handle, imageData->fd }).first;
    237         } else {
    238             assert(backend.m_exportMap.find(imageData->handle) != backend.m_exportMap.end());
    239             it = backend.m_exportMap.find(imageData->handle);
    240         }
    241 
    242         assert(it != backend.m_exportMap.end());
    243         int32_t fd = it->second;
    244 
    245         backend.makeCurrent();
    246 
    247         EGLint attributes[] = {
    248             EGL_WIDTH, static_cast<EGLint>(imageData->width),
    249             EGL_HEIGHT, static_cast<EGLint>(imageData->height),
    250             EGL_LINUX_DRM_FOURCC_EXT, static_cast<EGLint>(imageData->format),
    251             EGL_DMA_BUF_PLANE0_FD_EXT, fd,
    252             EGL_DMA_BUF_PLANE0_OFFSET_EXT, 0,
    253             EGL_DMA_BUF_PLANE0_PITCH_EXT, static_cast<EGLint>(imageData->stride),
    254             EGL_NONE,
    255         };
    256         EGLImageKHR image = backend.m_egl.createImage(backend.m_egl.display, EGL_NO_CONTEXT, EGL_LINUX_DMA_BUF_EXT, nullptr, attributes);
    257         backend.m_pendingImage = { imageData->handle, std::make_tuple(image, imageData->width, imageData->height) };
     217        if (backend.m_pendingImage.first)
     218            std::abort();
     219
     220        auto& egl = backend.m_egl;
     221
     222        EGLint format = 0;
     223        if (!egl.queryBuffer(egl.display, bufferResource, EGL_TEXTURE_FORMAT, &format) || format != EGL_TEXTURE_RGBA)
     224            return;
     225
     226        EGLint width, height;
     227        if (!egl.queryBuffer(egl.display, bufferResource, EGL_WIDTH, &width)
     228            || !egl.queryBuffer(egl.display, bufferResource, EGL_HEIGHT, &height))
     229            return;
     230
     231        EGLint attributes[] = { EGL_WAYLAND_PLANE_WL, 0, EGL_NONE };
     232        EGLImageKHR image = egl.createImage(egl.display, EGL_NO_CONTEXT, EGL_WAYLAND_BUFFER_WL, bufferResource, attributes);
     233        backend.m_pendingImage = { bufferResource, std::make_tuple(image, width, height) };
    258234    },
    259235};
  • trunk/Tools/wpe/HeadlessViewBackend/HeadlessViewBackend.h

    r225045 r230562  
    3333#include <glib.h>
    3434#include <unordered_map>
    35 #include <wpe-mesa/view-backend-exportable-dma-buf.h>
     35#include <wpe-fdo/view-backend-exportable.h>
     36
     37#ifndef EGL_WL_bind_wayland_display
     38#define EGL_WL_bind_wayland_display 1
     39typedef EGLBoolean (EGLAPIENTRYP PFNEGLQUERYWAYLANDBUFFERWL) (EGLDisplay dpy, struct wl_resource *buffer, EGLint attribute, EGLint *value);
     40
     41#define EGL_WAYLAND_BUFFER_WL       0x31D5 /* eglCreateImageKHR target */
     42#define EGL_WAYLAND_PLANE_WL        0x31D6 /* eglCreateImageKHR target */
     43#endif
    3644
    3745class HeadlessViewBackend {
     
    4553
    4654private:
    47     bool makeCurrent();
    4855    void performUpdate();
    4956
    50     static struct wpe_mesa_view_backend_exportable_dma_buf_client s_exportableClient;
     57    static struct wpe_view_backend_exportable_fdo_client s_exportableClient;
    5158
    5259    struct {
    5360        EGLDisplay display;
    5461        EGLConfig config;
    55         EGLContext context;
     62        EGLContext context { nullptr };
    5663
    5764        PFNEGLCREATEIMAGEKHRPROC createImage;
    5865        PFNEGLDESTROYIMAGEKHRPROC destroyImage;
     66        PFNEGLQUERYWAYLANDBUFFERWL queryBuffer;
    5967        PFNGLEGLIMAGETARGETTEXTURE2DOESPROC imageTargetTexture2DOES;
    6068    } m_egl;
    6169
    62     struct wpe_mesa_view_backend_exportable_dma_buf* m_exportable;
     70    struct wpe_view_backend_exportable_fdo* m_exportable;
    6371
    64     std::unordered_map<uint32_t, int32_t> m_exportMap;
    65     std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_pendingImage { };
    66     std::pair<uint32_t, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_lockedImage { };
     72    std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_pendingImage { };
     73    std::pair<struct wl_resource*, std::tuple<EGLImageKHR, uint32_t, uint32_t>> m_lockedImage { };
    6774
    6875    GSource* m_updateSource;
  • trunk/Tools/wpe/jhbuild.modules

    r229866 r230562  
    2020      <dep package="webkit-gstreamer-testing-dependencies"/>
    2121      <dep package="woff2"/>
    22       <dep package="wpe"/>
    23       <dep package="wpe-mesa"/>
     22      <dep package="wpebackend"/>
     23      <dep package="wpebackend-fdo"/>
    2424      <dep package="libgpg-error"/>
    2525      <dep package="libgcrypt"/>
     
    173173  </autotools>
    174174
    175   <cmake id="wpe">
     175  <cmake id="wpebackend">
    176176    <branch repo="github.com" module="WebPlatformForEmbedded/WPEBackend.git"
    177177            tag="3013faaebab42e7ef7497b3850a2902978eb3d6f" />
    178178  </cmake>
    179179
    180   <cmake id="wpe-mesa">
    181     <dependencies>
    182       <dep package="wpe" />
    183       <dep package="glib" />
    184       <dep package="xkbcommon" />
    185     </dependencies>
    186     <branch repo="github.com" module="WebPlatformForEmbedded/WPEBackend-mesa.git"
    187             tag="8e159832dc55164758f68fad02f52e6ad7c70642" />
     180  <cmake id="wpebackend-fdo">
     181    <dependencies>
     182      <dep package="wpebackend"/>
     183      <dep package="glib"/>
     184      <dep package="xkbcommon"/>
     185    </dependencies>
     186    <branch repo="github.com" module="Igalia/WPEBackend-fdo.git"
     187            tag="064c60806422ff1bb32cef7fb1de68923aecba82"/>
    188188  </cmake>
    189189
     
    214214
    215215  <autotools id="dyz" supports-non-srcdir-builds="no">
    216     <branch repo="github.com" module="Igalia/dyz" tag="203a1ebd1481e44aa8105e862c02f317e6653627"/>
     216    <branch repo="github.com" module="Igalia/dyz" tag="74a368cc63a0ff9bba675182affa3a3fd13aad80"/>
    217217  </autotools>
    218218
Note: See TracChangeset for help on using the changeset viewer.