diff options
-rw-r--r-- | .SRCINFO | 14 | ||||
-rw-r--r-- | 216.patch | 25 | ||||
-rw-r--r-- | 318.patch | 420 | ||||
-rw-r--r-- | 365.patch | 14 | ||||
-rw-r--r-- | PKGBUILD | 111 | ||||
-rw-r--r-- | startup-notification.patch | 46 |
6 files changed, 38 insertions, 592 deletions
@@ -1,6 +1,6 @@ pkgbase = mutter-781835-workaround pkgdesc = A window manager for GNOME. This package reverts a commit which may causes performance problems for nvidia driver users. Some performance patches also included. - pkgver = 3.30.2+7 + pkgver = 3.32.0 pkgrel = 15 url = https://gitlab.gnome.org/GNOME/mutter arch = x86_64 @@ -27,19 +27,11 @@ pkgbase = mutter-781835-workaround depends = gnome-shell provides = mutter conflicts = mutter - source = git+https://gitlab.gnome.org/GNOME/mutter.git#commit=bcd6103c44ff74ebffd1737b8e0f3a952b83bd54 + source = mutter-781835-workaround::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=efb1ee97308653a28ed4448b0c405e6faf2c4f40 source = 216.patch - source = 318.patch - source = 365.patch - source = https://gitlab.gnome.org/GNOME/mutter/merge_requests/347.patch - source = startup-notification.patch source = revert.patch sha256sums = SKIP - sha256sums = 1ae59343f3f5838babdfe1400962bb315d8b49189deb05bb516966b922cd26a5 - sha256sums = d4dcffa9c407e60e321670caaa44dcd6e2bfda7221d73ec4145a985c825a43b3 - sha256sums = a0c86a5770e34973e074dd542dd1c4abb3b7e45b7a429a8aa6a7d1e73df39796 - sha256sums = 1343ed3c21ca7ab4f179b864eae4b915b910406c3eb8259399973c29822f751c - sha256sums = 00d5e77c94e83e1987cc443ed7c47303aa33367ce912b2f665bcd34f88890a17 + sha256sums = ed4f3cf738a3cffdf8a6e1a352bf24d74078c3b26fb9262c5746e0d95b9df756 sha256sums = 2d2e305e0a6cca087bb8164f81bdc0ae7a5ca8e9c13c81d7fd5252eb3563fc09 pkgname = mutter-781835-workaround diff --git a/216.patch b/216.patch index 43e53440fb57..ee92895446d8 100644 --- a/216.patch +++ b/216.patch @@ -1,4 +1,4 @@ -From ab03f010df7b78854433093030f08a81c059aa26 Mon Sep 17 00:00:00 2001 +From 6d8d73beeef3a618c553e89b0b3e532ec3654a30 Mon Sep 17 00:00:00 2001 From: Daniel van Vugt <daniel.van.vugt@canonical.com> Date: Mon, 23 Jul 2018 16:28:56 +0800 Subject: [PATCH] cogl-winsys-glx: Fix frame notification race/leak @@ -8,26 +8,29 @@ handler had flushed the first then one of them would be forgotten. It would stay queued forever and never emitted as a notification. This could happen repeatedly causing a slow leak. But worse still, -clutter-stage-cogl would then have pending_swaps permanently stuck above -zero preventing the presentation timing logic from being used. +`clutter-stage-cogl` would then have `pending_swaps` permanently stuck +above zero preventing the presentation timing logic from being used. -The problem was that CoglBool can only count to one pending notification, -so we just change that to an integer and count properly. +The problem is that a boolean can only count to one, but in some cases +(triple buffering, whether intentional or accidental #334) we need it to +count to two. So just change booleans to integers and count properly. + +https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 --- cogl/cogl/winsys/cogl-winsys-glx.c | 58 +++++++++++++++--------------- 1 file changed, 29 insertions(+), 29 deletions(-) diff --git a/cogl/cogl/winsys/cogl-winsys-glx.c b/cogl/cogl/winsys/cogl-winsys-glx.c -index 012c712bd..2cf6e95fc 100644 +index 2623d02c6..235cfe81f 100644 --- a/cogl/cogl/winsys/cogl-winsys-glx.c +++ b/cogl/cogl/winsys/cogl-winsys-glx.c @@ -99,9 +99,9 @@ typedef struct _CoglOnscreenGLX CoglOnscreenXlib _parent; GLXDrawable glxwin; uint32_t last_swap_vsync_counter; -- CoglBool pending_sync_notify; -- CoglBool pending_complete_notify; -- CoglBool pending_resize_notify; +- gboolean pending_sync_notify; +- gboolean pending_complete_notify; +- gboolean pending_resize_notify; + uint32_t pending_sync_notify; + uint32_t pending_complete_notify; + uint32_t pending_resize_notify; @@ -38,8 +41,8 @@ index 012c712bd..2cf6e95fc 100644 { CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer); CoglOnscreenGLX *glx_onscreen = onscreen->winsys; -- CoglBool pending_sync_notify = glx_onscreen->pending_sync_notify; -- CoglBool pending_complete_notify = glx_onscreen->pending_complete_notify; +- gboolean pending_sync_notify = glx_onscreen->pending_sync_notify; +- gboolean pending_complete_notify = glx_onscreen->pending_complete_notify; - /* If swap_region is called then notifying the sync event could - * potentially immediately queue a subsequent pending notify so diff --git a/318.patch b/318.patch deleted file mode 100644 index b59866f07a51..000000000000 --- a/318.patch +++ /dev/null @@ -1,420 +0,0 @@ -From d20697ff5972b363679597372d1a98ff3074085c Mon Sep 17 00:00:00 2001 -From: Daniel van Vugt <daniel.van.vugt@canonical.com> -Date: Wed, 27 Jun 2018 17:19:27 +0800 -Subject: [PATCH 1/2] renderer-native: Add hardware presentation timing - -Add support for getting hardware presentation times from KMS (Wayland -sessions). Also implement cogl_get_clock_time which is required to compare -and judge the age of presentation timestamps. - -For single monitor systems this is straightforward. For multi-monitor -systems though we have to choose a display to sync to. The compositor -already partially solves this for us in the case of only one display -updating because it will only use the subset of monitors that are -changing. In the case of multiple monitors consuming the same frame -concurrently however, we choose the fastest one (in use at the time). -Note however that we also need !73 to land in order to fully realize -multiple monitors running at full speed. ---- - src/Makefile.am | 25 +++++++- - src/backends/native/meta-gpu-kms.c | 69 ++++++++++++++++++++-- - src/backends/native/meta-gpu-kms.h | 3 + - src/backends/native/meta-renderer-native.c | 38 +++++++++++- - src/meta-marshal.list | 1 + - 5 files changed, 128 insertions(+), 8 deletions(-) - create mode 100644 src/meta-marshal.list - -diff --git a/src/Makefile.am b/src/Makefile.am -index 811e2b86b..56d539836 100644 ---- a/src/Makefile.am -+++ b/src/Makefile.am -@@ -51,6 +51,8 @@ mutter_built_sources = \ - $(dbus_login1_built_sources) \ - meta/meta-enum-types.h \ - meta-enum-types.c \ -+ meta-marshal.c \ -+ meta-marshal.h \ - $(NULL) - - if HAVE_REMOTE_DESKTOP -@@ -677,6 +679,7 @@ EXTRA_DIST += \ - libmutter.pc.in \ - meta-enum-types.h.in \ - meta-enum-types.c.in \ -+ meta-marshal.list \ - org.freedesktop.login1.xml \ - org.gnome.Mutter.DisplayConfig.xml \ - org.gnome.Mutter.IdleMonitor.xml \ -@@ -690,7 +693,10 @@ BUILT_SOURCES = \ - $(libmutterinclude_built_headers) - - MUTTER_STAMP_FILES = stamp-meta-enum-types.h --CLEANFILES += $(MUTTER_STAMP_FILES) -+CLEANFILES += \ -+ $(MUTTER_STAMP_FILES) \ -+ meta-marshal.c \ -+ meta-marshal.h - - meta/meta-enum-types.h: stamp-meta-enum-types.h Makefile - @true -@@ -786,3 +792,20 @@ endef - $(AM_V_GEN)$(WAYLAND_SCANNER) server-header $< $@ - %-server-protocol.h : $(WAYLAND_EGLSTREAM_DATADIR)/%.xml - $(AM_V_GEN)$(WAYLAND_SCANNER) server-header $< $@ -+ -+meta_marshal_opts = --prefix=meta_marshal --internal -+ -+meta-marshal.h: meta-marshal.list -+ $(AM_V_GEN)$(GLIB_GENMARSHAL) \ -+ --header \ -+ $(meta_marshal_opts) \ -+ --output=$@ \ -+ $< -+ -+meta-marshal.c: meta-marshal.list meta-marshal.h -+ $(AM_V_GEN)$(GLIB_GENMARSHAL) \ -+ --include-header=meta-marshal.h \ -+ $(meta_marshal_opts) \ -+ --body \ -+ --output=$@ \ -+ $< -diff --git a/src/backends/native/meta-gpu-kms.c b/src/backends/native/meta-gpu-kms.c -index c3c5d0d68..26c759031 100644 ---- a/src/backends/native/meta-gpu-kms.c -+++ b/src/backends/native/meta-gpu-kms.c -@@ -27,6 +27,7 @@ - #include <errno.h> - #include <poll.h> - #include <string.h> -+#include <time.h> - #include <xf86drm.h> - #include <xf86drmMode.h> - -@@ -51,6 +52,7 @@ typedef struct _MetaGpuKmsFlipClosureContainer - { - GClosure *flip_closure; - MetaGpuKms *gpu_kms; -+ MetaCrtc *crtc; - } MetaGpuKmsFlipClosureContainer; - - struct _MetaGpuKms -@@ -61,6 +63,8 @@ struct _MetaGpuKms - char *file_path; - GSource *source; - -+ clockid_t clock_id; -+ - drmModeConnector **connectors; - unsigned int n_connectors; - -@@ -165,18 +169,26 @@ meta_gpu_kms_apply_crtc_mode (MetaGpuKms *gpu_kms, - - static void - invoke_flip_closure (GClosure *flip_closure, -- MetaGpuKms *gpu_kms) -+ MetaGpuKms *gpu_kms, -+ MetaCrtc *crtc, -+ int64_t page_flip_time_ns) - { - GValue params[] = { - G_VALUE_INIT, -- G_VALUE_INIT -+ G_VALUE_INIT, -+ G_VALUE_INIT, -+ G_VALUE_INIT, - }; - - g_value_init (¶ms[0], G_TYPE_POINTER); - g_value_set_pointer (¶ms[0], flip_closure); - g_value_init (¶ms[1], G_TYPE_OBJECT); - g_value_set_object (¶ms[1], gpu_kms); -- g_closure_invoke (flip_closure, NULL, 2, params, NULL); -+ g_value_init (¶ms[2], G_TYPE_OBJECT); -+ g_value_set_object (¶ms[2], crtc); -+ g_value_init (¶ms[3], G_TYPE_INT64); -+ g_value_set_int64 (¶ms[3], page_flip_time_ns); -+ g_closure_invoke (flip_closure, NULL, 4, params, NULL); - g_closure_unref (flip_closure); - } - -@@ -216,6 +228,7 @@ meta_gpu_kms_is_crtc_active (MetaGpuKms *gpu_kms, - - MetaGpuKmsFlipClosureContainer * - meta_gpu_kms_wrap_flip_closure (MetaGpuKms *gpu_kms, -+ MetaCrtc *crtc, - GClosure *flip_closure) - { - MetaGpuKmsFlipClosureContainer *closure_container; -@@ -223,7 +236,8 @@ meta_gpu_kms_wrap_flip_closure (MetaGpuKms *gpu_kms, - closure_container = g_new0 (MetaGpuKmsFlipClosureContainer, 1); - *closure_container = (MetaGpuKmsFlipClosureContainer) { - .flip_closure = flip_closure, -- .gpu_kms = gpu_kms -+ .gpu_kms = gpu_kms, -+ .crtc = crtc - }; - - return closure_container; -@@ -263,6 +277,7 @@ meta_gpu_kms_flip_crtc (MetaGpuKms *gpu_kms, - int kms_fd = meta_gpu_kms_get_fd (gpu_kms); - - closure_container = meta_gpu_kms_wrap_flip_closure (gpu_kms, -+ crtc, - flip_closure); - - ret = drmModePageFlip (kms_fd, -@@ -296,6 +311,23 @@ meta_gpu_kms_flip_crtc (MetaGpuKms *gpu_kms, - return TRUE; - } - -+static int64_t -+timespec_to_nanoseconds (const struct timespec *ts) -+{ -+ const int64_t one_billion = 1000000000; -+ -+ return ((int64_t) ts->tv_sec) * one_billion + ts->tv_nsec; -+} -+ -+static int64_t -+timeval_to_nanoseconds (const struct timeval *tv) -+{ -+ int64_t usec = ((int64_t) tv->tv_sec) * G_USEC_PER_SEC + tv->tv_usec; -+ int64_t nsec = usec * 1000; -+ -+ return nsec; -+} -+ - static void - page_flip_handler (int fd, - unsigned int frame, -@@ -306,8 +338,12 @@ page_flip_handler (int fd, - MetaGpuKmsFlipClosureContainer *closure_container = user_data; - GClosure *flip_closure = closure_container->flip_closure; - MetaGpuKms *gpu_kms = closure_container->gpu_kms; -+ struct timeval page_flip_time = {sec, usec}; - -- invoke_flip_closure (flip_closure, gpu_kms); -+ invoke_flip_closure (flip_closure, -+ gpu_kms, -+ closure_container->crtc, -+ timeval_to_nanoseconds (&page_flip_time)); - meta_gpu_kms_flip_closure_container_free (closure_container); - } - -@@ -380,6 +416,17 @@ meta_gpu_kms_get_file_path (MetaGpuKms *gpu_kms) - return gpu_kms->file_path; - } - -+int64_t -+meta_gpu_kms_get_current_time_ns (MetaGpuKms *gpu_kms) -+{ -+ struct timespec ts; -+ -+ if (clock_gettime (gpu_kms->clock_id, &ts)) -+ return 0; -+ -+ return timespec_to_nanoseconds (&ts); -+} -+ - void - meta_gpu_kms_set_power_save_mode (MetaGpuKms *gpu_kms, - uint64_t state) -@@ -679,6 +726,17 @@ init_crtcs (MetaGpuKms *gpu_kms, - meta_gpu_take_crtcs (gpu, crtcs); - } - -+static void -+init_frame_clock (MetaGpuKms *gpu_kms) -+{ -+ uint64_t uses_monotonic; -+ -+ if (drmGetCap (gpu_kms->fd, DRM_CAP_TIMESTAMP_MONOTONIC, &uses_monotonic) != 0) -+ uses_monotonic = 0; -+ -+ gpu_kms->clock_id = uses_monotonic ? CLOCK_MONOTONIC : CLOCK_REALTIME; -+} -+ - static void - init_outputs (MetaGpuKms *gpu_kms, - MetaKmsResources *resources) -@@ -806,6 +864,7 @@ meta_gpu_kms_read_current (MetaGpu *gpu, - init_modes (gpu_kms, resources.resources); - init_crtcs (gpu_kms, &resources); - init_outputs (gpu_kms, &resources); -+ init_frame_clock (gpu_kms); - - meta_kms_resources_release (&resources); - -diff --git a/src/backends/native/meta-gpu-kms.h b/src/backends/native/meta-gpu-kms.h -index 5f77f191a..3e3f45c7e 100644 ---- a/src/backends/native/meta-gpu-kms.h -+++ b/src/backends/native/meta-gpu-kms.h -@@ -73,6 +73,8 @@ int meta_gpu_kms_get_fd (MetaGpuKms *gpu_kms); - - const char * meta_gpu_kms_get_file_path (MetaGpuKms *gpu_kms); - -+int64_t meta_gpu_kms_get_current_time_ns (MetaGpuKms *gpu_kms); -+ - void meta_gpu_kms_get_max_buffer_size (MetaGpuKms *gpu_kms, - int *max_width, - int *max_height); -@@ -89,6 +91,7 @@ gboolean meta_drm_mode_equal (const drmModeModeInfo *one, - float meta_calculate_drm_mode_refresh_rate (const drmModeModeInfo *mode); - - MetaGpuKmsFlipClosureContainer * meta_gpu_kms_wrap_flip_closure (MetaGpuKms *gpu_kms, -+ MetaCrtc *crtc, - GClosure *flip_closure); - - void meta_gpu_kms_flip_closure_container_free (MetaGpuKmsFlipClosureContainer *closure_container); -diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c -index f58e6b3e0..b192c3641 100644 ---- a/src/backends/native/meta-renderer-native.c -+++ b/src/backends/native/meta-renderer-native.c -@@ -62,6 +62,7 @@ - #include "backends/native/meta-monitor-manager-kms.h" - #include "backends/native/meta-renderer-native.h" - #include "backends/native/meta-renderer-native-gles3.h" -+#include "meta-marshal.h" - #include "cogl/cogl.h" - #include "core/boxes-private.h" - -@@ -1159,6 +1160,8 @@ meta_onscreen_native_swap_drm_fb (CoglOnscreen *onscreen) - static void - on_crtc_flipped (GClosure *closure, - MetaGpuKms *gpu_kms, -+ MetaCrtc *crtc, -+ int64_t page_flip_time_ns, - MetaRendererView *view) - { - ClutterStageView *stage_view = CLUTTER_STAGE_VIEW (view); -@@ -1169,6 +1172,24 @@ on_crtc_flipped (GClosure *closure, - MetaOnscreenNative *onscreen_native = onscreen_egl->platform; - MetaRendererNative *renderer_native = onscreen_native->renderer_native; - MetaGpuKms *render_gpu = onscreen_native->render_gpu; -+ CoglFrameInfo *frame_info; -+ float refresh_rate; -+ -+ frame_info = g_queue_peek_tail (&onscreen->pending_frame_infos); -+ refresh_rate = crtc && crtc->current_mode ? -+ crtc->current_mode->refresh_rate : -+ 0.0f; -+ -+ /* Only keep the frame info for the fastest CRTC in use, which may not be -+ * the first one to complete a flip. By only telling the compositor about the -+ * fastest monitor(s) we direct it to produce new frames fast enough to -+ * satisfy all monitors. -+ */ -+ if (refresh_rate >= frame_info->refresh_rate) -+ { -+ frame_info->presentation_time = page_flip_time_ns; -+ frame_info->refresh_rate = refresh_rate; -+ } - - if (gpu_kms != render_gpu) - { -@@ -1299,7 +1320,9 @@ flip_egl_stream (MetaOnscreenNative *onscreen_native, - return FALSE; - - closure_container = -- meta_gpu_kms_wrap_flip_closure (onscreen_native->render_gpu, flip_closure); -+ meta_gpu_kms_wrap_flip_closure (onscreen_native->render_gpu, -+ NULL, -+ flip_closure); - - acquire_attribs = (EGLAttrib[]) { - EGL_DRM_FLIP_EVENT_DATA_NV, -@@ -1542,7 +1565,7 @@ meta_onscreen_native_flip_crtcs (CoglOnscreen *onscreen) - flip_closure = g_cclosure_new (G_CALLBACK (on_crtc_flipped), - g_object_ref (view), - (GClosureNotify) flip_closure_destroyed); -- g_closure_set_marshal (flip_closure, g_cclosure_marshal_VOID__OBJECT); -+ g_closure_set_marshal (flip_closure, meta_marshal_VOID__OBJECT_OBJECT_INT64); - - /* Either flip the CRTC's of the monitor info, if we are drawing just part - * of the stage, or all of the CRTC's if we are drawing the whole stage. -@@ -2687,6 +2710,15 @@ meta_renderer_native_create_offscreen (MetaRendererNative *renderer, - return fb; - } - -+static int64_t -+meta_renderer_native_get_clock_time (CoglContext *context) -+{ -+ CoglRenderer *cogl_renderer = cogl_context_get_renderer (context); -+ MetaGpuKms *gpu_kms = cogl_renderer->custom_winsys_user_data; -+ -+ return meta_gpu_kms_get_current_time_ns (gpu_kms); -+} -+ - static const CoglWinsysVtable * - get_native_cogl_winsys_vtable (CoglRenderer *cogl_renderer) - { -@@ -2715,6 +2747,8 @@ get_native_cogl_winsys_vtable (CoglRenderer *cogl_renderer) - vtable.onscreen_swap_buffers_with_damage = - meta_onscreen_native_swap_buffers_with_damage; - -+ vtable.context_get_clock_time = meta_renderer_native_get_clock_time; -+ - vtable_inited = TRUE; - } - -diff --git a/src/meta-marshal.list b/src/meta-marshal.list -new file mode 100644 -index 000000000..c1f4781d2 ---- /dev/null -+++ b/src/meta-marshal.list -@@ -0,0 +1 @@ -+VOID:OBJECT,OBJECT,INT64 --- -2.18.1 - - -From 1b3109809167c17bfa8713ce906c95e66d2c042f Mon Sep 17 00:00:00 2001 -From: Daniel van Vugt <daniel.van.vugt@canonical.com> -Date: Tue, 10 Jul 2018 17:46:02 +0800 -Subject: [PATCH 2/2] renderer-native: Advertise _FEATURE_SWAP_THROTTLE - -Because it is implemented and always on. By advertising this fact -the master clock is able to sync to the native refresh rate instead -of always using the fallback of 60.00Hz. - -https://bugzilla.gnome.org/show_bug.cgi?id=781296 ---- - src/backends/native/meta-renderer-native.c | 15 +++++++++++++-- - 1 file changed, 13 insertions(+), 2 deletions(-) - -diff --git a/src/backends/native/meta-renderer-native.c b/src/backends/native/meta-renderer-native.c -index b192c3641..929e9ca90 100644 ---- a/src/backends/native/meta-renderer-native.c -+++ b/src/backends/native/meta-renderer-native.c -@@ -2005,6 +2005,13 @@ meta_renderer_native_init_egl_context (CoglContext *cogl_context, - COGL_WINSYS_FEATURE_MULTIPLE_ONSCREEN, - TRUE); - -+ /* COGL_WINSYS_FEATURE_SWAP_THROTTLE is always true for this renderer -+ * because we have the call to wait_for_pending_flips on every frame. -+ */ -+ COGL_FLAGS_SET (cogl_context->winsys_features, -+ COGL_WINSYS_FEATURE_SWAP_THROTTLE, -+ TRUE); -+ - #ifdef HAVE_EGL_DEVICE - if (renderer_gpu_data->mode == META_RENDERER_NATIVE_MODE_EGL_DEVICE) - COGL_FLAGS_SET (cogl_context->features, -@@ -2639,8 +2646,12 @@ meta_renderer_native_create_onscreen (MetaRendererNative *renderer_native, - } - - onscreen = cogl_onscreen_new (context, width, height); -- cogl_onscreen_set_swap_throttled (onscreen, -- _clutter_get_sync_to_vblank ()); -+ -+ /* We have wait_for_pending_flips hardcoded, so throttling always. */ -+ cogl_onscreen_set_swap_throttled (onscreen, TRUE); -+ if (!_clutter_get_sync_to_vblank ()) -+ g_warning ("Request to disable sync-to-vblank is being ignored. " -+ "MetaRendererNative does not support disabling it."); - - if (!cogl_framebuffer_allocate (COGL_FRAMEBUFFER (onscreen), error)) - { --- -2.18.1 - diff --git a/365.patch b/365.patch deleted file mode 100644 index 0500009f5798..000000000000 --- a/365.patch +++ /dev/null @@ -1,14 +0,0 @@ -diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c -index e7dea4292..103a99cd6 100644 ---- a/clutter/clutter/clutter-stage.c -+++ b/clutter/clutter/clutter-stage.c -@@ -1564,7 +1564,8 @@ _clutter_stage_do_pick_on_view (ClutterStage *stage, - */ - cogl_push_framebuffer (fb); - context->pick_mode = mode; -- _clutter_stage_paint_view (stage, view, NULL); -+ -+ clutter_stage_do_paint_view (stage, view, NULL); - context->pick_mode = CLUTTER_PICK_NONE; - priv->cached_pick_mode = mode; - cogl_pop_framebuffer (); @@ -13,8 +13,7 @@ _revert=1 pkgname=mutter-781835-workaround -_pkgname=mutter -pkgver=3.30.2+7 +pkgver=3.32.0 pkgrel=15 pkgdesc="A window manager for GNOME. This package reverts a commit which may causes performance problems for nvidia driver users. Some performance patches also included." url="https://gitlab.gnome.org/GNOME/mutter" @@ -27,75 +26,27 @@ makedepends=(intltool gobject-introspection git egl-wayland) provides=(mutter) conflicts=(mutter) groups=(gnome) -_commit=bcd6103c44ff74ebffd1737b8e0f3a952b83bd54 # tags/3.30.2^0 -source=("git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit" - 216.patch 318.patch 365.patch - https://gitlab.gnome.org/GNOME/mutter/merge_requests/347.patch - startup-notification.patch +_commit=efb1ee97308653a28ed4448b0c405e6faf2c4f40 # tags/3.32.0^0 +source=("$pkgname::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit" + 216.patch revert.patch) sha256sums=('SKIP' - '1ae59343f3f5838babdfe1400962bb315d8b49189deb05bb516966b922cd26a5' - 'd4dcffa9c407e60e321670caaa44dcd6e2bfda7221d73ec4145a985c825a43b3' - 'a0c86a5770e34973e074dd542dd1c4abb3b7e45b7a429a8aa6a7d1e73df39796' - '1343ed3c21ca7ab4f179b864eae4b915b910406c3eb8259399973c29822f751c' - '00d5e77c94e83e1987cc443ed7c47303aa33367ce912b2f665bcd34f88890a17' + 'ed4f3cf738a3cffdf8a6e1a352bf24d74078c3b26fb9262c5746e0d95b9df756' '2d2e305e0a6cca087bb8164f81bdc0ae7a5ca8e9c13c81d7fd5252eb3563fc09') +pkgver() { + cd $pkgname + + git describe --tags | sed 's/-/+/g' +} + prepare() { - cd $_pkgname + cd $pkgname ## Unmerged performance bits # Commented multiline comment start, remove the # below to disable the patches # : ' - # workaround to automatically resolve conflicts with git mergetool - git config user.email "you@example.com" - git config user.name "Your Name" - - git remote add vanvugt https://gitlab.gnome.org/vanvugt/mutter.git || true - git fetch vanvugt - - # clutter: Deliver events sooner when possible - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/168 - # Disabled as may cause stutter when using mouse with high polling rate - # git cherry-pick b17e1c0c - - # clutter: Fix offscreen-effect painting of clones - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/117/commits - git cherry-pick 9a466f28 - - # Geometric (GPU-less) picking - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/189 - git apply -3 ../347.patch - git add -A && git commit -m "347" - - # clutter-actor: Add detail to captured-event signal [performance] - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/283 - git cherry-pick 9ed3a7d1 - - # clutter-stage-cogl: Reduce output latency and reduce missed frames too [performance] - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/281/commits - git cherry-pick e6e3448c^..5b4f45db - - # Consolidate all frame throttling into clutter-stage-cogl [performance] - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/363 - git cherry-pick 20629bd2^..781f68db -Xtheirs - - # clutter: Avoid redundant margin changes - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/399 - git cherry-pick e0fd7a6d - - # cursor-renderer-native: Floor the cursor position instead of rounding - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/353/commits - git cherry-pick 8d514095 - - # Avoid some parent actor relayouts/redraws - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/202 - git cherry-pick 9a843857^..ffaec917 - - # Unassorted performance fixes - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/195 - git cherry-pick a7df4594..1d73533f # ' # Commented multiline comment end, remove the # above if disabling the patches @@ -108,38 +59,18 @@ prepare() { # cogl-winsys-glx: Fix frame notification race/leak [performance] # https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 git apply -3 ../216.patch - - #Sync to the hardware refresh rate, not just 60.00Hz [performance] - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/318 - git apply -3 ../318.patch - - # clutter-stage: Don't emit "after-paint" when picking [performance] - # https://gitlab.gnome.org/GNOME/mutter/merge_requests/365 - git apply -3 ../365.patch - - # https://bugs.archlinux.org/task/51940 - # As of 2018-05-08: Still needed, according to fmuellner - git apply -3 ../startup-notification.patch - - NOCONFIGURE=1 ./autogen.sh } -build() { - cd $_pkgname - export CFLAGS="-march=native -Ofast -pipe" - ./configure --prefix=/usr --sysconfdir=/etc --localstatedir=/var \ - --libexecdir=/usr/lib --disable-static \ - --disable-schemas-compile --enable-compile-warnings=minimum \ - --enable-gtk-doc --enable-egl-device --enable-remote-desktop +: ' not working atm +check() ( + mkdir -p -m 700 "${XDG_RUNTIME_DIR:=$PWD/runtime-dir}" + glib-compile-schemas "${GSETTINGS_SCHEMA_DIR:=$PWD/build/data}" + export XDG_RUNTIME_DIR GSETTINGS_SCHEMA_DIR - # https://bugzilla.gnome.org/show_bug.cgi?id=655517 - sed -e 's/ -shared / -Wl,-O1,--as-needed\0/g' \ - -i {.,cogl,clutter}/libtool - - make -} + dbus-run-session xvfb-run -s '+iglx -noreset' meson test -C build +) +' package() { - cd $_pkgname - make DESTDIR="$pkgdir" install + DESTDIR="$pkgdir" meson install -C build } diff --git a/startup-notification.patch b/startup-notification.patch deleted file mode 100644 index 2b70474515a9..000000000000 --- a/startup-notification.patch +++ /dev/null @@ -1,46 +0,0 @@ -From 143917acf809202cb25590c48bc027639c1f914b Mon Sep 17 00:00:00 2001 -From: =?UTF-8?q?Florian=20M=C3=BCllner?= <fmuellner@gnome.org> -Date: Thu, 20 Oct 2016 18:00:04 +0200 -Subject: [PATCH] gtk-shell: Work around non-working startup notifications - -GNOME Shell relies on the MetaScreen::startup-sequence-changed signal, -which is tied to (lib)startup-notification and therefore X11. As a result, -when we remove the startup sequence of a wayland client, GNOME Shell will -not be notified about this until startup-notification's timeout is hit. -As a temporary stop-gap, go through XWayland even for wayland clients, -so that the signal is emitted when expected. - -https://bugzilla.gnome.org/show_bug.cgi?id=768531 ---- - src/wayland/meta-wayland-gtk-shell.c | 10 ++++++++++ - 1 file changed, 10 insertions(+) - -diff --git a/src/wayland/meta-wayland-gtk-shell.c b/src/wayland/meta-wayland-gtk-shell.c -index 474595b18..58375674a 100644 ---- a/src/wayland/meta-wayland-gtk-shell.c -+++ b/src/wayland/meta-wayland-gtk-shell.c -@@ -321,11 +321,21 @@ gtk_shell_set_startup_id (struct wl_client *client, - struct wl_resource *resource, - const char *startup_id) - { -+#if 0 - MetaDisplay *display; - - display = meta_get_display (); - meta_startup_notification_remove_sequence (display->startup_notification, - startup_id); -+#else -+ /* HACK: MetaScreen::startup-sequence-changed is currently tied to -+ (lib)startup-notification, which means it only works on X11; -+ so for now, always go through XWayland, even for wayland clients */ -+ gdk_x11_display_broadcast_startup_message (gdk_display_get_default (), -+ "remove", -+ "ID", startup_id, -+ NULL); -+#endif - } - - static void --- -2.19.1 - |