diff options
author | Norbert Pfeiler | 2019-03-16 07:53:58 +0100 |
---|---|---|
committer | Norbert Pfeiler | 2019-03-16 07:54:55 +0100 |
commit | 55085449f6550515ce32043cd6513d8458b10d5a (patch) | |
tree | 9ac2adb63c4be145cb411e168ae21d279cc19291 | |
parent | 10ea55396740cae0b41e3345f3126df7c8cd44da (diff) | |
download | aur-55085449f6550515ce32043cd6513d8458b10d5a.tar.gz |
3.32.0
-rw-r--r-- | .SRCINFO | 20 | ||||
-rw-r--r-- | 216.patch | 128 | ||||
-rw-r--r-- | PKGBUILD | 57 |
3 files changed, 163 insertions, 42 deletions
@@ -1,17 +1,20 @@ # Generated by mksrcinfo v8 -# Thu Nov 15 04:16:18 UTC 2018 +# Sat Mar 16 06:54:19 UTC 2019 pkgbase = mutter-catalyst pkgdesc = A window manager for GNOME with patches for catalyst compatibility - pkgver = 3.30.2 + pkgver = 3.32.0 pkgrel = 1 url = https://gitlab.gnome.org/GNOME/mutter arch = x86_64 groups = gnome license = GPL + checkdepends = xorg-server-xvfb makedepends = intltool makedepends = gobject-introspection makedepends = git makedepends = egl-wayland + makedepends = meson + makedepends = xorg-server depends = dconf depends = gobject-introspection-runtime depends = gsettings-desktop-schemas @@ -26,17 +29,16 @@ pkgbase = mutter-catalyst depends = libgudev depends = libinput depends = pipewire - provides = mutter=3.30.2 + depends = xorg-server-xwayland + provides = mutter=3.32.0 conflicts = mutter - conflicts = gnome-shell>1:3.30.2+999 - source = git+https://gitlab.gnome.org/GNOME/mutter.git#commit=bcd6103c44ff74ebffd1737b8e0f3a952b83bd54 - source = https://gitlab.gnome.org/vanvugt/mutter/commit/fc02b040f3b750b0513f812813351c09795950f6.patch - source = startup-notification.patch + conflicts = gnome-shell>1:3.32.0+999 + source = git+https://gitlab.gnome.org/GNOME/mutter.git#commit=efb1ee97308653a28ed4448b0c405e6faf2c4f40 + source = 216.patch source = catalyst-workaround-v2.patch source = catalyst mutter cogl.patch sha256sums = SKIP - sha256sums = dffa2ca19281b9fa5a81bf80bd46a8eae78325c7e1f8b2a25c33945aa7cc0903 - sha256sums = 5a35ca4794fc361219658d9fae24a3ca21a365f2cb1901702961ac869c759366 + sha256sums = ed4f3cf738a3cffdf8a6e1a352bf24d74078c3b26fb9262c5746e0d95b9df756 sha256sums = 2564846288ea55262d681d38f7e43609c63e94990df1cb0a6b99e16e2c073d14 sha256sums = 55079a9daddedc22d9fe4dcfe2e87607345dfafb370f8e7fb6a98c0acae3348a diff --git a/216.patch b/216.patch new file mode 100644 index 000000000000..ee92895446d8 --- /dev/null +++ b/216.patch @@ -0,0 +1,128 @@ +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 + +If a second `set_{sync,complete}_pending` was queued before the idle +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. + +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 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; +- 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; + + GThread *swap_wait_thread; + GQueue *swap_wait_queue; +@@ -347,35 +347,35 @@ flush_pending_notifications_cb (void *data, + { + CoglOnscreen *onscreen = COGL_ONSCREEN (framebuffer); + CoglOnscreenGLX *glx_onscreen = onscreen->winsys; +- 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 +- * we need to clear the flag before invoking the callback */ +- glx_onscreen->pending_sync_notify = FALSE; +- glx_onscreen->pending_complete_notify = FALSE; +- +- if (pending_sync_notify) ++ while (glx_onscreen->pending_sync_notify > 0 || ++ glx_onscreen->pending_complete_notify > 0 || ++ glx_onscreen->pending_resize_notify > 0) + { +- CoglFrameInfo *info = g_queue_peek_head (&onscreen->pending_frame_infos); +- +- _cogl_onscreen_notify_frame_sync (onscreen, info); +- } ++ if (glx_onscreen->pending_sync_notify > 0) ++ { ++ CoglFrameInfo *info = ++ g_queue_peek_head (&onscreen->pending_frame_infos); + +- if (pending_complete_notify) +- { +- CoglFrameInfo *info = g_queue_pop_head (&onscreen->pending_frame_infos); ++ _cogl_onscreen_notify_frame_sync (onscreen, info); ++ glx_onscreen->pending_sync_notify--; ++ } + +- _cogl_onscreen_notify_complete (onscreen, info); ++ if (glx_onscreen->pending_complete_notify > 0) ++ { ++ CoglFrameInfo *info = ++ g_queue_pop_head (&onscreen->pending_frame_infos); + +- cogl_object_unref (info); +- } ++ _cogl_onscreen_notify_complete (onscreen, info); ++ cogl_object_unref (info); ++ glx_onscreen->pending_complete_notify--; ++ } + +- if (glx_onscreen->pending_resize_notify) +- { +- _cogl_onscreen_notify_resize (onscreen); +- glx_onscreen->pending_resize_notify = FALSE; ++ if (glx_onscreen->pending_resize_notify > 0) ++ { ++ _cogl_onscreen_notify_resize (onscreen); ++ glx_onscreen->pending_resize_notify--; ++ } + } + } + } +@@ -417,7 +417,7 @@ set_sync_pending (CoglOnscreen *onscreen) + NULL); + } + +- glx_onscreen->pending_sync_notify = TRUE; ++ glx_onscreen->pending_sync_notify++; + } + + static void +@@ -440,7 +440,7 @@ set_complete_pending (CoglOnscreen *onscreen) + NULL); + } + +- glx_onscreen->pending_complete_notify = TRUE; ++ glx_onscreen->pending_complete_notify++; + } + + static void +@@ -533,7 +533,7 @@ notify_resize (CoglContext *context, + NULL); + } + +- glx_onscreen->pending_resize_notify = TRUE; ++ glx_onscreen->pending_resize_notify++; + + if (!xlib_onscreen->is_foreign_xwin) + { +-- +2.18.1 + @@ -5,7 +5,7 @@ _realname=mutter pkgname=$_realname-catalyst -pkgver=3.30.2 +pkgver=3.32.0 pkgrel=1 pkgdesc="A window manager for GNOME with patches for catalyst compatibility" url="https://gitlab.gnome.org/GNOME/mutter" @@ -25,24 +25,26 @@ depends=('dconf' 'libgudev' 'libinput' 'pipewire' + 'xorg-server-xwayland' ) makedepends=('intltool' 'gobject-introspection' 'git' 'egl-wayland' + 'meson' + 'xorg-server' ) +checkdepends=('xorg-server-xvfb') conflicts=('mutter' "gnome-shell>1:${pkgver:0:6}+999") provides=("mutter=${pkgver}") groups=('gnome') -_commit=bcd6103c44ff74ebffd1737b8e0f3a952b83bd54 # tags/3.30.2^0 +_commit=efb1ee97308653a28ed4448b0c405e6faf2c4f40 # tags/3.32.0^0 source=("git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit" - "https://gitlab.gnome.org/vanvugt/mutter/commit/fc02b040f3b750b0513f812813351c09795950f6.patch" - "startup-notification.patch" - "catalyst-workaround-v2.patch" - "catalyst mutter cogl.patch") + 216.patch + "catalyst-workaround-v2.patch" + "catalyst mutter cogl.patch") sha256sums=('SKIP' - 'dffa2ca19281b9fa5a81bf80bd46a8eae78325c7e1f8b2a25c33945aa7cc0903' - '5a35ca4794fc361219658d9fae24a3ca21a365f2cb1901702961ac869c759366' + 'ed4f3cf738a3cffdf8a6e1a352bf24d74078c3b26fb9262c5746e0d95b9df756' '2564846288ea55262d681d38f7e43609c63e94990df1cb0a6b99e16e2c073d14' '55079a9daddedc22d9fe4dcfe2e87607345dfafb370f8e7fb6a98c0acae3348a') @@ -55,11 +57,7 @@ prepare() { cd "$_realname" # https://gitlab.gnome.org/GNOME/mutter/merge_requests/216 - git apply -3 ../fc02b040f3b750b0513f812813351c09795950f6.patch - - # https://bugs.archlinux.org/task/51940 - # As of 2018-05-08: Still needed, according to fmuellner - git apply -3 ../startup-notification.patch + git apply -3 ../216.patch # https://bugzilla.gnome.org/show_bug.cgi?id=741581 echo "Skipping call to output_set_presentation_xrandr to fix issue with catalyst" @@ -68,31 +66,24 @@ prepare() { echo "workaround compatibility shaders used in fw compat ctx in cogl" git apply -3 "${srcdir}/catalyst mutter cogl.patch" echo "Patches applied" - - NOCONFIGURE=1 ./autogen.sh } build() { - cd "$_realname" - ./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 + arch-meson $_realname build \ + -D egl_device=true \ + -D wayland_eglstream=true \ + -D installed_tests=false + ninja -C build +} - # https://bugzilla.gnome.org/show_bug.cgi?id=655517 - sed -e 's/ -shared / -Wl,-O1,--as-needed\0/g' \ - -i {.,cogl,clutter}/libtool +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 - make -} + dbus-run-session xvfb-run -s '+iglx -noreset' meson test -C build +) package() { - cd "$_realname" - make DESTDIR="$pkgdir" install + DESTDIR="$pkgdir" meson install -C build } |