Title: [237518] releases/WebKitGTK/webkit-2.22/Source/WebKit
Revision
237518
Author
[email protected]
Date
2018-10-28 06:44:03 -0700 (Sun, 28 Oct 2018)

Log Message

Merged r237410 - [GTK][AC] Resizing the window doesn't always update the visible rect
https://bugs.webkit.org/show_bug.cgi?id=189743

Reviewed by Michael Catanzaro.

Disassociate resizing that can be done on an AcceleratedSurface object
between "host resizes" and "client resizes".

The former is done from ThreadedCoordinatedLayerTreeHost directly, and
is currently used only for GTK on X11, where a new pixmap object is
created on each resize, which affects the context ID that is based on
that pixmap object's address.

The latter is done from the composition thread. It's used for GTK on
Wayland and WPE. In both cases, the underlying window object does not
change on each resize, but it's necessary to perform the actual resize
on the composition thread.

So far it hasn't been performed there, which ended up pushing sizes of
the WebKit view and the underlying window object out of sync during
resizing, leaving parts of window unrendered.

* Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
(WebKit::ThreadedCompositor::renderLayerTree):
* Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
* WebProcess/WebPage/AcceleratedSurface.cpp:
(WebKit::AcceleratedSurface::hostResize):
(WebKit::AcceleratedSurface::resize): Deleted.
* WebProcess/WebPage/AcceleratedSurface.h:
(WebKit::AcceleratedSurface::clientResize):
* WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
(WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
(WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange):
* WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
* WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp:
(WebKit::AcceleratedSurfaceWayland::clientResize):
(WebKit::AcceleratedSurfaceWayland::resize): Deleted.
* WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h:
* WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
(WebKit::AcceleratedSurfaceX11::hostResize):
(WebKit::AcceleratedSurfaceX11::resize): Deleted.
* WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h:
* WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
(WebKit::AcceleratedSurfaceWPE::clientResize):
(WebKit::AcceleratedSurfaceWPE::resize): Deleted.
* WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.h:

Modified Paths

Diff

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/ChangeLog (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/ChangeLog	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/ChangeLog	2018-10-28 13:44:03 UTC (rev 237518)
@@ -1,3 +1,52 @@
+2018-10-25  Zan Dobersek  <[email protected]>
+
+        [GTK][AC] Resizing the window doesn't always update the visible rect
+        https://bugs.webkit.org/show_bug.cgi?id=189743
+
+        Reviewed by Michael Catanzaro.
+
+        Disassociate resizing that can be done on an AcceleratedSurface object
+        between "host resizes" and "client resizes".
+
+        The former is done from ThreadedCoordinatedLayerTreeHost directly, and
+        is currently used only for GTK on X11, where a new pixmap object is
+        created on each resize, which affects the context ID that is based on
+        that pixmap object's address.
+
+        The latter is done from the composition thread. It's used for GTK on
+        Wayland and WPE. In both cases, the underlying window object does not
+        change on each resize, but it's necessary to perform the actual resize
+        on the composition thread.
+
+        So far it hasn't been performed there, which ended up pushing sizes of
+        the WebKit view and the underlying window object out of sync during
+        resizing, leaving parts of window unrendered.
+
+        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp:
+        (WebKit::ThreadedCompositor::renderLayerTree):
+        * Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h:
+        * WebProcess/WebPage/AcceleratedSurface.cpp:
+        (WebKit::AcceleratedSurface::hostResize):
+        (WebKit::AcceleratedSurface::resize): Deleted.
+        * WebProcess/WebPage/AcceleratedSurface.h:
+        (WebKit::AcceleratedSurface::clientResize):
+        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp:
+        (WebKit::ThreadedCoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged):
+        (WebKit::ThreadedCoordinatedLayerTreeHost::sizeDidChange):
+        * WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h:
+        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp:
+        (WebKit::AcceleratedSurfaceWayland::clientResize):
+        (WebKit::AcceleratedSurfaceWayland::resize): Deleted.
+        * WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h:
+        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp:
+        (WebKit::AcceleratedSurfaceX11::hostResize):
+        (WebKit::AcceleratedSurfaceX11::resize): Deleted.
+        * WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h:
+        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp:
+        (WebKit::AcceleratedSurfaceWPE::clientResize):
+        (WebKit::AcceleratedSurfaceWPE::resize): Deleted.
+        * WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.h:
+
 2018-10-16  Philippe Normand  <[email protected]>
 
         [GLib] Build error with RemoteInspector disabled

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.cpp	2018-10-28 13:44:03 UTC (rev 237518)
@@ -228,8 +228,10 @@
         m_attributes.needsResize = false;
     }
 
-    if (needsResize)
+    if (needsResize) {
+        m_client.resize(viewportSize);
         glViewport(0, 0, viewportSize.width(), viewportSize.height());
+    }
 
     TransformationMatrix viewportTransform;
     viewportTransform.scale(scaleFactor);

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/Shared/CoordinatedGraphics/threadedcompositor/ThreadedCompositor.h	2018-10-28 13:44:03 UTC (rev 237518)
@@ -56,6 +56,7 @@
         virtual uint64_t nativeSurfaceHandleForCompositing() = 0;
         virtual void didDestroyGLContext() = 0;
 
+        virtual void resize(const WebCore::IntSize&) = 0;
         virtual void willRenderFrame() = 0;
         virtual void didRenderFrame() = 0;
     };

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/AcceleratedSurface.cpp (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/AcceleratedSurface.cpp	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/AcceleratedSurface.cpp	2018-10-28 13:44:03 UTC (rev 237518)
@@ -69,7 +69,7 @@
     m_size.scale(m_webPage.deviceScaleFactor());
 }
 
-bool AcceleratedSurface::resize(const IntSize& size)
+bool AcceleratedSurface::hostResize(const IntSize& size)
 {
     IntSize scaledSize(size);
     scaledSize.scale(m_webPage.deviceScaleFactor());

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/AcceleratedSurface.h (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/AcceleratedSurface.h	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/AcceleratedSurface.h	2018-10-28 13:44:03 UTC (rev 237518)
@@ -45,7 +45,8 @@
 
     virtual uint64_t window() const { ASSERT_NOT_REACHED(); return 0; }
     virtual uint64_t surfaceID() const { ASSERT_NOT_REACHED(); return 0; }
-    virtual bool resize(const WebCore::IntSize&);
+    virtual bool hostResize(const WebCore::IntSize&);
+    virtual void clientResize(const WebCore::IntSize&) { };
     virtual bool shouldPaintMirrored() const { return false; }
 
     virtual void initialize() { }

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.cpp	2018-10-28 13:44:03 UTC (rev 237518)
@@ -177,7 +177,7 @@
         return;
     }
 
-    if (m_surface && m_surface->resize(m_webPage.size()))
+    if (m_surface && m_surface->hostResize(m_webPage.size()))
         m_layerTreeContext.contextID = m_surface->surfaceID();
 
     CoordinatedLayerTreeHost::deviceOrPageScaleFactorChanged();
@@ -203,7 +203,7 @@
         return;
     }
 
-    if (m_surface && m_surface->resize(size))
+    if (m_surface && m_surface->hostResize(size))
         m_layerTreeContext.contextID = m_surface->surfaceID();
 
     CoordinatedLayerTreeHost::sizeDidChange(size);

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/CoordinatedGraphics/ThreadedCoordinatedLayerTreeHost.h	2018-10-28 13:44:03 UTC (rev 237518)
@@ -91,6 +91,12 @@
             m_layerTreeHost.didDestroyGLContext();
         }
 
+        void resize(const IntSize& size)
+        {
+            if (m_layerTreeHost.m_surface)
+                m_layerTreeHost.m_surface->clientResize(size);
+        }
+
         void willRenderFrame() override
         {
             m_layerTreeHost.willRenderFrame();

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.cpp	2018-10-28 13:44:03 UTC (rev 237518)
@@ -57,13 +57,9 @@
     wl_egl_window_destroy(m_window);
 }
 
-bool AcceleratedSurfaceWayland::resize(const IntSize& size)
+void AcceleratedSurfaceWayland::clientResize(const IntSize& size)
 {
-    if (!AcceleratedSurface::resize(size))
-        return false;
-
     wl_egl_window_resize(m_window, m_size.width(), m_size.height(), 0, 0);
-    return true;
 }
 
 void AcceleratedSurfaceWayland::didRenderFrame()

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceWayland.h	2018-10-28 13:44:03 UTC (rev 237518)
@@ -42,7 +42,7 @@
 
     uint64_t window() const override { return reinterpret_cast<uint64_t>(m_window); }
     uint64_t surfaceID() const override { return m_webPage.pageID(); }
-    bool resize(const WebCore::IntSize&) override;
+    void clientResize(const WebCore::IntSize&) override;
     bool shouldPaintMirrored() const override { return true; }
 
     void initialize() override;

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceX11.cpp	2018-10-28 13:44:03 UTC (rev 237518)
@@ -133,9 +133,9 @@
     XSync(m_display, False);
 }
 
-bool AcceleratedSurfaceX11::resize(const IntSize& size)
+bool AcceleratedSurfaceX11::hostResize(const IntSize& size)
 {
-    if (!AcceleratedSurface::resize(size))
+    if (!AcceleratedSurface::hostResize(size))
         return false;
 
     // Resize the window to at last 1x1 since X doesn't allow to create empty windows.

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/gtk/AcceleratedSurfaceX11.h	2018-10-28 13:44:03 UTC (rev 237518)
@@ -46,7 +46,7 @@
 
     uint64_t window() const override { return m_window.get(); }
     uint64_t surfaceID() const override { return m_pixmap.get(); }
-    bool resize(const WebCore::IntSize&) override;
+    bool hostResize(const WebCore::IntSize&) override;
     bool shouldPaintMirrored() const override { return false; }
 
     void didRenderFrame() override;

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.cpp	2018-10-28 13:44:03 UTC (rev 237518)
@@ -92,15 +92,10 @@
     return m_webPage.pageID();
 }
 
-bool AcceleratedSurfaceWPE::resize(const IntSize& size)
+void AcceleratedSurfaceWPE::clientResize(const IntSize& size)
 {
     ASSERT(m_backend);
-    if (!AcceleratedSurface::resize(size))
-        return false;
-
     wpe_renderer_backend_egl_target_resize(m_backend, std::max(0, m_size.width()), std::max(0, m_size.height()));
-
-    return true;
 }
 
 void AcceleratedSurfaceWPE::willRenderFrame()

Modified: releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.h (237517 => 237518)


--- releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.h	2018-10-28 13:43:52 UTC (rev 237517)
+++ releases/WebKitGTK/webkit-2.22/Source/WebKit/WebProcess/WebPage/wpe/AcceleratedSurfaceWPE.h	2018-10-28 13:44:03 UTC (rev 237518)
@@ -44,7 +44,7 @@
 
     uint64_t window() const override;
     uint64_t surfaceID() const override;
-    bool resize(const WebCore::IntSize&) override;
+    void clientResize(const WebCore::IntSize&) override;
     bool shouldPaintMirrored() const override { return false; }
 
     void initialize() override;
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to