From 9ed55768df8c5179c3520cdd82e9e6b76416b46f Mon Sep 17 00:00:00 2001 From: Mingi Sung Date: Sun, 15 Sep 2024 14:07:15 +0900 Subject: [PATCH] 1:46.5-1: Sync to gnome-46 & Remove !3960 as being merged Signed-off-by: Mingi Sung --- .SRCINFO | 17 ++- PKGBUILD | 34 ++---- mr1441.patch | 104 ++++++++--------- mr3960.patch | 322 --------------------------------------------------- 4 files changed, 71 insertions(+), 406 deletions(-) delete mode 100644 mr3960.patch diff --git a/.SRCINFO b/.SRCINFO index 73f0ea3..c890877 100644 --- a/.SRCINFO +++ b/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = mutter-performance pkgdesc = A window manager for GNOME | Attempts to improve performances with non-upstreamed merge-requests and frequent stable branch resync - pkgver = 46.4+r18+g081b918ba - pkgrel = 3 + pkgver = 46.5 + pkgrel = 1 epoch = 1 url = https://gitlab.gnome.org/GNOME/mutter arch = x86_64 @@ -73,21 +73,18 @@ pkgbase = mutter-performance depends = systemd-libs depends = wayland depends = xorg-xwayland - source = git+https://gitlab.gnome.org/GNOME/mutter.git#commit=081b918bac2eae6a19066ea30ab18d5dbd5b8ea7 + source = git+https://gitlab.gnome.org/GNOME/mutter.git#commit=f585134c114797aae27f1a82013c665a5c1b94ed source = mr1441.patch source = mr3567.patch source = mr3751.patch - source = mr3960.patch - sha256sums = 81978164d9f2715438fbc623c77ea7529332cac5c4c519e4781daa5bf1a315eb - sha256sums = 043d6f4abce085b5ecc3debf0d334cc9fe826d256a421a4cbbe6aee8cffce255 + sha256sums = caf3b0c514334e4684d294ba65a64e22c94bf3458118ea2a3f02de761e0b71f2 + sha256sums = 1fe74042bc5d4369680036918eae10fb3d788983d7b57043a75b291b7f1050c8 sha256sums = 2e474a574edad8dc047a53a920fc7cbe005cac0102907eef80a252fc556d0517 sha256sums = 4c15b0e6d0001c8c3feedf05a9140f7f17d52eb36ff7b8039e0281c1373ccdfe - sha256sums = 361af6ed4ff6039c3b24dca8cd737468b7a441ea9855f8033c8348ce1aab0f0c - b2sums = aaed24cb5bac5f62096d44bfdf0e6acfff3944137a06f5cbd7fd1f18d03ebb816d02ab170c9128eafb023a339de3e7ea79480654687ec449d29f9e45d66218e3 - b2sums = 3231bdae36ae05892d2106199dc75a0dd8dc59b45bc77a51090ad35bec9e21420aeb86578e97fb64565b265beb7406a406362a06a091ef066965c7c9ea2fe50e + b2sums = 3c7990afd584836dd092e30813194ac24608416051a9b06c51d2f9577206360cb0f8bafceccc42ce1809d47e7a1676326fe8b87fa231c6abe2d9dddba10b6581 + b2sums = cd0ae704aefdee7052f18fa75b156027da93243e1abd32692fe7d264b1e63bb41b63c7ea7ca76b74650e4dcdc76c456c83e5d37972196864bbe185aa2819f876 b2sums = 65302b1fa24a7aba26915269fb694c7a64b134ee2062ec7e649036a3a41efb2f2f4110cff6194808af34985855ade641c5fb01f0b97536cd3c912892ea3a0d4c b2sums = f9f2284d7236d6072a818de3784a339c2d934490da8870876f49d4effd59ce807593ce8b8a3c5e06586fd5fd7e81fb31fedca84115acf1e71cfe23d4a5e727b3 - b2sums = 9517c7c84b20ff28ccb3cfd1168eb3ca294934df6088c7938b1ff659933043d2687031b2da1eac7eaf0a8cec21284147cb925aa08584563488fce1bcef361184 pkgname = mutter-performance groups = gnome diff --git a/PKGBUILD b/PKGBUILD index 2e3f027..5e7f10d 100644 --- a/PKGBUILD +++ b/PKGBUILD @@ -11,8 +11,8 @@ ### PACKAGE OPTIONS ## MERGE REQUESTS SELECTION -# Merge Requests List: ('579' '1441' '3567' '3751' '3960') -_merge_requests_to_use=('1441' '3751' '3960') +# Merge Requests List: ('579' '1441' '3567' '3751') +_merge_requests_to_use=('1441' '3751') ### IMPORTANT: Do no edit below this line unless you know what you're doing! @@ -20,8 +20,8 @@ _merge_requests_to_use=('1441' '3751' '3960') _pkgname=mutter pkgname=mutter-performance epoch=1 -pkgver=46.4+r18+g081b918ba -pkgrel=3 +pkgver=46.5 +pkgrel=1 pkgdesc="A window manager for GNOME | Attempts to improve performances with non-upstreamed merge-requests and frequent stable branch resync" url="https://gitlab.gnome.org/GNOME/mutter" arch=(x86_64 aarch64) @@ -100,22 +100,19 @@ makedepends=( if [ -n "$_enable_check" ]; then checkdepends=(gnome-session xorg-server-xvfb pipewire-session-manager python-dbusmock zenity) fi -_commit=081b918bac2eae6a19066ea30ab18d5dbd5b8ea7 # tags/46.4^18 +_commit=f585134c114797aae27f1a82013c665a5c1b94ed # tags/46.5^0 source=("git+$url.git#commit=$_commit" 'mr1441.patch' 'mr3567.patch' - 'mr3751.patch' - 'mr3960.patch') -sha256sums=('81978164d9f2715438fbc623c77ea7529332cac5c4c519e4781daa5bf1a315eb' - '043d6f4abce085b5ecc3debf0d334cc9fe826d256a421a4cbbe6aee8cffce255' + 'mr3751.patch') +sha256sums=('caf3b0c514334e4684d294ba65a64e22c94bf3458118ea2a3f02de761e0b71f2' + '1fe74042bc5d4369680036918eae10fb3d788983d7b57043a75b291b7f1050c8' '2e474a574edad8dc047a53a920fc7cbe005cac0102907eef80a252fc556d0517' - '4c15b0e6d0001c8c3feedf05a9140f7f17d52eb36ff7b8039e0281c1373ccdfe' - '361af6ed4ff6039c3b24dca8cd737468b7a441ea9855f8033c8348ce1aab0f0c') -b2sums=('aaed24cb5bac5f62096d44bfdf0e6acfff3944137a06f5cbd7fd1f18d03ebb816d02ab170c9128eafb023a339de3e7ea79480654687ec449d29f9e45d66218e3' - '3231bdae36ae05892d2106199dc75a0dd8dc59b45bc77a51090ad35bec9e21420aeb86578e97fb64565b265beb7406a406362a06a091ef066965c7c9ea2fe50e' + '4c15b0e6d0001c8c3feedf05a9140f7f17d52eb36ff7b8039e0281c1373ccdfe') +b2sums=('3c7990afd584836dd092e30813194ac24608416051a9b06c51d2f9577206360cb0f8bafceccc42ce1809d47e7a1676326fe8b87fa231c6abe2d9dddba10b6581' + 'cd0ae704aefdee7052f18fa75b156027da93243e1abd32692fe7d264b1e63bb41b63c7ea7ca76b74650e4dcdc76c456c83e5d37972196864bbe185aa2819f876' '65302b1fa24a7aba26915269fb694c7a64b134ee2062ec7e649036a3a41efb2f2f4110cff6194808af34985855ade641c5fb01f0b97536cd3c912892ea3a0d4c' - 'f9f2284d7236d6072a818de3784a339c2d934490da8870876f49d4effd59ce807593ce8b8a3c5e06586fd5fd7e81fb31fedca84115acf1e71cfe23d4a5e727b3' - '9517c7c84b20ff28ccb3cfd1168eb3ca294934df6088c7938b1ff659933043d2687031b2da1eac7eaf0a8cec21284147cb925aa08584563488fce1bcef361184') + 'f9f2284d7236d6072a818de3784a339c2d934490da8870876f49d4effd59ce807593ce8b8a3c5e06586fd5fd7e81fb31fedca84115acf1e71cfe23d4a5e727b3') for mr in "${_merge_requests_to_use[@]}"; do if [ '3567' = "$mr" ]; then @@ -222,13 +219,6 @@ prepare() { # (mostly Chromium/Electron based apps with Ozone Wayland.) pick_mr '3751' 'mr3751.patch' 'patch' - # Title: kms: Inhibit real time scheduling until initial mode set - # Author: Jonas Ã…dahl - # URL: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3960 - # Type: 3 - # Status: 4 - pick_mr '3960' 'mr3960.patch' 'patch' - # Title: Draft: Dynamic triple/double buffering (v4) # Author: Daniel van Vugt # URL: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441 diff --git a/mr1441.patch b/mr1441.patch index a2c2121..cc5dc9b 100644 --- a/mr1441.patch +++ b/mr1441.patch @@ -1,6 +1,6 @@ -From 37bf13fe3de848b8d16e535bac92f3f4edd41751 Mon Sep 17 00:00:00 2001 +From e1d79da6a8267f2e1598feb8d0e0889d138c77ca Mon Sep 17 00:00:00 2001 From: Mingi Sung -Date: Sat, 14 Sep 2024 11:59:23 +0900 +Date: Sun, 15 Sep 2024 14:00:51 +0900 Subject: [PATCH] Merge branch 'sungmg-triple-buffering-v4-46' into gnome-46 Use triple buffering if and when the previous frame is running late. @@ -1439,7 +1439,7 @@ index 7812ec0421..488d24ac5d 100644 int signaled_sync_file; diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c -index 6758982a6a..2a87dc0898 100644 +index e48cffc4f1..a0de4158ac 100644 --- a/src/backends/native/meta-kms-impl-device.c +++ b/src/backends/native/meta-kms-impl-device.c @@ -39,6 +39,7 @@ @@ -1468,7 +1468,7 @@ index 6758982a6a..2a87dc0898 100644 } CrtcFrame; typedef enum _MetaDeadlineTimerState -@@ -1165,6 +1174,7 @@ arm_crtc_frame_deadline_timer (CrtcFrame *crtc_frame, +@@ -1167,6 +1176,7 @@ arm_crtc_frame_deadline_timer (CrtcFrame *crtc_frame, timerfd_settime (crtc_frame->deadline.timer_fd, TFD_TIMER_ABSTIME, &its, NULL); @@ -1476,7 +1476,7 @@ index 6758982a6a..2a87dc0898 100644 crtc_frame->deadline.expected_presentation_time_us = next_presentation_us; crtc_frame->deadline.has_expected_presentation_time = next_presentation_us != 0; crtc_frame->deadline.armed = TRUE; -@@ -1197,7 +1207,7 @@ crtc_page_flip_feedback_flipped (MetaKmsCrtc *crtc, +@@ -1199,7 +1209,7 @@ crtc_page_flip_feedback_flipped (MetaKmsCrtc *crtc, CrtcFrame *crtc_frame = user_data; if (crtc_frame->deadline.is_deadline_page_flip && @@ -1485,7 +1485,7 @@ index 6758982a6a..2a87dc0898 100644 { struct timeval page_flip_timeval; int64_t presentation_time_us; -@@ -1210,7 +1220,7 @@ crtc_page_flip_feedback_flipped (MetaKmsCrtc *crtc, +@@ -1212,7 +1222,7 @@ crtc_page_flip_feedback_flipped (MetaKmsCrtc *crtc, if (crtc_frame->deadline.has_expected_presentation_time) { @@ -1494,7 +1494,7 @@ index 6758982a6a..2a87dc0898 100644 "Deadline page flip presentation time: %" G_GINT64_FORMAT " us, " "expected %" G_GINT64_FORMAT " us " "(diff: %" G_GINT64_FORMAT ")", -@@ -1221,7 +1231,7 @@ crtc_page_flip_feedback_flipped (MetaKmsCrtc *crtc, +@@ -1223,7 +1233,7 @@ crtc_page_flip_feedback_flipped (MetaKmsCrtc *crtc, } else { @@ -1503,7 +1503,7 @@ index 6758982a6a..2a87dc0898 100644 "Deadline page flip presentation time: %" G_GINT64_FORMAT " us", presentation_time_us); } -@@ -1390,11 +1400,16 @@ crtc_frame_deadline_dispatch (MetaThreadImpl *thread_impl, +@@ -1392,11 +1402,16 @@ crtc_frame_deadline_dispatch (MetaThreadImpl *thread_impl, GError **error) { CrtcFrame *crtc_frame = user_data; @@ -1521,7 +1521,7 @@ index 6758982a6a..2a87dc0898 100644 ret = read (crtc_frame->deadline.timer_fd, &timer_value, -@@ -1416,6 +1431,36 @@ crtc_frame_deadline_dispatch (MetaThreadImpl *thread_impl, +@@ -1418,6 +1433,36 @@ crtc_frame_deadline_dispatch (MetaThreadImpl *thread_impl, crtc_frame->crtc, g_steal_pointer (&crtc_frame->pending_update), META_KMS_UPDATE_FLAG_NONE); @@ -1558,7 +1558,7 @@ index 6758982a6a..2a87dc0898 100644 if (meta_kms_feedback_did_pass (feedback)) crtc_frame->deadline.is_deadline_page_flip = TRUE; disarm_crtc_frame_deadline_timer (crtc_frame); -@@ -1429,6 +1474,8 @@ crtc_frame_free (CrtcFrame *crtc_frame) +@@ -1431,6 +1476,8 @@ crtc_frame_free (CrtcFrame *crtc_frame) g_clear_fd (&crtc_frame->deadline.timer_fd, NULL); g_clear_pointer (&crtc_frame->deadline.source, g_source_destroy); g_clear_pointer (&crtc_frame->pending_update, meta_kms_update_free); @@ -1567,7 +1567,7 @@ index 6758982a6a..2a87dc0898 100644 g_free (crtc_frame); } -@@ -1530,6 +1577,79 @@ queue_update (MetaKmsImplDevice *impl_device, +@@ -1539,6 +1586,79 @@ queue_update (MetaKmsImplDevice *impl_device, } } @@ -1647,7 +1647,7 @@ index 6758982a6a..2a87dc0898 100644 void meta_kms_impl_device_handle_update (MetaKmsImplDevice *impl_device, MetaKmsUpdate *update, -@@ -1537,10 +1657,15 @@ meta_kms_impl_device_handle_update (MetaKmsImplDevice *impl_device, +@@ -1546,10 +1666,15 @@ meta_kms_impl_device_handle_update (MetaKmsImplDevice *impl_device, { MetaKmsImplDevicePrivate *priv = meta_kms_impl_device_get_instance_private (impl_device); @@ -1663,7 +1663,7 @@ index 6758982a6a..2a87dc0898 100644 meta_assert_in_kms_impl (meta_kms_impl_get_kms (priv->impl)); -@@ -1561,38 +1686,58 @@ meta_kms_impl_device_handle_update (MetaKmsImplDevice *impl_device, +@@ -1570,38 +1695,58 @@ meta_kms_impl_device_handle_update (MetaKmsImplDevice *impl_device, if (!ensure_device_file (impl_device, &error)) goto err; @@ -1742,7 +1742,7 @@ index 6758982a6a..2a87dc0898 100644 err: diff --git a/src/backends/native/meta-kms-update.c b/src/backends/native/meta-kms-update.c -index b8c4137f9b..53a34b8c22 100644 +index fc605bec18..a5da81f0c5 100644 --- a/src/backends/native/meta-kms-update.c +++ b/src/backends/native/meta-kms-update.c @@ -20,6 +20,8 @@ @@ -1840,7 +1840,7 @@ index 1951c80f60..ebb50cbaa8 100644 const int *rectangles, int n_rectangles); diff --git a/src/backends/native/meta-kms.c b/src/backends/native/meta-kms.c -index d41fcefb5a..37747b473f 100644 +index d989337a10..4253a2adc8 100644 --- a/src/backends/native/meta-kms.c +++ b/src/backends/native/meta-kms.c @@ -63,6 +63,8 @@ struct _MetaKms @@ -1874,7 +1874,7 @@ index d41fcefb5a..37747b473f 100644 meta_thread_flush_callbacks (META_THREAD (kms)); diff --git a/src/backends/native/meta-kms.h b/src/backends/native/meta-kms.h -index 7434014063..f6b19520be 100644 +index 057c7a2348..0d6986529c 100644 --- a/src/backends/native/meta-kms.h +++ b/src/backends/native/meta-kms.h @@ -60,6 +60,8 @@ MetaKmsDevice * meta_kms_create_device (MetaKms *kms, @@ -1887,7 +1887,7 @@ index 7434014063..f6b19520be 100644 MetaKmsFlags flags, GError **error); diff --git a/src/backends/native/meta-onscreen-native.c b/src/backends/native/meta-onscreen-native.c -index 9b739faf39..941647e12a 100644 +index 34709dccf1..c9162d31b8 100644 --- a/src/backends/native/meta-onscreen-native.c +++ b/src/backends/native/meta-onscreen-native.c @@ -29,6 +29,7 @@ @@ -2124,7 +2124,7 @@ index 9b739faf39..941647e12a 100644 } else { -@@ -600,6 +622,10 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen, +@@ -601,6 +623,10 @@ meta_onscreen_native_flip_crtc (CoglOnscreen *onscreen, #endif } @@ -2135,7 +2135,7 @@ index 9b739faf39..941647e12a 100644 meta_kms_update_add_page_flip_listener (kms_update, kms_crtc, &page_flip_listener_vtable, -@@ -848,29 +874,63 @@ import_shared_framebuffer (CoglOnscreen *onscreen, +@@ -849,29 +875,63 @@ import_shared_framebuffer (CoglOnscreen *onscreen, } static MetaDrmBuffer * @@ -2208,7 +2208,7 @@ index 9b739faf39..941647e12a 100644 render_device = renderer_gpu_data->render_device; egl_display = meta_render_device_get_egl_display (render_device); -@@ -880,15 +940,45 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, +@@ -881,15 +941,45 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, secondary_gpu_state->egl_surface, secondary_gpu_state->egl_surface, renderer_gpu_data->secondary.egl_context, @@ -2226,11 +2226,11 @@ index 9b739faf39..941647e12a 100644 + if (primary_gpu_sync_fence != EGL_NO_NATIVE_FENCE_FD_ANDROID) + { + EGLAttrib attribs[3]; -+ + + attribs[0] = EGL_SYNC_NATIVE_FENCE_FD_ANDROID; + attribs[1] = primary_gpu_sync_fence; + attribs[2] = EGL_NONE; - ++ + if (!meta_egl_create_sync (egl, + egl_display, + EGL_SYNC_NATIVE_FENCE_ANDROID, @@ -2259,7 +2259,7 @@ index 9b739faf39..941647e12a 100644 buffer_gbm = META_DRM_BUFFER_GBM (primary_gpu_fb); bo = meta_drm_buffer_gbm_get_bo (buffer_gbm); -@@ -898,21 +988,19 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, +@@ -899,21 +989,19 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, renderer_gpu_data->secondary.egl_context, secondary_gpu_state->egl_surface, bo, @@ -2287,7 +2287,7 @@ index 9b739faf39..941647e12a 100644 } use_modifiers = meta_renderer_native_use_modifiers (renderer_native); -@@ -926,13 +1014,11 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, +@@ -927,13 +1015,11 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, meta_drm_buffer_gbm_new_lock_front (device_file, secondary_gpu_state->gbm.surface, flags, @@ -2304,7 +2304,7 @@ index 9b739faf39..941647e12a 100644 } g_object_set_qdata_full (G_OBJECT (buffer_gbm), -@@ -940,19 +1026,41 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, +@@ -941,19 +1027,41 @@ copy_shared_framebuffer_gpu (CoglOnscreen *onscreen, g_object_ref (primary_gpu_fb), g_object_unref); @@ -2351,7 +2351,7 @@ index 9b739faf39..941647e12a 100644 } static MetaDrmBuffer * -@@ -1192,56 +1300,54 @@ update_secondary_gpu_state_pre_swap_buffers (CoglOnscreen *onscreen, +@@ -1193,56 +1301,54 @@ update_secondary_gpu_state_pre_swap_buffers (CoglOnscreen *onscreen, return copy; } @@ -2444,7 +2444,7 @@ index 9b739faf39..941647e12a 100644 } static void -@@ -1284,10 +1390,36 @@ swap_buffer_result_feedback (const MetaKmsFeedback *kms_feedback, +@@ -1285,10 +1391,36 @@ swap_buffer_result_feedback (const MetaKmsFeedback *kms_feedback, g_warning ("Page flip failed: %s", error->message); frame_info = cogl_onscreen_peek_head_frame_info (onscreen); @@ -2484,7 +2484,7 @@ index 9b739faf39..941647e12a 100644 } static const MetaKmsResultListenerVtable swap_buffer_result_listener_vtable = { -@@ -1303,37 +1435,41 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1304,37 +1436,41 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, { CoglFramebuffer *framebuffer = COGL_FRAMEBUFFER (onscreen); CoglContext *cogl_context = cogl_framebuffer_get_context (framebuffer); @@ -2536,7 +2536,7 @@ index 9b739faf39..941647e12a 100644 secondary_gpu_fb = update_secondary_gpu_state_pre_swap_buffers (onscreen, rectangles, -@@ -1383,46 +1519,28 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1384,46 +1520,28 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, g_warning ("Failed to lock front buffer on %s: %s", meta_device_file_get_path (render_device_file), error->message); @@ -2557,11 +2557,6 @@ index 9b739faf39..941647e12a 100644 - break; -#endif - } -- -- update_secondary_gpu_state_post_swap_buffers (onscreen, -- &egl_context_changed, -- primary_gpu_fb, -- &secondary_gpu_fb); + buffer = acquire_front_buffer (onscreen, + primary_gpu_fb, + secondary_gpu_fb, @@ -2572,6 +2567,12 @@ index 9b739faf39..941647e12a 100644 + goto swap_failed; + } +- update_secondary_gpu_state_post_swap_buffers (onscreen, +- &egl_context_changed, +- primary_gpu_fb, +- &secondary_gpu_fb); ++ meta_frame_native_set_buffer (frame_native, buffer); + - switch (renderer_gpu_data->mode) - { - case META_RENDERER_NATIVE_MODE_GBM: @@ -2580,8 +2581,7 @@ index 9b739faf39..941647e12a 100644 - g_set_object (&onscreen_native->gbm.next_fb, secondary_gpu_fb); - else - g_set_object (&onscreen_native->gbm.next_fb, primary_gpu_fb); -+ meta_frame_native_set_buffer (frame_native, buffer); - +- - if (!meta_drm_buffer_ensure_fb_id (onscreen_native->gbm.next_fb, &error)) + if (!meta_drm_buffer_ensure_fb_id (buffer, &error)) { @@ -2596,7 +2596,7 @@ index 9b739faf39..941647e12a 100644 } break; case META_RENDERER_NATIVE_MODE_SURFACELESS: -@@ -1433,21 +1551,86 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1434,21 +1552,86 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, #endif } @@ -2693,7 +2693,7 @@ index 9b739faf39..941647e12a 100644 kms_update = meta_frame_native_ensure_kms_update (frame_native, kms_device); meta_kms_update_add_result_listener (kms_update, -@@ -1469,13 +1652,11 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1470,13 +1653,11 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, { meta_renderer_native_queue_power_save_page_flip (renderer_native, onscreen); @@ -2709,7 +2709,7 @@ index 9b739faf39..941647e12a 100644 switch (renderer_gpu_data->mode) { -@@ -1490,8 +1671,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1491,8 +1672,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, kms_update = meta_frame_native_steal_kms_update (frame_native); meta_renderer_native_queue_mode_set_update (renderer_native, kms_update); @@ -2718,7 +2718,7 @@ index 9b739faf39..941647e12a 100644 return; } else if (meta_renderer_native_has_pending_mode_set (renderer_native)) -@@ -1505,8 +1684,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1506,8 +1685,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, meta_frame_native_steal_kms_update (frame_native); meta_renderer_native_post_mode_set_updates (renderer_native); @@ -2727,7 +2727,7 @@ index 9b739faf39..941647e12a 100644 return; } break; -@@ -1522,8 +1699,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1523,8 +1700,6 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, kms_update); meta_renderer_native_post_mode_set_updates (renderer_native); @@ -2736,7 +2736,7 @@ index 9b739faf39..941647e12a 100644 return; } break; -@@ -1536,9 +1711,10 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, +@@ -1537,9 +1712,10 @@ meta_onscreen_native_swap_buffers_with_damage (CoglOnscreen *onscreen, meta_kms_device_get_path (kms_device)); kms_update = meta_frame_native_steal_kms_update (frame_native); @@ -2748,7 +2748,7 @@ index 9b739faf39..941647e12a 100644 } gboolean -@@ -1571,7 +1747,7 @@ meta_onscreen_native_is_buffer_scanout_compatible (CoglOnscreen *onscreen, +@@ -1572,7 +1748,7 @@ meta_onscreen_native_is_buffer_scanout_compatible (CoglOnscreen *onscreen, assign_primary_plane (crtc_kms, buffer, test_update, @@ -2757,7 +2757,7 @@ index 9b739faf39..941647e12a 100644 &src_rect, &dst_rect); -@@ -1606,11 +1782,15 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, +@@ -1607,11 +1783,15 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, G_IO_ERROR_PERMISSION_DENIED)) { ClutterStageView *view = CLUTTER_STAGE_VIEW (onscreen_native->view); @@ -2775,7 +2775,7 @@ index 9b739faf39..941647e12a 100644 clutter_stage_view_add_redraw_clip (view, NULL); clutter_stage_view_schedule_update_now (view); } -@@ -1619,7 +1799,7 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, +@@ -1620,7 +1800,7 @@ scanout_result_feedback (const MetaKmsFeedback *kms_feedback, frame_info->flags |= COGL_FRAME_INFO_FLAG_SYMBOLIC; meta_onscreen_native_notify_frame_complete (onscreen); @@ -2784,7 +2784,7 @@ index 9b739faf39..941647e12a 100644 } static const MetaKmsResultListenerVtable scanout_result_listener_vtable = { -@@ -1671,16 +1851,28 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen, +@@ -1672,16 +1852,28 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen, return FALSE; } @@ -2818,7 +2818,7 @@ index 9b739faf39..941647e12a 100644 frame_info->cpu_time_before_buffer_swap_us = g_get_monotonic_time (); -@@ -1701,7 +1893,7 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen, +@@ -1702,7 +1894,7 @@ meta_onscreen_native_direct_scanout (CoglOnscreen *onscreen, onscreen_native->view, onscreen_native->crtc, kms_update, @@ -2827,7 +2827,7 @@ index 9b739faf39..941647e12a 100644 NULL, 0); -@@ -1786,11 +1978,15 @@ meta_onscreen_native_before_redraw (CoglOnscreen *onscreen, +@@ -1787,11 +1979,15 @@ meta_onscreen_native_before_redraw (CoglOnscreen *onscreen, ClutterFrame *frame) { MetaOnscreenNative *onscreen_native = META_ONSCREEN_NATIVE (onscreen); @@ -2847,7 +2847,7 @@ index 9b739faf39..941647e12a 100644 maybe_update_frame_sync (onscreen_native, frame); } -@@ -1919,22 +2115,79 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, +@@ -1920,22 +2116,79 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, MetaKmsDevice *kms_device = meta_kms_crtc_get_device (kms_crtc); MetaFrameNative *frame_native = meta_frame_native_from_frame (frame); MetaKmsUpdate *kms_update; @@ -2935,7 +2935,7 @@ index 9b739faf39..941647e12a 100644 meta_kms_update_add_result_listener (kms_update, &finish_frame_result_listener_vtable, NULL, -@@ -1957,7 +2210,17 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, +@@ -1958,7 +2211,17 @@ meta_onscreen_native_finish_frame (CoglOnscreen *onscreen, meta_kms_update_set_flushing (kms_update, kms_crtc); meta_kms_device_post_update (kms_device, kms_update, META_KMS_UPDATE_FLAG_NONE); @@ -2954,7 +2954,7 @@ index 9b739faf39..941647e12a 100644 } static gboolean -@@ -2865,15 +3128,17 @@ meta_onscreen_native_dispose (GObject *object) +@@ -2863,15 +3126,17 @@ meta_onscreen_native_dispose (GObject *object) meta_onscreen_native_detach (onscreen_native); @@ -2989,7 +2989,7 @@ index 0e1193325a..e30357d19d 100644 MetaRendererView *view); diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c -index aa76d018ca..3c22b4e86a 100644 +index 2fcf6dfd56..03b41dfcad 100644 --- a/src/backends/native/meta-renderer-native.c +++ b/src/backends/native/meta-renderer-native.c @@ -731,12 +731,18 @@ static gboolean diff --git a/mr3960.patch b/mr3960.patch deleted file mode 100644 index c018b03..0000000 --- a/mr3960.patch +++ /dev/null @@ -1,322 +0,0 @@ -From 36a1a74f7a6ea674e3911e89935256f1c6c5a149 Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Jonas=20=C3=85dahl?= -Date: Tue, 20 Aug 2024 11:07:29 +0200 -Subject: [PATCH] kms: Inhibit real time scheduling until initial mode set - -We're already inhibiting real time scheduling when reading new KMS state -after hot plugs, as well as when during mode sets, due to the kernel not -being able to reliably handle these within the 250 ms limit. However, we -didn't do this during initial probing, which meant that occasionally -we'd run into these kind of issues during startup. - -Handle this by always inhibiting real time scheduling up front, and -don't uninhibit until all initially discovered device have finished -processing their initial mode set. - -Closes: https://gitlab.gnome.org/GNOME/mutter/-/issues/3628 -Part-of: - -Signed-off-by: Mingi Sung ---- - src/backends/native/meta-backend-native.c | 3 ++ - src/backends/native/meta-kms-impl-device.c | 32 ++++++++++++++++++++++ - src/backends/native/meta-kms-impl.c | 20 ++++++++++++++ - src/backends/native/meta-kms-impl.h | 2 ++ - src/backends/native/meta-kms.c | 17 ++++++++++++ - src/backends/native/meta-kms.h | 2 ++ - src/backends/native/meta-thread-impl.c | 9 ++++++ - src/backends/native/meta-thread-impl.h | 4 +++ - src/backends/native/meta-thread.c | 26 ++++++++++++------ - 9 files changed, 106 insertions(+), 9 deletions(-) - -diff --git a/src/backends/native/meta-backend-native.c b/src/backends/native/meta-backend-native.c -index 131a687e21..e3ed02894a 100644 ---- a/src/backends/native/meta-backend-native.c -+++ b/src/backends/native/meta-backend-native.c -@@ -609,6 +609,7 @@ init_gpus (MetaBackendNative *native, - { - MetaBackend *backend = META_BACKEND (native); - MetaUdev *udev = meta_backend_native_get_udev (native); -+ MetaKms *kms = meta_backend_native_get_kms (native); - g_autoptr (GError) local_error = NULL; - MetaUdevDeviceType device_type = 0; - GList *devices; -@@ -669,6 +670,8 @@ init_gpus (MetaBackendNative *native, - - g_list_free_full (devices, g_object_unref); - -+ meta_kms_notify_probed (kms); -+ - if (!meta_backend_is_headless (backend) && - g_list_length (meta_backend_get_gpus (backend)) == 0) - { -diff --git a/src/backends/native/meta-kms-impl-device.c b/src/backends/native/meta-kms-impl-device.c -index 6758982a6a..f73aecac7a 100644 ---- a/src/backends/native/meta-kms-impl-device.c -+++ b/src/backends/native/meta-kms-impl-device.c -@@ -108,6 +108,8 @@ typedef struct _MetaKmsImplDevicePrivate - - GHashTable *crtc_frames; - -+ gboolean realtime_inhibited_pending_mode_set; -+ - MetaDeadlineTimerState deadline_timer_state; - - gboolean sync_file_retrieved; -@@ -1734,6 +1736,12 @@ process_mode_set_update (MetaKmsImplDevice *impl_device, - feedback = do_process (impl_device, NULL, update, flags); - meta_thread_uninhibit_realtime_in_impl (thread); - -+ if (priv->realtime_inhibited_pending_mode_set) -+ { -+ priv->realtime_inhibited_pending_mode_set = FALSE; -+ meta_thread_uninhibit_realtime_in_impl (thread); -+ } -+ - return feedback; - } - -@@ -1924,6 +1932,15 @@ meta_kms_impl_device_finalize (GObject *object) - MetaKmsImplDevicePrivate *priv = - meta_kms_impl_device_get_instance_private (impl_device); - -+ if (priv->realtime_inhibited_pending_mode_set) -+ { -+ MetaThreadImpl *thread_impl = META_THREAD_IMPL (priv->impl); -+ MetaThread *thread = meta_thread_impl_get_thread (thread_impl); -+ -+ priv->realtime_inhibited_pending_mode_set = FALSE; -+ meta_thread_uninhibit_realtime_in_impl (thread); -+ } -+ - meta_kms_impl_remove_impl_device (priv->impl, impl_device); - - g_list_free_full (priv->planes, g_object_unref); -@@ -1973,6 +1990,16 @@ meta_kms_impl_device_init_mode_setting (MetaKmsImplDevice *impl_device, - - update_connectors (impl_device, drm_resources, 0); - -+ if (!priv->crtcs) -+ { -+ MetaThreadImpl *thread_impl = META_THREAD_IMPL (priv->impl); -+ MetaThread *thread = meta_thread_impl_get_thread (thread_impl); -+ -+ g_warn_if_fail (priv->realtime_inhibited_pending_mode_set); -+ meta_thread_uninhibit_realtime_in_impl (thread); -+ priv->realtime_inhibited_pending_mode_set = FALSE; -+ } -+ - drmModeFreeResources (drm_resources); - - return TRUE; -@@ -2050,6 +2077,8 @@ meta_kms_impl_device_initable_init (GInitable *initable, - MetaKmsImplDevice *impl_device = META_KMS_IMPL_DEVICE (initable); - MetaKmsImplDevicePrivate *priv = - meta_kms_impl_device_get_instance_private (impl_device); -+ MetaThreadImpl *thread_impl = META_THREAD_IMPL (priv->impl); -+ MetaThread *thread = meta_thread_impl_get_thread (thread_impl); - int fd; - - if (!ensure_device_file (impl_device, error)) -@@ -2075,6 +2104,9 @@ meta_kms_impl_device_initable_init (GInitable *initable, - - priv->sync_file = -1; - -+ meta_thread_inhibit_realtime_in_impl (thread); -+ priv->realtime_inhibited_pending_mode_set = TRUE; -+ - return TRUE; - } - -diff --git a/src/backends/native/meta-kms-impl.c b/src/backends/native/meta-kms-impl.c -index 99019ca85f..e34af98202 100644 ---- a/src/backends/native/meta-kms-impl.c -+++ b/src/backends/native/meta-kms-impl.c -@@ -172,12 +172,32 @@ meta_kms_impl_finalize (GObject *object) - G_OBJECT_CLASS (meta_kms_impl_parent_class)->finalize (object); - } - -+static void -+meta_kms_impl_setup (MetaThreadImpl *thread_impl) -+{ -+ MetaThread *thread = meta_thread_impl_get_thread (thread_impl); -+ -+ meta_thread_inhibit_realtime_in_impl (thread); -+} -+ -+void -+meta_kms_impl_notify_probed (MetaKmsImpl *impl) -+{ -+ MetaThreadImpl *thread_impl = META_THREAD_IMPL (impl); -+ MetaThread *thread = meta_thread_impl_get_thread (thread_impl); -+ -+ meta_thread_uninhibit_realtime_in_impl (thread); -+} -+ - static void - meta_kms_impl_class_init (MetaKmsImplClass *klass) - { - GObjectClass *object_class = G_OBJECT_CLASS (klass); -+ MetaThreadImplClass *thread_impl_class = META_THREAD_IMPL_CLASS (klass); - - object_class->finalize = meta_kms_impl_finalize; -+ -+ thread_impl_class->setup = meta_kms_impl_setup; - } - - MetaKmsUpdateFilter * -diff --git a/src/backends/native/meta-kms-impl.h b/src/backends/native/meta-kms-impl.h -index f8379fab28..582bebf5e6 100644 ---- a/src/backends/native/meta-kms-impl.h -+++ b/src/backends/native/meta-kms-impl.h -@@ -53,6 +53,8 @@ void meta_kms_impl_notify_modes_set (MetaKmsImpl *impl); - - MetaKmsImpl * meta_kms_impl_new (MetaKms *kms); - -+void meta_kms_impl_notify_probed (MetaKmsImpl *impl); -+ - MetaKmsUpdateFilter * meta_kms_impl_add_update_filter (MetaKmsImpl *impl, - MetaKmsUpdateFilterFunc func, - gpointer user_data); -diff --git a/src/backends/native/meta-kms.c b/src/backends/native/meta-kms.c -index d41fcefb5a..d989337a10 100644 ---- a/src/backends/native/meta-kms.c -+++ b/src/backends/native/meta-kms.c -@@ -413,6 +413,23 @@ meta_kms_new (MetaBackend *backend, - return kms; - } - -+static gpointer -+notify_probed_in_impl (MetaThreadImpl *thread_impl, -+ gpointer user_data, -+ GError **error) -+{ -+ meta_kms_impl_notify_probed (META_KMS_IMPL (thread_impl)); -+ return NULL; -+} -+ -+void -+meta_kms_notify_probed (MetaKms *kms) -+{ -+ meta_thread_post_impl_task (META_THREAD (kms), -+ notify_probed_in_impl, -+ NULL, NULL, NULL, NULL); -+} -+ - static void - meta_kms_finalize (GObject *object) - { -diff --git a/src/backends/native/meta-kms.h b/src/backends/native/meta-kms.h -index 7434014063..057c7a2348 100644 ---- a/src/backends/native/meta-kms.h -+++ b/src/backends/native/meta-kms.h -@@ -64,6 +64,8 @@ MetaKms * meta_kms_new (MetaBackend *backend, - MetaKmsFlags flags, - GError **error); - -+void meta_kms_notify_probed (MetaKms *kms); -+ - META_EXPORT_TEST - void meta_kms_inhibit_kernel_thread (MetaKms *kms); - -diff --git a/src/backends/native/meta-thread-impl.c b/src/backends/native/meta-thread-impl.c -index 28ef349f7c..d02d49203f 100644 ---- a/src/backends/native/meta-thread-impl.c -+++ b/src/backends/native/meta-thread-impl.c -@@ -568,6 +568,15 @@ meta_thread_impl_dispatch (MetaThreadImpl *thread_impl) - return 1; - } - -+void -+meta_thread_impl_setup (MetaThreadImpl *thread_impl) -+{ -+ MetaThreadImplClass *klass = META_THREAD_IMPL_GET_CLASS (thread_impl); -+ -+ if (klass->setup) -+ klass->setup (thread_impl); -+} -+ - void - meta_thread_impl_run (MetaThreadImpl *thread_impl, - MetaThreadImplRunFlags flags) -diff --git a/src/backends/native/meta-thread-impl.h b/src/backends/native/meta-thread-impl.h -index 2083b3bf16..1837c465cb 100644 ---- a/src/backends/native/meta-thread-impl.h -+++ b/src/backends/native/meta-thread-impl.h -@@ -38,6 +38,8 @@ G_DECLARE_DERIVABLE_TYPE (MetaThreadImpl, meta_thread_impl, - struct _MetaThreadImplClass - { - GObjectClass parent_class; -+ -+ void (* setup) (MetaThreadImpl *thread_impl); - }; - - typedef enum _MetaThreadTaskFeedbackType -@@ -70,6 +72,8 @@ void meta_thread_impl_queue_task (MetaThreadImpl *thread_impl, - - void meta_thread_impl_terminate (MetaThreadImpl *thread_impl); - -+void meta_thread_impl_setup (MetaThreadImpl *thread_impl); -+ - void meta_thread_impl_run (MetaThreadImpl *thread_impl, - MetaThreadImplRunFlags flags); - -diff --git a/src/backends/native/meta-thread.c b/src/backends/native/meta-thread.c -index 08bd9b8fe2..5dcdb05eba 100644 ---- a/src/backends/native/meta-thread.c -+++ b/src/backends/native/meta-thread.c -@@ -333,22 +333,28 @@ request_normal_scheduling (MetaThread *thread, - } - - static gboolean --should_use_realtime_scheduling_in_impl (MetaThread *thread) -+can_use_realtime_scheduling_in_impl (MetaThread *thread) - { - MetaThreadPrivate *priv = meta_thread_get_instance_private (thread); -- gboolean should_use_realtime_scheduling = FALSE; - - switch (priv->thread_type) - { - case META_THREAD_TYPE_USER: -- break; -+ return FALSE; - case META_THREAD_TYPE_KERNEL: -- if (priv->wants_realtime && priv->kernel.realtime_inhibit_count == 0) -- should_use_realtime_scheduling = TRUE; -- break; -+ return priv->wants_realtime; - } - -- return should_use_realtime_scheduling; -+ g_assert_not_reached (); -+} -+ -+static gboolean -+should_use_realtime_scheduling_in_impl (MetaThread *thread) -+{ -+ MetaThreadPrivate *priv = meta_thread_get_instance_private (thread); -+ -+ return (can_use_realtime_scheduling_in_impl (thread) && -+ priv->kernel.realtime_inhibit_count == 0); - } - - static void -@@ -417,11 +423,13 @@ thread_impl_func (gpointer user_data) - priv->kernel.realtime_inhibit_count = 0; - priv->kernel.is_realtime = FALSE; - -+ meta_thread_impl_setup (impl); -+ - sync_realtime_scheduling_in_impl (thread); - -- if (priv->kernel.is_realtime) -+ if (can_use_realtime_scheduling_in_impl (thread)) - { -- g_message ("Made thread '%s' realtime scheduled", priv->name); -+ g_message ("Thread '%s' will be using real time scheduling", priv->name); - run_flags |= META_THREAD_IMPL_RUN_FLAG_REALTIME; - } - --- -2.46.0 -