diff -Nru mutter-45.0/debian/changelog mutter-45.0/debian/changelog --- mutter-45.0/debian/changelog 2023-09-22 15:27:59.000000000 +0000 +++ mutter-45.0/debian/changelog 2023-10-05 18:29:32.000000000 +0000 @@ -1,3 +1,50 @@ +mutter (45.0-3ubuntu3) mantic; urgency=medium + + * Update build autopkgtest to not run dh_auto_test (LP: #2038564) + + -- Jeremy Bícha Thu, 05 Oct 2023 14:29:32 -0400 + +mutter (45.0-3ubuntu2) mantic; urgency=medium + + [ Jeremy Bícha ] + * Cherry-pick 2 commits to fix vsync (LP: #2037235) + + [ Daniel van Vugt ] + * Add patch to fix GNOME Shell getting SIGKILL'd under heavy load + or screen locked under Wayland with AMD GPUs (LP: #2034619) + + -- Jeremy Bícha Wed, 04 Oct 2023 11:00:14 -0400 + +mutter (45.0-3ubuntu1) mantic; urgency=medium + + * Merge with Debian. Remaining changes: + - Add x11-Add-support-for-fractional-scaling-using-Randr.patch + - Add window-Add-ability-to-override-the-edge-constraints.patch + + Make possible for extensions (such as Tiling Assistant) to override + window constraints + + -- Jeremy Bícha Tue, 03 Oct 2023 18:43:15 -0400 + +mutter (45.0-3) experimental; urgency=medium + + [ Simon McVittie ] + * Merge packaging from 44.5-2 in unstable. + - Add versioned Build-Depends/Breaks to ensure Xwayland supports + the -byteswappedclients option (Closes: #1050642) + - All changes to the upstream code were already included in 45.0-1 + or earlier + + [ Daniel van Vugt ] + * Add kms-crtc-Increase-default-deadline-evasion-to-800-microse.patch + to fix cursor stuttering on low/normal frequency mice and touchpads + (LP: #2033719). The same patch is already merged into 45.1 upstream. + + [ Jeremy Bícha ] + * Add autopkgtest to ensure mutter is still buildable (LP: #1993226) + * Cherry-pick 2 more future 45.1 commits to fix crashes + + -- Jeremy Bícha Tue, 03 Oct 2023 18:38:45 -0400 + mutter (45.0-2ubuntu1) mantic; urgency=medium * Merge with Debian. Remaining changes: @@ -164,6 +211,50 @@ -- Jeremy Bícha Thu, 17 Aug 2023 13:25:40 -0400 +mutter (44.5-2) unstable; urgency=medium + + * Team upload + * d/patches: Update to gnome-44 branch commit 44.5-6-g0173cfffcd + - Backport a change from 45~alpha to fix an intermittent crash in the + closeWithActiveWindows test (mutter#6808) + - Backport a change from 45~beta to fix clicks not always taking effect + (mutter#2918) + - Backport a change from 45~rc to fix an uninitialized memory read + (mutter#2964) + - Backport a change from 45~rc to fix a crash (mutter#2978) + - These changes also fix a crash while restarting gnome-shell in X11 + mode with Alt+F2, "r" (mutter#2977, another possible cause + for the symptoms seen in #1050502) + * Add versioned Build-Depends/Breaks to ensure Xwayland supports + the -byteswappedclients option (Closes: #1050642) + + -- Simon McVittie Mon, 25 Sep 2023 10:14:07 +0100 + +mutter (44.5-1) unstable; urgency=medium + + * New upstream release + - Fix redraw issue when buffer age is unavailable + (regression in 44.1, mutter#2771) + - Fix crash during GNOME Shell restart in Xorg mode + (mutter#2852, mutter!3247; Closes: #1050502) + - Fix unresponsive touchscreen after titlebar drag when using a + touchscreen (mutter#2836) + - Fix some XWayland windows not getting mapped + (regression in 44.1, mutter#2965, mutter#2820, mutter#2867) + - Avoid a possible crash while changing monitor layout + (regression in 44.1, mutter!3229) + - Correct a check for monitor portrait orientation when choosing + whether to allow tiling (mutter!3199, mutter!3248) + - Other crash fixes were included in 44.4-3 already + * d/watch: Only watch for v44.x + * d/patches: Drop patches that were applied upstream + * d/p/x11-events-NULL-Check-input-event-when-getting-name.patch: + Add patch from upstream 45~alpha to avoid a crash when being + profiled with sysprof 45~rc (mutter#3030) + * d/libmutter-12-0.symbols: Update + + -- Simon McVittie Sun, 17 Sep 2023 16:54:02 +0100 + mutter (44.4-3) unstable; urgency=medium * Team upload diff -Nru mutter-45.0/debian/control mutter-45.0/debian/control --- mutter-45.0/debian/control 2023-09-22 15:27:59.000000000 +0000 +++ mutter-45.0/debian/control 2023-10-05 18:29:32.000000000 +0000 @@ -88,7 +88,7 @@ xcvt [linux-any], xkb-data, xvfb, - xwayland [linux-any], + xwayland (>= 2:23.1.0) [linux-any], zenity Rules-Requires-Root: no Standards-Version: 4.6.2 @@ -135,7 +135,7 @@ python3-dbusmock, xauth, xvfb, - xwayland [linux-any], + xwayland (>= 2:23.1.0) [linux-any], ${misc:Depends}, ${shlibs:Depends} Description: Tests for GNOME's window manager library @@ -188,7 +188,8 @@ gnome-settings-daemon (<< 3.31.101), gnome-shell (<< 45~rc), libgtk-3-0 (<< 3.24.33-2~), - libgtk-4-1 (<< 4.6.3+ds1-2~) + libgtk-4-1 (<< 4.6.3+ds1-2~), + xwayland (<< 2:23.1.0), Description: window manager library from the Mutter window manager Mutter is a Wayland display server and X11 window manager and compositor library. It contains functionality related to, among other diff -Nru mutter-45.0/debian/control.in mutter-45.0/debian/control.in --- mutter-45.0/debian/control.in 2023-09-22 15:27:59.000000000 +0000 +++ mutter-45.0/debian/control.in 2023-10-05 18:29:32.000000000 +0000 @@ -84,7 +84,7 @@ xcvt [linux-any], xkb-data, xvfb, - xwayland [linux-any], + xwayland (>= 2:23.1.0) [linux-any], zenity Rules-Requires-Root: no Standards-Version: 4.6.2 @@ -131,7 +131,7 @@ python3-dbusmock, xauth, xvfb, - xwayland [linux-any], + xwayland (>= 2:23.1.0) [linux-any], ${misc:Depends}, ${shlibs:Depends} Description: Tests for GNOME's window manager library @@ -184,7 +184,8 @@ gnome-settings-daemon (<< 3.31.101), gnome-shell (<< 45~rc), libgtk-3-0 (<< 3.24.33-2~), - libgtk-4-1 (<< 4.6.3+ds1-2~) + libgtk-4-1 (<< 4.6.3+ds1-2~), + xwayland (<< 2:23.1.0), Description: window manager library from the Mutter window manager Mutter is a Wayland display server and X11 window manager and compositor library. It contains functionality related to, among other diff -Nru mutter-45.0/debian/patches/clutter-actor-Cache-stage-relative-instead-of-absolute-mo.patch mutter-45.0/debian/patches/clutter-actor-Cache-stage-relative-instead-of-absolute-mo.patch --- mutter-45.0/debian/patches/clutter-actor-Cache-stage-relative-instead-of-absolute-mo.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutter-45.0/debian/patches/clutter-actor-Cache-stage-relative-instead-of-absolute-mo.patch 2023-10-05 18:29:32.000000000 +0000 @@ -0,0 +1,155 @@ +From: Robert Mader +Date: Sun, 17 Sep 2023 12:40:12 +0200 +Subject: clutter/actor: Cache stage-relative instead of absolute modelviews + +The absolute modelview contains OpenGL coordinates, which have a higher +chance to not be invertible or, when doing so, introduce rounding +errors. These again often result in relative transforms becoming 3D +instead of 2D, making us miss optimized code paths down the line. + +Thus cache stage-relative matrices instead, improving correctness and +possibly performance. + +While on it also add some fast paths for cases where we can skip +calculating inverted matrices altogether and change variable names to be +more precise. + +Fixes: dfd58ca8f1 ("clutter/actor: Extend caching in apply_relative_transformation_matrix") +Part-of: +(cherry picked from commit 703bbe0e99dbb688352e0bff396e5cbf2c6af45b) + +Origin: upstream, after 45.0 +--- + clutter/clutter/clutter-actor.c | 67 +++++++++++++++++++++++++++++------------ + 1 file changed, 47 insertions(+), 20 deletions(-) + +diff --git a/clutter/clutter/clutter-actor.c b/clutter/clutter/clutter-actor.c +index cffb315..8f54c61 100644 +--- a/clutter/clutter/clutter-actor.c ++++ b/clutter/clutter/clutter-actor.c +@@ -612,7 +612,7 @@ struct _ClutterActorPrivate + /* the cached transformation matrix; see apply_transform() */ + graphene_matrix_t transform; + +- graphene_matrix_t absolute_modelview; ++ graphene_matrix_t stage_relative_modelview; + + float resource_scale; + +@@ -776,7 +776,7 @@ struct _ClutterActorPrivate + guint clear_stage_views_needs_stage_views_changed : 1; + guint needs_redraw : 1; + guint needs_finish_layout : 1; +- guint absolute_modelview_valid : 1; ++ guint stage_relative_modelview_valid : 1; + }; + + enum +@@ -2420,7 +2420,7 @@ absolute_geometry_changed (ClutterActor *actor) + { + actor->priv->needs_update_stage_views = TRUE; + actor->priv->needs_visible_paint_volume_update = TRUE; +- actor->priv->absolute_modelview_valid = FALSE; ++ actor->priv->stage_relative_modelview_valid = FALSE; + + actor->priv->needs_finish_layout = TRUE; + /* needs_finish_layout is already TRUE on the whole parent tree thanks +@@ -3046,8 +3046,9 @@ _clutter_actor_apply_relative_transformation_matrix (ClutterActor *self, + graphene_matrix_t *matrix) + { + ClutterActorPrivate *priv = self->priv; +- graphene_matrix_t parent_modelview; +- graphene_matrix_t inverse_parent_modelview; ++ ClutterActor *stage = _clutter_actor_get_stage_internal (self); ++ graphene_matrix_t ancestor_modelview; ++ graphene_matrix_t inverse_ancestor_modelview; + + /* Note we terminate before ever calling stage->apply_transform() + * since that would conceptually be relative to the underlying +@@ -3056,37 +3057,63 @@ _clutter_actor_apply_relative_transformation_matrix (ClutterActor *self, + if (self == ancestor) + return; + +- if (!priv->absolute_modelview_valid) ++ if (!priv->stage_relative_modelview_valid) + { +- graphene_matrix_init_identity (&priv->absolute_modelview); ++ graphene_matrix_init_identity (&priv->stage_relative_modelview); + + if (priv->parent != NULL) + { + _clutter_actor_apply_relative_transformation_matrix (priv->parent, +- NULL, +- &priv->absolute_modelview); ++ stage, ++ &priv->stage_relative_modelview); + } + +- _clutter_actor_apply_modelview_transform (self, &priv->absolute_modelview); ++ _clutter_actor_apply_modelview_transform (self, ++ &priv->stage_relative_modelview); + +- priv->absolute_modelview_valid = TRUE; ++ priv->stage_relative_modelview_valid = TRUE; + } + + if (ancestor == NULL) + { +- graphene_matrix_multiply (&priv->absolute_modelview, matrix, matrix); ++ _clutter_actor_apply_modelview_transform (stage, matrix); ++ graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix); ++ return; ++ } ++ ++ if (ancestor == stage) ++ { ++ graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix); ++ return; ++ } ++ ++ if (ancestor == priv->parent) ++ { ++ _clutter_actor_apply_modelview_transform (self, matrix); + return; + } + +- graphene_matrix_init_identity (&parent_modelview); ++ graphene_matrix_init_identity (&ancestor_modelview); + _clutter_actor_apply_relative_transformation_matrix (ancestor, +- NULL, +- &parent_modelview); +- if (graphene_matrix_inverse (&parent_modelview, +- &inverse_parent_modelview)) ++ stage, ++ &ancestor_modelview); ++ ++ if (graphene_matrix_near (&priv->stage_relative_modelview, ++ &ancestor_modelview, ++ FLT_EPSILON)) ++ return; ++ ++ if (graphene_matrix_is_identity (&ancestor_modelview)) ++ { ++ graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix); ++ return; ++ } ++ ++ if (graphene_matrix_inverse (&ancestor_modelview, ++ &inverse_ancestor_modelview)) + { +- graphene_matrix_multiply (&inverse_parent_modelview, matrix, matrix); +- graphene_matrix_multiply (&priv->absolute_modelview, matrix, matrix); ++ graphene_matrix_multiply (&inverse_ancestor_modelview, matrix, matrix); ++ graphene_matrix_multiply (&priv->stage_relative_modelview, matrix, matrix); + return; + } + +@@ -7446,7 +7473,7 @@ clutter_actor_init (ClutterActor *self) + priv->enable_model_view_transform = TRUE; + + priv->transform_valid = FALSE; +- priv->absolute_modelview_valid = FALSE; ++ priv->stage_relative_modelview_valid = FALSE; + + /* the default is to stretch the content, to match the + * current behaviour of basically all actors. also, it's diff -Nru mutter-45.0/debian/patches/clutter-paint-volume-Avoid-amplifying-small-floating-poin.patch mutter-45.0/debian/patches/clutter-paint-volume-Avoid-amplifying-small-floating-poin.patch --- mutter-45.0/debian/patches/clutter-paint-volume-Avoid-amplifying-small-floating-poin.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutter-45.0/debian/patches/clutter-paint-volume-Avoid-amplifying-small-floating-poin.patch 2023-10-05 18:29:32.000000000 +0000 @@ -0,0 +1,30 @@ +From: Robert Mader +Date: Mon, 18 Sep 2023 20:40:45 +0200 +Subject: clutter/paint-volume: Avoid amplifying small floating-point errors + +In order to avoid adding whole pixels to paint boxes in case of small +floating point errors. + +Part-of: +(cherry picked from commit a3b4d2dfc9e0a53cdd3850bc5ae3528564cd10a8) + +Origin: upstream, after 45.0 +--- + clutter/clutter/clutter-paint-volume.c | 4 ++++ + 1 file changed, 4 insertions(+) + +diff --git a/clutter/clutter/clutter-paint-volume.c b/clutter/clutter/clutter-paint-volume.c +index cf72557..a667ffd 100644 +--- a/clutter/clutter/clutter-paint-volume.c ++++ b/clutter/clutter/clutter-paint-volume.c +@@ -1069,6 +1069,10 @@ _clutter_paint_volume_get_stage_paint_box (const ClutterPaintVolume *pv, + * in this case. + */ + clutter_paint_volume_free (&projected_pv); ++ clutter_round_to_256ths (&box->x1); ++ clutter_round_to_256ths (&box->y1); ++ clutter_round_to_256ths (&box->x2); ++ clutter_round_to_256ths (&box->y2); + box->x1 = floorf (box->x1); + box->y1 = floorf (box->y1); + box->x2 = ceilf (box->x2); diff -Nru mutter-45.0/debian/patches/core-Do-not-repick-pointer-while-syncing-wayland-foci.patch mutter-45.0/debian/patches/core-Do-not-repick-pointer-while-syncing-wayland-foci.patch --- mutter-45.0/debian/patches/core-Do-not-repick-pointer-while-syncing-wayland-foci.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutter-45.0/debian/patches/core-Do-not-repick-pointer-while-syncing-wayland-foci.patch 2023-10-05 18:29:32.000000000 +0000 @@ -0,0 +1,44 @@ +From: Carlos Garnacho +Date: Mon, 18 Sep 2023 10:26:47 +0200 +Subject: core: Do not repick pointer while syncing wayland foci + +This is a remnant of unreliable pointer state after some of the +event grabbing conditions (originally introduced for window dragging +at commit 1b29113150). Since the introduction of ClutterGrab +and implicit grabs generating crossing events when the conditions +change, this is not necessary. + +Related: https://gitlab.gnome.org/GNOME/mutter/-/issues/2977 +Part-of: +(cherry picked from commit 39f599018cdc27480db1deea92cc451506a37a5f) + +Origin: upstream, after 45.0 +--- + src/core/display.c | 7 ------- + 1 file changed, 7 deletions(-) + +diff --git a/src/core/display.c b/src/core/display.c +index 3000ab8..0a191c0 100644 +--- a/src/core/display.c ++++ b/src/core/display.c +@@ -1480,10 +1480,6 @@ meta_display_sync_wayland_input_focus (MetaDisplay *display) + #ifdef HAVE_WAYLAND + MetaWaylandCompositor *compositor = wayland_compositor_from_display (display); + MetaWindow *focus_window = NULL; +- MetaBackend *backend = backend_from_display (display); +- ClutterBackend *clutter_backend = meta_backend_get_clutter_backend (backend); +- ClutterSeat *seat = clutter_backend_get_default_seat (clutter_backend); +- MetaStage *stage = META_STAGE (meta_backend_get_stage (backend)); + gboolean is_no_focus_xwindow = FALSE; + + #ifdef HAVE_X11_CLIENT +@@ -1503,9 +1499,6 @@ meta_display_sync_wayland_input_focus (MetaDisplay *display) + meta_topic (META_DEBUG_FOCUS, "Focus change has no effect, because there is no matching wayland surface"); + + meta_wayland_compositor_set_input_focus (compositor, focus_window); +- +- clutter_stage_repick_device (CLUTTER_STAGE (stage), +- clutter_seat_get_pointer (seat)); + #endif + } + diff -Nru mutter-45.0/debian/patches/debian/Support-Dynamic-triple-double-buffering.patch mutter-45.0/debian/patches/debian/Support-Dynamic-triple-double-buffering.patch --- mutter-45.0/debian/patches/debian/Support-Dynamic-triple-double-buffering.patch 2023-09-22 15:27:59.000000000 +0000 +++ mutter-45.0/debian/patches/debian/Support-Dynamic-triple-double-buffering.patch 2023-10-05 18:29:32.000000000 +0000 @@ -1,5 +1,5 @@ -From: =?utf-8?q?Jeremy_B=C3=ADcha?= -Date: Fri, 22 Sep 2023 10:41:14 -0400 +From: Daniel van Vugt +Date: Wed, 10 Nov 2021 18:55:53 +0800 Subject: Support Dynamic triple/double buffering Use triple buffering if and when the previous frame is running late. diff -Nru mutter-45.0/debian/patches/kms-crtc-Increase-default-deadline-evasion-to-800-microse.patch mutter-45.0/debian/patches/kms-crtc-Increase-default-deadline-evasion-to-800-microse.patch --- mutter-45.0/debian/patches/kms-crtc-Increase-default-deadline-evasion-to-800-microse.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutter-45.0/debian/patches/kms-crtc-Increase-default-deadline-evasion-to-800-microse.patch 2023-10-05 18:29:32.000000000 +0000 @@ -0,0 +1,30 @@ +From: Daniel van Vugt +Date: Fri, 25 Aug 2023 14:26:56 +0800 +Subject: kms/crtc: Increase default deadline evasion to 800 microseconds + +This seems to be enough to fix: + * Constant stuttering on Apple Magic Trackpad 2 (90Hz) + * Constant stuttering on Microsoft IntelliMouse Explorer 3.0 (125Hz) + * Wake-from-idle frame skips on Microsoft Classic IntelliMouse (1000Hz) + +Bug: https://gitlab.gnome.org/GNOME/mutter/-/issues/2974 +Bug-Ubuntu: https://launchpad.net/bugs/2033719 +Forwarded: yes +Last-Update: 2023-09-27 +--- + src/backends/native/meta-kms-crtc.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/backends/native/meta-kms-crtc.c b/src/backends/native/meta-kms-crtc.c +index 932e5e6..b17e846 100644 +--- a/src/backends/native/meta-kms-crtc.c ++++ b/src/backends/native/meta-kms-crtc.c +@@ -28,7 +28,7 @@ + #include "backends/native/meta-kms-update-private.h" + #include "backends/native/meta-kms-utils.h" + +-#define DEADLINE_EVASION_US 500 ++#define DEADLINE_EVASION_US 800 + #define DEADLINE_EVASION_WITH_KMS_TOPIC_US 1000 + + typedef struct _MetaKmsCrtcPropTable diff -Nru mutter-45.0/debian/patches/kms-impl-device-Inhibit-deadline-timer-on-amdgpu.patch mutter-45.0/debian/patches/kms-impl-device-Inhibit-deadline-timer-on-amdgpu.patch --- mutter-45.0/debian/patches/kms-impl-device-Inhibit-deadline-timer-on-amdgpu.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutter-45.0/debian/patches/kms-impl-device-Inhibit-deadline-timer-on-amdgpu.patch 2023-10-05 18:29:32.000000000 +0000 @@ -0,0 +1,36 @@ +From: Daniel van Vugt +Date: Tue, 19 Sep 2023 17:39:07 +0800 +Subject: kms/impl-device: Inhibit deadline timer on amdgpu + +Recent AMD Ryzen systems are experiencing a problem whereby gnome-shell +gets SIGKILLed by the kernel. It seems to be related to a violation of +RLIMIT_RTTIME in the KMS thread. + +This is the simplest/safest workaround we have right now. Longer term +we would like to: + +1. Find out what call is blocking in amdgpu to trigger it; and +2. Graceful handling of SIGXCPU before SIGKILL happens. + +https://launchpad.net/bugs/2034619 +https://gitlab.freedesktop.org/drm/amd/-/issues/2861 + +Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3037 + +Forwarded: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3291 +--- + src/backends/native/meta-kms-impl-device.c | 1 + + 1 file changed, 1 insertion(+) + +diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c +index 972873a..56d493b 100644 +--- a/src/backends/native/meta-kms-impl-device.c ++++ b/src/backends/native/meta-kms-impl-device.c +@@ -1902,6 +1902,7 @@ maybe_inhibit_deadline_timer (MetaKmsImplDevice *impl_device) + MetaKmsImplDevicePrivate *priv = + meta_kms_impl_device_get_instance_private (impl_device); + static const char *deadline_timer_deny_list[] = { ++ "amdgpu", + "vc4", + }; + int i; diff -Nru mutter-45.0/debian/patches/screen-cast-stream-Pass-redraw-clip-to-stage-watches-inst.patch mutter-45.0/debian/patches/screen-cast-stream-Pass-redraw-clip-to-stage-watches-inst.patch --- mutter-45.0/debian/patches/screen-cast-stream-Pass-redraw-clip-to-stage-watches-inst.patch 1970-01-01 00:00:00.000000000 +0000 +++ mutter-45.0/debian/patches/screen-cast-stream-Pass-redraw-clip-to-stage-watches-inst.patch 2023-10-05 18:29:32.000000000 +0000 @@ -0,0 +1,255 @@ +From: =?utf-8?q?Jonas_Dre=C3=9Fler?= +Date: Fri, 15 Sep 2023 18:54:37 +0200 +Subject: screen-cast/stream: Pass redraw clip to stage watches instead of + paint context + +The virtual stream source with CURSOR_MODE_EMBEDDED uses +META_STAGE_WATCH_AFTER_PAINT as the callback for recording its frame. In +this stage of the paint though, there is no ClutterPaintContext anymore +(there only is a paint context during the paint, not afterwards). +The callback (actors_painted()) tries to get the redraw clip from the paint +context, and we end up with a NULL pointer crash. + +We actually do still have a redraw clip at this point, so because everyone +uses the paint context to get the redraw clip anyway, just pass the redraw +clip to the stage watches directly. + +Part-of: +(cherry picked from commit c4b9431bb222e7f2f02fd7c1f3062dad6a71acfd) + +Origin: upstream, after 45.0 +--- + src/backends/meta-screen-cast-area-stream-src.c | 22 ++++++++++------------ + src/backends/meta-screen-cast-monitor-stream-src.c | 20 ++++++++++---------- + src/backends/meta-screen-cast-virtual-stream-src.c | 12 +++++------- + src/backends/meta-stage-private.h | 10 +++++----- + src/backends/meta-stage.c | 20 +++++++++++--------- + src/tests/meta-ref-test.c | 10 +++++----- + 6 files changed, 46 insertions(+), 48 deletions(-) + +diff --git a/src/backends/meta-screen-cast-area-stream-src.c b/src/backends/meta-screen-cast-area-stream-src.c +index 5dd01c9..957074b 100644 +--- a/src/backends/meta-screen-cast-area-stream-src.c ++++ b/src/backends/meta-screen-cast-area-stream-src.c +@@ -243,11 +243,11 @@ maybe_record_frame_on_idle (gpointer user_data) + } + + static void +-before_stage_painted (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- gpointer user_data) ++before_stage_painted (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ gpointer user_data) + { + MetaScreenCastAreaStreamSrc *area_src = + META_SCREEN_CAST_AREA_STREAM_SRC (user_data); +@@ -263,25 +263,23 @@ before_stage_painted (MetaStage *stage, + } + + static void +-stage_painted (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- gpointer user_data) ++stage_painted (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ gpointer user_data) + { + MetaScreenCastAreaStreamSrc *area_src = + META_SCREEN_CAST_AREA_STREAM_SRC (user_data); + MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (area_src); + MetaScreenCastStream *stream = meta_screen_cast_stream_src_get_stream (src); + MetaScreenCastAreaStream *area_stream = META_SCREEN_CAST_AREA_STREAM (stream); +- const cairo_region_t *redraw_clip; + MtkRectangle *area; + + if (area_src->maybe_record_idle_id) + return; + + area = meta_screen_cast_area_stream_get_area (area_stream); +- redraw_clip = clutter_paint_context_get_redraw_clip (paint_context); + + if (redraw_clip) + { +diff --git a/src/backends/meta-screen-cast-monitor-stream-src.c b/src/backends/meta-screen-cast-monitor-stream-src.c +index 41f3a80..9f6eedd 100644 +--- a/src/backends/meta-screen-cast-monitor-stream-src.c ++++ b/src/backends/meta-screen-cast-monitor-stream-src.c +@@ -147,11 +147,11 @@ maybe_record_frame_on_idle (gpointer user_data) + } + + static void +-stage_painted (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- gpointer user_data) ++stage_painted (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ gpointer user_data) + { + MetaScreenCastMonitorStreamSrc *monitor_src = + META_SCREEN_CAST_MONITOR_STREAM_SRC (user_data); +@@ -187,11 +187,11 @@ stage_painted (MetaStage *stage, + } + + static void +-before_stage_painted (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- gpointer user_data) ++before_stage_painted (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ gpointer user_data) + { + MetaScreenCastMonitorStreamSrc *monitor_src = + META_SCREEN_CAST_MONITOR_STREAM_SRC (user_data); +diff --git a/src/backends/meta-screen-cast-virtual-stream-src.c b/src/backends/meta-screen-cast-virtual-stream-src.c +index 2047485..ebe9db3 100644 +--- a/src/backends/meta-screen-cast-virtual-stream-src.c ++++ b/src/backends/meta-screen-cast-virtual-stream-src.c +@@ -194,18 +194,16 @@ uninhibit_hw_cursor (MetaScreenCastVirtualStreamSrc *virtual_src) + } + + static void +-actors_painted (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- gpointer user_data) ++actors_painted (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ gpointer user_data) + { + MetaScreenCastStreamSrc *src = META_SCREEN_CAST_STREAM_SRC (user_data); + MetaScreenCastRecordFlag flags; +- const cairo_region_t *redraw_clip = NULL; + + flags = META_SCREEN_CAST_RECORD_FLAG_NONE; +- redraw_clip = clutter_paint_context_get_redraw_clip (paint_context); + meta_screen_cast_stream_src_maybe_record_frame (src, flags, redraw_clip); + } + +diff --git a/src/backends/meta-stage-private.h b/src/backends/meta-stage-private.h +index f547e39..d3d777d 100644 +--- a/src/backends/meta-stage-private.h ++++ b/src/backends/meta-stage-private.h +@@ -36,11 +36,11 @@ typedef enum + META_STAGE_WATCH_AFTER_PAINT, + } MetaStageWatchPhase; + +-typedef void (* MetaStageWatchFunc) (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- gpointer user_data); ++typedef void (* MetaStageWatchFunc) (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ gpointer user_data); + + ClutterActor *meta_stage_new (MetaBackend *backend); + +diff --git a/src/backends/meta-stage.c b/src/backends/meta-stage.c +index 7c4de5f..90ef10a 100644 +--- a/src/backends/meta-stage.c ++++ b/src/backends/meta-stage.c +@@ -175,11 +175,11 @@ meta_stage_finalize (GObject *object) + } + + static void +-notify_watchers_for_mode (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- MetaStageWatchPhase watch_phase) ++notify_watchers_for_mode (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ MetaStageWatchPhase watch_phase) + { + GPtrArray *watchers; + int i; +@@ -193,7 +193,7 @@ notify_watchers_for_mode (MetaStage *stage, + if (watch->view && view != watch->view) + continue; + +- watch->callback (stage, view, paint_context, frame, watch->user_data); ++ watch->callback (stage, view, redraw_clip, frame, watch->user_data); + } + } + +@@ -215,14 +215,16 @@ meta_stage_paint (ClutterActor *actor, + MetaStage *stage = META_STAGE (actor); + ClutterStageView *view; + ClutterFrame *frame; ++ const cairo_region_t *redraw_clip; + + CLUTTER_ACTOR_CLASS (meta_stage_parent_class)->paint (actor, paint_context); + + frame = clutter_paint_context_get_frame (paint_context); + view = clutter_paint_context_get_stage_view (paint_context); ++ redraw_clip = clutter_paint_context_get_redraw_clip (paint_context); + if (view) + { +- notify_watchers_for_mode (stage, view, paint_context, frame, ++ notify_watchers_for_mode (stage, view, redraw_clip, frame, + META_STAGE_WATCH_AFTER_ACTOR_PAINT); + } + +@@ -250,7 +252,7 @@ meta_stage_paint (ClutterActor *actor, + + if (view) + { +- notify_watchers_for_mode (stage, view, paint_context, frame, ++ notify_watchers_for_mode (stage, view, redraw_clip, frame, + META_STAGE_WATCH_AFTER_OVERLAY_PAINT); + } + } +@@ -267,7 +269,7 @@ meta_stage_paint_view (ClutterStage *stage, + redraw_clip, + frame); + +- notify_watchers_for_mode (meta_stage, view, NULL, frame, ++ notify_watchers_for_mode (meta_stage, view, redraw_clip, frame, + META_STAGE_WATCH_AFTER_PAINT); + } + +diff --git a/src/tests/meta-ref-test.c b/src/tests/meta-ref-test.c +index 7a58ae4..56e7026 100644 +--- a/src/tests/meta-ref-test.c ++++ b/src/tests/meta-ref-test.c +@@ -270,11 +270,11 @@ typedef struct + } CaptureViewData; + + static void +-on_after_paint (MetaStage *stage, +- ClutterStageView *view, +- ClutterPaintContext *paint_context, +- ClutterFrame *frame, +- gpointer user_data) ++on_after_paint (MetaStage *stage, ++ ClutterStageView *view, ++ const cairo_region_t *redraw_clip, ++ ClutterFrame *frame, ++ gpointer user_data) + { + CaptureViewData *data = user_data; + MtkRectangle rect; diff -Nru mutter-45.0/debian/patches/series mutter-45.0/debian/patches/series --- mutter-45.0/debian/patches/series 2023-09-22 15:27:59.000000000 +0000 +++ mutter-45.0/debian/patches/series 2023-10-05 18:29:32.000000000 +0000 @@ -10,3 +10,9 @@ ubuntu/window-Add-ability-to-override-the-edge-constraints.patch workarounds/cogl-onscreen-glx-Forcefully-disable-cogl_onscreen_glx_ge.patch events-Don-t-un-bypass-Clutter-event-handling-in-presence.patch +kms-crtc-Increase-default-deadline-evasion-to-800-microse.patch +core-Do-not-repick-pointer-while-syncing-wayland-foci.patch +screen-cast-stream-Pass-redraw-clip-to-stage-watches-inst.patch +clutter-actor-Cache-stage-relative-instead-of-absolute-mo.patch +clutter-paint-volume-Avoid-amplifying-small-floating-poin.patch +kms-impl-device-Inhibit-deadline-timer-on-amdgpu.patch diff -Nru mutter-45.0/debian/tests/build mutter-45.0/debian/tests/build --- mutter-45.0/debian/tests/build 1970-01-01 00:00:00.000000000 +0000 +++ mutter-45.0/debian/tests/build 2023-10-05 18:29:32.000000000 +0000 @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +echo "debian/rules override_dh_auto_configure " +debian/rules override_dh_auto_configure + +echo "debian/rules override_dh_auto_build" +debian/rules override_dh_auto_build diff -Nru mutter-45.0/debian/tests/control mutter-45.0/debian/tests/control --- mutter-45.0/debian/tests/control 2023-09-22 15:27:59.000000000 +0000 +++ mutter-45.0/debian/tests/control 2023-10-05 18:29:32.000000000 +0000 @@ -1,3 +1,7 @@ +Tests: build +Depends: @builddeps@ +Restrictions: allow-stderr + Tests: libmutter-13-dev Depends: build-essential, dbus-daemon,