mozilla-bmo1744896.patch
branchfirefox95
changeset 1169 7481543bab31
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/mozilla-bmo1744896.patch	Sat Jan 08 10:41:19 2022 +0100
@@ -0,0 +1,43 @@
+diff -up firefox-95.0.2/widget/gtk/nsWindow.cpp.1744896 firefox-95.0.2/widget/gtk/nsWindow.cpp
+--- firefox-95.0.2/widget/gtk/nsWindow.cpp.1744896	2021-12-23 11:54:31.522539340 +0100
++++ firefox-95.0.2/widget/gtk/nsWindow.cpp	2021-12-23 11:55:56.070270174 +0100
+@@ -5765,6 +5765,17 @@ nsresult nsWindow::Create(nsIWidget* aPa
+       }
+     }
+ #endif
++#ifdef MOZ_WAYLAND
++  // Initialize the window specific VsyncSource early in order to avoid races
++  // with BrowserParent::UpdateVsyncParentVsyncSource().
++  // Only use for toplevel windows for now, see bug 1619246.
++  if (GdkIsWaylandDisplay() &&
++      StaticPrefs::widget_wayland_vsync_enabled_AtStartup() &&
++      mWindowType == eWindowType_toplevel) {
++    mWaylandVsyncSource = new WaylandVsyncSource();
++    MOZ_RELEASE_ASSERT(mWaylandVsyncSource);
++  }
++#endif
+ 
+     // We create input contexts for all containers, except for
+     // toplevel popup windows
+@@ -6077,19 +6088,12 @@ void nsWindow::ResumeCompositorFromCompo
+ 
+ void nsWindow::WaylandStartVsync() {
+ #ifdef MOZ_WAYLAND
+-  // only use for toplevel windows for now - see bug 1619246
+-  if (!GdkIsWaylandDisplay() ||
+-      !StaticPrefs::widget_wayland_vsync_enabled_AtStartup() ||
+-      mWindowType != eWindowType_toplevel) {
++  if (!mWaylandVsyncSource) {
+     return;
+   }
+ 
+   LOG("nsWindow::WaylandStartVsync() [%p]\n", (void*)this);
+ 
+-  if (!mWaylandVsyncSource) {
+-    mWaylandVsyncSource = new WaylandVsyncSource();
+-  }
+-
+   WaylandVsyncSource::WaylandDisplay& display =
+       static_cast<WaylandVsyncSource::WaylandDisplay&>(
+           mWaylandVsyncSource->GetGlobalDisplay());
+