Changeset 245957 in webkit


Ignore:
Timestamp:
May 31, 2019 1:17:39 AM (5 years ago)
Author:
Carlos Garcia Campos
Message:

[GTK] WPERenderer: ensure we complete the last frame when leaving AC mode
https://bugs.webkit.org/show_bug.cgi?id=198372

Reviewed by Michael Catanzaro.

It can happen that we leave AC mode after a new image is received from the web process but before it's
committed. It can also happen that we receive a new image from the web process right after we have left AC
mode. In both cases we need to complete the frame to ensure we don't leave the wayland compositor waiting
forever for a frame to be completed.

  • UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:

(WebKit::AcceleratedBackingStoreWayland::update): Complete any pending image when a new surface is used.
(WebKit::AcceleratedBackingStoreWayland::displayBuffer): Complete the given image and return early if we already
left AC mode.

  • UIProcess/gtk/AcceleratedBackingStoreWayland.h:
Location:
trunk/Source/WebKit
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebKit/ChangeLog

    r245956 r245957  
     12019-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>
     2
     3        [GTK] WPERenderer: ensure we complete the last frame when leaving AC mode
     4        https://bugs.webkit.org/show_bug.cgi?id=198372
     5
     6        Reviewed by Michael Catanzaro.
     7
     8        It can happen that we leave AC mode after a new image is received from the web process but before it's
     9        committed. It can also happen that we receive a new image from the web process right after we have left AC
     10        mode. In both cases we need to complete the frame to ensure we don't leave the wayland compositor waiting
     11        forever for a frame to be completed.
     12
     13        * UIProcess/gtk/AcceleratedBackingStoreWayland.cpp:
     14        (WebKit::AcceleratedBackingStoreWayland::update): Complete any pending image when a new surface is used.
     15        (WebKit::AcceleratedBackingStoreWayland::displayBuffer): Complete the given image and return early if we already
     16        left AC mode.
     17        * UIProcess/gtk/AcceleratedBackingStoreWayland.h:
     18
    1192019-05-31  Carlos Garcia Campos  <cgarcia@igalia.com>
    220
  • trunk/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.cpp

    r245955 r245957  
    2929#if PLATFORM(WAYLAND) && USE(EGL)
    3030
     31#include "LayerTreeContext.h"
    3132#include "WebPageProxy.h"
    3233// These includes need to be in this order because wayland-egl.h defines WL_EGL_PLATFORM
     
    182183
    183184#if USE(WPE_RENDERER)
     185void AcceleratedBackingStoreWayland::update(const LayerTreeContext& context)
     186{
     187    if (m_surfaceID == context.contextID)
     188        return;
     189
     190    m_surfaceID = context.contextID;
     191    if (m_pendingImage) {
     192        wpe_view_backend_exportable_fdo_dispatch_frame_complete(m_exportable);
     193        wpe_view_backend_exportable_fdo_egl_dispatch_release_exported_image(m_exportable, m_pendingImage);
     194        m_pendingImage = nullptr;
     195    }
     196}
     197
    184198int AcceleratedBackingStoreWayland::renderHostFileDescriptor()
    185199{
     
    189203void AcceleratedBackingStoreWayland::displayBuffer(struct wpe_fdo_egl_exported_image* image)
    190204{
     205    if (!m_surfaceID) {
     206        wpe_view_backend_exportable_fdo_dispatch_frame_complete(m_exportable);
     207        wpe_view_backend_exportable_fdo_egl_dispatch_release_exported_image(m_exportable, image);
     208        return;
     209    }
     210
    191211    if (!m_viewTexture) {
    192212        if (!makeContextCurrent())
  • trunk/Source/WebKit/UIProcess/gtk/AcceleratedBackingStoreWayland.h

    r245807 r245957  
    6767    bool makeContextCurrent() override;
    6868#if USE(WPE_RENDERER)
     69    void update(const LayerTreeContext&) override;
    6970    int renderHostFileDescriptor() override;
    7071#endif
     
    7980#if USE(WPE_RENDERER)
    8081    struct wpe_view_backend_exportable_fdo* m_exportable { nullptr };
     82    uint64_t m_surfaceID { 0 };
    8183    unsigned m_viewTexture { 0 };
    8284    struct wpe_fdo_egl_exported_image* m_committedImage { nullptr };
Note: See TracChangeset for help on using the changeset viewer.