From 0000000000000000000000000000000000000000 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] 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. --- 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 0135f22033fe..25cb1cbd5e1a 100644 --- a/src/backends/native/meta-kms-impl-device.c +++ b/src/backends/native/meta-kms-impl-device.c @@ -2081,25 +2081,24 @@ 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); g_warning_once ("crtc_frame->pending_update=%p, deadline_timer_state=%d", 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); } From 0000000000000000000000000000000000000000 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] 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 --- 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 bb7a2c4bd570..a8d7d7aa2681 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); }