summarylogtreecommitdiffstats
diff options
context:
space:
mode:
authorTérence Clastres2019-12-28 20:30:17 +0100
committerTérence Clastres2019-12-28 21:07:07 +0100
commitd042f809aaff7bc0d8bfc8308eca21420faec009 (patch)
treeaf35dfa510dadf6f3bb904dab4bf342bb71b4f12
parent9e00bdb2973671ae22201fd17bd493604ecfdab0 (diff)
downloadaur-d042f809aaff7bc0d8bfc8308eca21420faec009.tar.gz
Sync with [extra]
-rw-r--r--.SRCINFO11
-rw-r--r--0001-EGL-Include-EGL-eglmesaext.h.patch (renamed from fix-build.patch)37
-rw-r--r--0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch (renamed from 918.patch)22
-rw-r--r--0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch64
-rw-r--r--PKGBUILD19
-rw-r--r--mutter.install7
6 files changed, 127 insertions, 33 deletions
diff --git a/.SRCINFO b/.SRCINFO
index f8117a3bcb72..69c08d8305b2 100644
--- a/.SRCINFO
+++ b/.SRCINFO
@@ -3,6 +3,7 @@ pkgbase = mutter-performance
pkgver = 3.34.1+66+gc0e76186d
pkgrel = 1
url = https://gitlab.gnome.org/GNOME/mutter
+ install = mutter.install
arch = x86_64
groups = gnome
license = GPL
@@ -33,11 +34,13 @@ pkgbase = mutter-performance
conflicts = mutter
replaces = mutter-781835-workaround
source = mutter-performance::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=c0e76186da5b7baf7c8804c0ffa80232a5a6bf98
- source = 918.patch
- source = fix-build.patch
+ source = 0001-EGL-Include-EGL-eglmesaext.h.patch
+ source = 0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch
+ source = 0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch
sha256sums = SKIP
- sha256sums = 775fbcd209a170b6ca13326367ef62b8d35acff16019553c40eb24f0684c3495
- sha256sums = 28aa24daed161f2566ca2b159beb43285184c533956b851a7eb318de741da935
+ sha256sums = 8440403c1862187b648e3ddd20056666f1a9fea38d0511d7bdf4422ce70b4139
+ sha256sums = 9f6881cd9fe2031b7119288972d3b921358f387b8cbfbd4c624a0dc33abce8e2
+ sha256sums = 0ad4084834b6314873d2dc0a9c8bb3b30f0a6106fa44aac98a54129ec0fc0b2c
pkgname = mutter-performance
diff --git a/fix-build.patch b/0001-EGL-Include-EGL-eglmesaext.h.patch
index 79d1e6dec87b..aebc51736292 100644
--- a/fix-build.patch
+++ b/0001-EGL-Include-EGL-eglmesaext.h.patch
@@ -1,13 +1,23 @@
+From f494725ec52f91c9f7cbb1c76cb52beb2a7e35d5 Mon Sep 17 00:00:00 2001
+From: "Jan Alexander Steffens (heftig)" <jan.steffens@gmail.com>
+Date: Sun, 20 Oct 2019 12:04:31 +0200
+Subject: [PATCH 1/3] EGL: Include EGL/eglmesaext.h
+
+The eglext.h shipped by libglvnd does not include the Mesa extensions,
+unlike the header shipped in Mesa.
+
+Fixes https://gitlab.gnome.org/GNOME/mutter/issues/876
+---
cogl/cogl/meson.build | 2 +-
src/backends/meta-egl-ext.h | 1 +
src/backends/meta-egl.c | 1 +
src/backends/meta-egl.h | 1 +
4 files changed, 4 insertions(+), 1 deletion(-)
-diff --git c/cogl/cogl/meson.build i/cogl/cogl/meson.build
+diff --git a/cogl/cogl/meson.build b/cogl/cogl/meson.build
index 1057ef955..9a642947d 100644
---- c/cogl/cogl/meson.build
-+++ i/cogl/cogl/meson.build
+--- a/cogl/cogl/meson.build
++++ b/cogl/cogl/meson.build
@@ -48,7 +48,7 @@ cogl_gl_header_h = configure_file(
built_headers += [cogl_gl_header_h]
@@ -17,10 +27,10 @@ index 1057ef955..9a642947d 100644
else
cogl_egl_includes_string = ''
endif
-diff --git c/src/backends/meta-egl-ext.h i/src/backends/meta-egl-ext.h
+diff --git a/src/backends/meta-egl-ext.h b/src/backends/meta-egl-ext.h
index 8705e7d5b..db0b74f76 100644
---- c/src/backends/meta-egl-ext.h
-+++ i/src/backends/meta-egl-ext.h
+--- a/src/backends/meta-egl-ext.h
++++ b/src/backends/meta-egl-ext.h
@@ -29,6 +29,7 @@
#include <EGL/egl.h>
@@ -29,10 +39,10 @@ index 8705e7d5b..db0b74f76 100644
/*
* This is a little different to the tests shipped with EGL implementations,
-diff --git c/src/backends/meta-egl.c i/src/backends/meta-egl.c
+diff --git a/src/backends/meta-egl.c b/src/backends/meta-egl.c
index 6554be935..fdeff4f77 100644
---- c/src/backends/meta-egl.c
-+++ i/src/backends/meta-egl.c
+--- a/src/backends/meta-egl.c
++++ b/src/backends/meta-egl.c
@@ -27,6 +27,7 @@
#include <EGL/egl.h>
@@ -41,10 +51,10 @@ index 6554be935..fdeff4f77 100644
#include <gio/gio.h>
#include <glib.h>
#include <glib-object.h>
-diff --git c/src/backends/meta-egl.h i/src/backends/meta-egl.h
+diff --git a/src/backends/meta-egl.h b/src/backends/meta-egl.h
index f2a816445..4591e7d85 100644
---- c/src/backends/meta-egl.h
-+++ i/src/backends/meta-egl.h
+--- a/src/backends/meta-egl.h
++++ b/src/backends/meta-egl.h
@@ -28,6 +28,7 @@
#include <EGL/egl.h>
@@ -53,3 +63,6 @@ index f2a816445..4591e7d85 100644
#include <glib-object.h>
#define META_EGL_ERROR meta_egl_error_quark ()
+--
+2.24.1
+
diff --git a/918.patch b/0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch
index a59a483421bd..07c4f2e68b75 100644
--- a/918.patch
+++ b/0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch
@@ -1,7 +1,7 @@
-From 1b26e414eccc33e26c464b282739315cb24f8f38 Mon Sep 17 00:00:00 2001
+From a2789eef9adbb8fb5e3ba1c278041996fa69eedc Mon Sep 17 00:00:00 2001
From: Robert Mader <robert.mader@posteo.de>
Date: Mon, 4 Nov 2019 11:45:13 +0100
-Subject: [PATCH] surface-actor-wayland: Do not send frame callbacks if the
+Subject: [PATCH 2/3] surface-actor-wayland: Do not send frame callbacks if the
actor is obscured
`meta_surface_actor_is_obscured` implies that the actor got successfully culled
@@ -11,23 +11,23 @@ unnecessary client work.
https://gitlab.gnome.org/GNOME/mutter/merge_requests/918
---
- src/compositor/meta-surface-actor-wayland.c | 3 +++
- 1 file changed, 3 insertions(+)
+ src/compositor/meta-surface-actor-wayland.c | 3 ++-
+ 1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/compositor/meta-surface-actor-wayland.c b/src/compositor/meta-surface-actor-wayland.c
-index 0b1c4ef01..e0335348f 100644
+index 1c933d554..e16f53ff2 100644
--- a/src/compositor/meta-surface-actor-wayland.c
+++ b/src/compositor/meta-surface-actor-wayland.c
-@@ -103,6 +103,9 @@ meta_surface_actor_wayland_paint (ClutterActor *actor)
+@@ -115,7 +115,8 @@ meta_surface_actor_wayland_paint (ClutterActor *actor)
{
MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (actor);
-+ if (meta_surface_actor_is_obscured (META_SURFACE_ACTOR (actor)))
-+ return;
-+
- if (self->surface)
+- if (self->surface)
++ if (self->surface &&
++ !meta_surface_actor_is_obscured (META_SURFACE_ACTOR (actor)))
{
MetaWaylandCompositor *compositor = self->surface->compositor;
+
--
-2.22.0
+2.24.1
diff --git a/0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch b/0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch
new file mode 100644
index 000000000000..2ebb63990eba
--- /dev/null
+++ b/0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch
@@ -0,0 +1,64 @@
+From 722021dc1827bd75a7f4086f0ce55da6b0214a34 Mon Sep 17 00:00:00 2001
+From: Robert Mader <robert.mader@posteo.de>
+Date: Wed, 4 Dec 2019 18:54:42 +0100
+Subject: [PATCH 3/3] xwayland: Do not queue frame callbacks unconditionally
+
+The removed comment is not longer true: XWayland schedules its VSYNC
+from frame callbacks nowadays. Only sending callbacks when the surface
+actor is unobscured makes XWayland throttle its VSYNC to 1/sec,
+reducing repaints in many cases.
+
+Follow up of https://gitlab.gnome.org/GNOME/mutter/merge_requests/918
+
+https://gitlab.gnome.org/GNOME/mutter/merge_requests/956
+---
+ src/wayland/meta-xwayland.c | 26 --------------------------
+ 1 file changed, 26 deletions(-)
+
+diff --git a/src/wayland/meta-xwayland.c b/src/wayland/meta-xwayland.c
+index f1ad12aa3..17d7a4b20 100644
+--- a/src/wayland/meta-xwayland.c
++++ b/src/wayland/meta-xwayland.c
+@@ -876,31 +876,6 @@ xwayland_surface_assigned (MetaWaylandSurfaceRole *surface_role)
+ surface_role_class->assigned (surface_role);
+ }
+
+-static void
+-xwayland_surface_commit (MetaWaylandSurfaceRole *surface_role,
+- MetaWaylandPendingState *pending)
+-{
+- MetaWaylandSurface *surface =
+- meta_wayland_surface_role_get_surface (surface_role);
+- MetaWaylandSurfaceRoleClass *surface_role_class =
+- META_WAYLAND_SURFACE_ROLE_CLASS (meta_wayland_surface_role_xwayland_parent_class);
+-
+- /* For Xwayland windows, throttling frames when the window isn't actually
+- * drawn is less useful, because Xwayland still has to do the drawing sent
+- * from the application - the throttling would only be of sending us damage
+- * messages, so we simplify and send frame callbacks after the next paint of
+- * the screen, whether the window was drawn or not.
+- *
+- * Currently it may take a few frames before we draw the window, for not
+- * completely understood reasons, and in that case, not thottling frame
+- * callbacks to drawing has the happy side effect that we avoid showing the
+- * user the initial black frame from when the window is mapped empty.
+- */
+- meta_wayland_surface_queue_pending_state_frame_callbacks (surface, pending);
+-
+- surface_role_class->commit (surface_role, pending);
+-}
+-
+ static MetaWaylandSurface *
+ xwayland_surface_get_toplevel (MetaWaylandSurfaceRole *surface_role)
+ {
+@@ -965,7 +940,6 @@ meta_wayland_surface_role_xwayland_class_init (MetaWaylandSurfaceRoleXWaylandCla
+ object_class->finalize = xwayland_surface_finalize;
+
+ surface_role_class->assigned = xwayland_surface_assigned;
+- surface_role_class->commit = xwayland_surface_commit;
+ surface_role_class->get_toplevel = xwayland_surface_get_toplevel;
+
+ actor_surface_class->get_geometry_scale = xwayland_surface_get_geometry_scale;
+--
+2.24.1
+
diff --git a/PKGBUILD b/PKGBUILD
index 28cf44841a9c..e2b6e9a2344c 100644
--- a/PKGBUILD
+++ b/PKGBUILD
@@ -30,13 +30,16 @@ provides=(mutter mutter-781835-workaround)
conflicts=(mutter)
replaces=(mutter-781835-workaround)
groups=(gnome)
+install=mutter.install
_commit=c0e76186da5b7baf7c8804c0ffa80232a5a6bf98 # gnome-3-34
source=("$pkgname::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit"
- 918.patch
- fix-build.patch)
+ 0001-EGL-Include-EGL-eglmesaext.h.patch
+ 0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch
+ 0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch)
sha256sums=('SKIP'
- '775fbcd209a170b6ca13326367ef62b8d35acff16019553c40eb24f0684c3495'
- '28aa24daed161f2566ca2b159beb43285184c533956b851a7eb318de741da935')
+ '8440403c1862187b648e3ddd20056666f1a9fea38d0511d7bdf4422ce70b4139'
+ '9f6881cd9fe2031b7119288972d3b921358f387b8cbfbd4c624a0dc33abce8e2'
+ '0ad4084834b6314873d2dc0a9c8bb3b30f0a6106fa44aac98a54129ec0fc0b2c')
pkgver() {
cd $pkgname
@@ -159,10 +162,14 @@ prepare() {
pick_mr '!719' 97140ab6346bd29208e99c9c9aab892c2eec0e52 'revert'
pick_mr '!762' e9ba9dc2 'merge'
+ # fix build with libglvnd's EGL headers
+ git apply -3 ../0001-EGL-Include-EGL-eglmesaext.h.patch
+
# https://gitlab.gnome.org/GNOME/mutter/merge_requests/918
- git apply -3 ../918.patch
+ git apply -3 ../0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch
- patch -Np1 < ../fix-build.patch
+ # https://gitlab.gnome.org/GNOME/mutter/merge_requests/956
+ git apply -3 ../0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch
}
diff --git a/mutter.install b/mutter.install
new file mode 100644
index 000000000000..e419c628d76e
--- /dev/null
+++ b/mutter.install
@@ -0,0 +1,7 @@
+post_install() {
+ setcap cap_sys_nice+ep usr/bin/mutter
+}
+
+post_upgrade() {
+ post_install
+}