From 8d06c8b3e1b581623d756e524ead56d0a427725c Mon Sep 17 00:00:00 2001 From: Martin Stransky Date: Fri, 15 Jan 2021 10:23:50 +0100 Subject: Added WebRender fix (mozbz#1681107). --- mozilla-1681107.patch | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 mozilla-1681107.patch (limited to 'mozilla-1681107.patch') diff --git a/mozilla-1681107.patch b/mozilla-1681107.patch new file mode 100644 index 0000000..e228e35 --- /dev/null +++ b/mozilla-1681107.patch @@ -0,0 +1,47 @@ + +# HG changeset patch +# User sotaro +# Date 1610634595 0 +# Node ID c989e16ae8d0801b76efe712658abcbf3704a486 +# Parent dc0d1d98e111aa781333980c2561f534ea1ebb0b +Bug 1681107 - Fix race condition of calling CompositorBridgeChild::SendPause() r=rmader,stransky + +Differential Revision: https://phabricator.services.mozilla.com/D101693 + +diff --git a/widget/gtk/nsWindow.cpp b/widget/gtk/nsWindow.cpp +--- a/widget/gtk/nsWindow.cpp ++++ b/widget/gtk/nsWindow.cpp +@@ -5085,23 +5085,29 @@ void nsWindow::NativeMoveResize() { + if (mNeedsShow && mIsShown) { + NativeShow(true); + } + } + + void nsWindow::PauseRemoteRenderer() { + #ifdef MOZ_WAYLAND + if (!mIsDestroyed) { +- if (mContainer && moz_container_wayland_has_egl_window(mContainer)) { ++ if (mContainer) { + // Because wl_egl_window is destroyed on moz_container_unmap(), + // the current compositor cannot use it anymore. To avoid crash, + // pause the compositor and destroy EGLSurface & resume the compositor + // and re-create EGLSurface on next expose event. +- MOZ_ASSERT(GetRemoteRenderer()); +- if (CompositorBridgeChild* remoteRenderer = GetRemoteRenderer()) { ++ ++ // moz_container_wayland_has_egl_window() could not be used here, since ++ // there is a case that resume compositor is not completed yet. ++ ++ CompositorBridgeChild* remoteRenderer = GetRemoteRenderer(); ++ bool needsCompositorPause = !mNeedsCompositorResume && !!remoteRenderer && ++ mCompositorWidgetDelegate; ++ if (needsCompositorPause) { + // XXX slow sync IPC + remoteRenderer->SendPause(); + // Re-request initial draw callback + RefPtr self(this); + moz_container_wayland_add_initial_draw_callback( + mContainer, [self]() -> void { + self->mNeedsCompositorResume = true; + self->MaybeResumeCompositor(); + -- cgit