- 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;