summarylogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.SRCINFO14
-rw-r--r--216.patch25
-rw-r--r--318.patch420
-rw-r--r--365.patch14
-rw-r--r--PKGBUILD111
-rw-r--r--startup-notification.patch46
6 files changed, 38 insertions, 592 deletions
diff --git a/.SRCINFO b/.SRCINFO
index 7b4eb3f0058a..200e19b14f22 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -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 (&params[0], G_TYPE_POINTER);
- g_value_set_pointer (&params[0], flip_closure);
- g_value_init (&params[1], G_TYPE_OBJECT);
- g_value_set_object (&params[1], gpu_kms);
-- g_closure_invoke (flip_closure, NULL, 2, params, NULL);
-+ g_value_init (&params[2], G_TYPE_OBJECT);
-+ g_value_set_object (&params[2], crtc);
-+ g_value_init (&params[3], G_TYPE_INT64);
-+ g_value_set_int64 (&params[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 ();
diff --git a/PKGBUILD b/PKGBUILD
index b53df480ea8c..5a412b7bce39 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -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
-