1:46.5-1: Sync to gnome-46 & Remove !3960 as being merged
Signed-off-by: Mingi Sung <sungmg@saltyming.net>
This commit is contained in:
parent
d32c1dd8cb
commit
9ed55768df
4 changed files with 71 additions and 406 deletions
17
.SRCINFO
17
.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
|
||||
|
|
34
PKGBUILD
34
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 <jadahl@gmail.com>
|
||||
# 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 <daniel.van.vugt@canonical.com>
|
||||
# URL: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1441
|
||||
|
|
104
mr1441.patch
104
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 <sungmg@saltyming.net>
|
||||
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
|
||||
|
|
322
mr3960.patch
322
mr3960.patch
|
@ -1,322 +0,0 @@
|
|||
From 36a1a74f7a6ea674e3911e89935256f1c6c5a149 Mon Sep 17 00:00:00 2001
|
||||
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
|
||||
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: <https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3960>
|
||||
|
||||
Signed-off-by: Mingi Sung <sungmg@saltyming.net>
|
||||
---
|
||||
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
|
||||
|
Loading…
Reference in a new issue