From d4d76448d23b2034df46c9e9396e57016ea62325 Mon Sep 17 00:00:00 2001 From: stransky Date: Mon, 8 Apr 2024 09:16:40 +0000 Subject: [PATCH] Bug 1885831 [Wayland] Skip EGL window size changes and disable rendering of it if compositor is paused after scale change r=emilio Skip rendering of EGL window right after scale changes. MESA backend contains old back / front buffers and we need to recreate them for new scale at ResumeCompositorFlickering(). Differential Revision: https://phabricator.services.mozilla.com/D206757 --- widget/gtk/nsWindow.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp index 727cdb91c322..fa2fcc03df90 100644 --- a/widget/gtk/nsWindow.cpp +++ b/widget/gtk/nsWindow.cpp @@ -6580,8 +6580,8 @@ void nsWindow::PauseCompositorFlickering() { CompositorBridgeChild* remoteRenderer = GetRemoteRenderer(); if (remoteRenderer) { - remoteRenderer->SendPause(); mCompositorState = COMPOSITOR_PAUSED_FLICKERING; + remoteRenderer->SendPause(); mCompositorPauseTimeoutID = (int)g_timeout_add( COMPOSITOR_PAUSE_TIMEOUT, [](void* data) -> gint { @@ -9970,6 +9970,12 @@ bool nsWindow::SetEGLNativeWindowSize( return true; } + if (mCompositorState == COMPOSITOR_PAUSED_FLICKERING) { + LOG("nsWindow::SetEGLNativeWindowSize() return, " + "COMPOSITOR_PAUSED_FLICKERING is set"); + return false; + } + gint scale = GdkCeiledScaleFactor(); # ifdef MOZ_LOGGING if (LOG_ENABLED()) {