Date: Thursday, December 12, 2019 @ 21:11:20 Author: heftig Revision: 371325
3.34.2-1 Added: mutter/trunk/0001-EGL-Include-EGL-eglmesaext.h.patch mutter/trunk/0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch mutter/trunk/0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch Modified: mutter/trunk/PKGBUILD Deleted: mutter/trunk/918.patch mutter/trunk/fix-build.diff -----------------------------------------------------------------+ 0001-EGL-Include-EGL-eglmesaext.h.patch | 68 ++++++++++ 0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch | 33 ++++ 0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch | 64 +++++++++ 918.patch | 33 ---- PKGBUILD | 23 ++- fix-build.diff | 55 -------- 6 files changed, 179 insertions(+), 97 deletions(-) Added: 0001-EGL-Include-EGL-eglmesaext.h.patch =================================================================== --- 0001-EGL-Include-EGL-eglmesaext.h.patch (rev 0) +++ 0001-EGL-Include-EGL-eglmesaext.h.patch 2019-12-12 21:11:20 UTC (rev 371325) @@ -0,0 +1,68 @@ +From f494725ec52f91c9f7cbb1c76cb52beb2a7e35d5 Mon Sep 17 00:00:00 2001 +From: "Jan Alexander Steffens (heftig)" <jan.steff...@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 a/cogl/cogl/meson.build b/cogl/cogl/meson.build +index 1057ef955..9a642947d 100644 +--- 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] + + if have_egl +- cogl_egl_includes_string = '#include <EGL/egl.h>\n#include <EGL/eglext.h>' ++ cogl_egl_includes_string = '#include <EGL/egl.h>\n#include <EGL/eglext.h>\n#include <EGL/eglmesaext.h>' + else + cogl_egl_includes_string = '' + endif +diff --git a/src/backends/meta-egl-ext.h b/src/backends/meta-egl-ext.h +index 8705e7d5b..db0b74f76 100644 +--- a/src/backends/meta-egl-ext.h ++++ b/src/backends/meta-egl-ext.h +@@ -29,6 +29,7 @@ + + #include <EGL/egl.h> + #include <EGL/eglext.h> ++#include <EGL/eglmesaext.h> + + /* + * This is a little different to the tests shipped with EGL implementations, +diff --git a/src/backends/meta-egl.c b/src/backends/meta-egl.c +index 6554be935..fdeff4f77 100644 +--- a/src/backends/meta-egl.c ++++ b/src/backends/meta-egl.c +@@ -27,6 +27,7 @@ + + #include <EGL/egl.h> + #include <EGL/eglext.h> ++#include <EGL/eglmesaext.h> + #include <gio/gio.h> + #include <glib.h> + #include <glib-object.h> +diff --git a/src/backends/meta-egl.h b/src/backends/meta-egl.h +index f2a816445..4591e7d85 100644 +--- a/src/backends/meta-egl.h ++++ b/src/backends/meta-egl.h +@@ -28,6 +28,7 @@ + + #include <EGL/egl.h> + #include <EGL/eglext.h> ++#include <EGL/eglmesaext.h> + #include <glib-object.h> + + #define META_EGL_ERROR meta_egl_error_quark () +-- +2.24.1 + Added: 0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch =================================================================== --- 0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch (rev 0) +++ 0002-surface-actor-wayland-Do-not-send-frame-callbacks-if.patch 2019-12-12 21:11:20 UTC (rev 371325) @@ -0,0 +1,33 @@ +From a2789eef9adbb8fb5e3ba1c278041996fa69eedc Mon Sep 17 00:00:00 2001 +From: Robert Mader <robert.ma...@posteo.de> +Date: Mon, 4 Nov 2019 11:45:13 +0100 +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 +out and nothing of it will get painted. This includes that there are no clones, +no effects etc. In this cases we don't want to send frame callbacks, thus avoiding +unnecessary client work. + +https://gitlab.gnome.org/GNOME/mutter/merge_requests/918 +--- + 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 1c933d554..e16f53ff2 100644 +--- a/src/compositor/meta-surface-actor-wayland.c ++++ b/src/compositor/meta-surface-actor-wayland.c +@@ -115,7 +115,8 @@ meta_surface_actor_wayland_paint (ClutterActor *actor) + { + MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (actor); + +- if (self->surface) ++ if (self->surface && ++ !meta_surface_actor_is_obscured (META_SURFACE_ACTOR (actor))) + { + MetaWaylandCompositor *compositor = self->surface->compositor; + +-- +2.24.1 + Added: 0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch =================================================================== --- 0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch (rev 0) +++ 0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch 2019-12-12 21:11:20 UTC (rev 371325) @@ -0,0 +1,64 @@ +From 722021dc1827bd75a7f4086f0ce55da6b0214a34 Mon Sep 17 00:00:00 2001 +From: Robert Mader <robert.ma...@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 + Deleted: 918.patch =================================================================== --- 918.patch 2019-12-12 21:03:14 UTC (rev 371324) +++ 918.patch 2019-12-12 21:11:20 UTC (rev 371325) @@ -1,33 +0,0 @@ -From 1b26e414eccc33e26c464b282739315cb24f8f38 Mon Sep 17 00:00:00 2001 -From: Robert Mader <robert.ma...@posteo.de> -Date: Mon, 4 Nov 2019 11:45:13 +0100 -Subject: [PATCH] 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 -out and nothing of it will get painted. This includes that there are no clones, -no effects etc. In this cases we don't want to send frame callbacks, thus avoiding -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(+) - -diff --git a/src/compositor/meta-surface-actor-wayland.c b/src/compositor/meta-surface-actor-wayland.c -index 0b1c4ef01..e0335348f 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) - { - MetaSurfaceActorWayland *self = META_SURFACE_ACTOR_WAYLAND (actor); - -+ if (meta_surface_actor_is_obscured (META_SURFACE_ACTOR (actor))) -+ return; -+ - if (self->surface) - { - MetaWaylandCompositor *compositor = self->surface->compositor; --- -2.22.0 - Modified: PKGBUILD =================================================================== --- PKGBUILD 2019-12-12 21:03:14 UTC (rev 371324) +++ PKGBUILD 2019-12-12 21:11:20 UTC (rev 371325) @@ -3,7 +3,7 @@ # Contributor: Michael Kanis <mkanis_at_gmx_dot_de> pkgname=mutter -pkgver=3.34.1+65+g1b75d78c7 +pkgver=3.34.2 pkgrel=1 pkgdesc="A window manager for GNOME" url="https://gitlab.gnome.org/GNOME/mutter" @@ -16,13 +16,15 @@ checkdepends=(xorg-server-xvfb) groups=(gnome) install=mutter.install -_commit=1b75d78c72bc188b3332b3d23b13c17f673e385f # gnome-3-34 +_commit=8b087cfe5692f9d508b26790cce0b930a8b02c16 # tags/3.34.2^0 source=("git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit" - 918.patch - fix-build.diff) + 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 @@ -32,11 +34,14 @@ prepare() { cd $pkgname + # 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 - # fix build with libglvnd's EGL headers - git apply -3 ../fix-build.diff + # https://gitlab.gnome.org/GNOME/mutter/merge_requests/956 + git apply -3 ../0003-xwayland-Do-not-queue-frame-callbacks-unconditionall.patch } build() { Deleted: fix-build.diff =================================================================== --- fix-build.diff 2019-12-12 21:03:14 UTC (rev 371324) +++ fix-build.diff 2019-12-12 21:11:20 UTC (rev 371325) @@ -1,55 +0,0 @@ - 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 -index 1057ef955..9a642947d 100644 ---- c/cogl/cogl/meson.build -+++ i/cogl/cogl/meson.build -@@ -48,7 +48,7 @@ cogl_gl_header_h = configure_file( - built_headers += [cogl_gl_header_h] - - if have_egl -- cogl_egl_includes_string = '#include <EGL/egl.h>\n#include <EGL/eglext.h>' -+ cogl_egl_includes_string = '#include <EGL/egl.h>\n#include <EGL/eglext.h>\n#include <EGL/eglmesaext.h>' - else - cogl_egl_includes_string = '' - endif -diff --git c/src/backends/meta-egl-ext.h i/src/backends/meta-egl-ext.h -index 8705e7d5b..db0b74f76 100644 ---- c/src/backends/meta-egl-ext.h -+++ i/src/backends/meta-egl-ext.h -@@ -29,6 +29,7 @@ - - #include <EGL/egl.h> - #include <EGL/eglext.h> -+#include <EGL/eglmesaext.h> - - /* - * 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 -index 6554be935..fdeff4f77 100644 ---- c/src/backends/meta-egl.c -+++ i/src/backends/meta-egl.c -@@ -27,6 +27,7 @@ - - #include <EGL/egl.h> - #include <EGL/eglext.h> -+#include <EGL/eglmesaext.h> - #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 -index f2a816445..4591e7d85 100644 ---- c/src/backends/meta-egl.h -+++ i/src/backends/meta-egl.h -@@ -28,6 +28,7 @@ - - #include <EGL/egl.h> - #include <EGL/eglext.h> -+#include <EGL/eglmesaext.h> - #include <glib-object.h> - - #define META_EGL_ERROR meta_egl_error_quark ()