Patch-Source: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/4338 --- From d6005b539ca42905dfaf1c3854540a559332b78e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 17 Mar 2025 11:00:11 +0100 Subject: [PATCH 1/2] kms/impl-device: Always catch pending KMS update in _schedule_process Not only if the deadline timer is enabled. With the next commit, it'll be semi-expected to happen even if the deadline timer is disabled. Still leave the warning though, as a reminder that we'd rather prevent this outside of the KMS thread. Part-of: --- src/backends/native/meta-kms-impl-device.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c index 0135f22033..25cb1cbd5e 100644 --- a/src/backends/native/meta-kms-impl-device.c +++ b/src/backends/native/meta-kms-impl-device.c @@ -2081,17 +2081,8 @@ meta_kms_impl_device_schedule_process (MetaKmsImplDevice *impl_device, if (ensure_deadline_timer_armed (impl_device, crtc_frame)) return; - - if (crtc_frame->pending_update) - { - meta_kms_impl_device_do_process_update (impl_device, crtc_frame, - crtc_frame->crtc, - crtc_frame->pending_update, - META_KMS_UPDATE_FLAG_NONE); - } } - - if (crtc_frame->pending_update) + else if (crtc_frame->pending_update) { MetaKmsImplDevicePrivate *priv = meta_kms_impl_device_get_instance_private (impl_device); @@ -2100,6 +2091,14 @@ meta_kms_impl_device_schedule_process (MetaKmsImplDevice *impl_device, crtc_frame->pending_update, priv->deadline_timer_state); } + if (crtc_frame->pending_update) + { + meta_kms_impl_device_do_process_update (impl_device, crtc_frame, + crtc_frame->crtc, + crtc_frame->pending_update, + META_KMS_UPDATE_FLAG_NONE); + } + meta_kms_device_set_needs_flush (meta_kms_crtc_get_device (crtc), crtc); } -- GitLab From a355f68d347830ab1dc8fba0bf409dd0aaf2804d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Michel=20D=C3=A4nzer?= Date: Mon, 17 Mar 2025 10:50:13 +0100 Subject: [PATCH 2/2] Revert "onscreen/native: Account for all posted frames" This reverts commit 9fc5fdc953f96cd91ad54fce6c50964e7ce57815. It caused freezes for some users. Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3974 Part-of: --- src/backends/native/meta-onscreen-native.c | 2 -- 1 file changed, 2 deletions(-) diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c index bb7a2c4bd5..a8d7d7aa26 100644 --- a/src/backends/native/meta-onscreen-native.c +++ b/src/backends/native/meta-onscreen-native.c @@ -1672,7 +1672,6 @@ maybe_post_next_frame (CoglOnscreen *onscreen) { kms_update = meta_frame_native_steal_kms_update (frame_native); post_nonprimary_plane_update (onscreen_native, frame, kms_update); - onscreen_native->posted_frame = clutter_frame_ref (frame); return; } @@ -2127,7 +2126,6 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, } post_nonprimary_plane_update (onscreen_native, frame, kms_update); - onscreen_native->posted_frame = clutter_frame_ref (frame); clutter_frame_set_result (frame, CLUTTER_FRAME_RESULT_PENDING_PRESENTED); } -- GitLab