Sync to gnome-43 & Add mr2671
Signed-off-by: Mingi Sung <FiestaLake@protonmail.com>
This commit is contained in:
parent
c4d2bcb421
commit
606dbea8a2
3 changed files with 220 additions and 8 deletions
6
.SRCINFO
6
.SRCINFO
|
@ -1,6 +1,6 @@
|
|||
pkgbase = mutter-performance
|
||||
pkgdesc = A window manager for GNOME | Attempts to improve performances with non-upstreamed merge-requests and frequent stable branch resync
|
||||
pkgver = 43.0+r97+gd313c8f4f
|
||||
pkgver = 43.1
|
||||
pkgrel = 1
|
||||
url = https://gitlab.gnome.org/GNOME/mutter
|
||||
arch = x86_64
|
||||
|
@ -35,12 +35,14 @@ pkgbase = mutter-performance
|
|||
depends = libsysprof-capture
|
||||
depends = lcms2
|
||||
depends = colord
|
||||
source = mutter-performance::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=d313c8f4fe14d8a287bd75bb202434c538048808
|
||||
source = mutter-performance::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=8329a3eb5f4960df919e0348bd445c40568d3d60
|
||||
source = mr1441.patch
|
||||
source = mr1880.patch
|
||||
source = mr2671.patch
|
||||
sha256sums = SKIP
|
||||
sha256sums = d7a014965cbb90892ccbe65d0de49ddce50191dbd7521467d7f11c2f4825045c
|
||||
sha256sums = a075fad955d589ea5e59178221a80fe162f7b10cd0c77fcb94219fb380810952
|
||||
sha256sums = d7f8e1a52ddcc02af677b7a7167b720028a4363f1b4df8a9a47fdf5b770ca721
|
||||
|
||||
pkgname = mutter-performance
|
||||
groups = gnome
|
||||
|
|
22
PKGBUILD
22
PKGBUILD
|
@ -13,8 +13,8 @@
|
|||
### PACKAGE OPTIONS
|
||||
|
||||
## MERGE REQUESTS SELECTION
|
||||
# Merge Requests List: ('579' '1441' '1880')
|
||||
_merge_requests_to_use=('1441' '1880')
|
||||
# Merge Requests List: ('579' '1441' '1880' '2671')
|
||||
_merge_requests_to_use=('1441' '1880' '2671')
|
||||
|
||||
## Disable building a DOCS package
|
||||
# Remember to unset this variable when producing .SRCINFO
|
||||
|
@ -29,7 +29,7 @@ if [ -n "$_disable_docs" ]; then
|
|||
else
|
||||
pkgname=(mutter-performance mutter-performance-docs)
|
||||
fi
|
||||
pkgver=43.0+r97+gd313c8f4f
|
||||
pkgver=43.1
|
||||
pkgrel=1
|
||||
pkgdesc="A window manager for GNOME | Attempts to improve performances with non-upstreamed merge-requests and frequent stable branch resync"
|
||||
url="https://gitlab.gnome.org/GNOME/mutter"
|
||||
|
@ -42,13 +42,15 @@ depends=(dconf gobject-introspection-runtime gsettings-desktop-schemas
|
|||
makedepends=(gobject-introspection git egl-wayland meson xorg-server
|
||||
wayland-protocols sysprof gi-docgen)
|
||||
checkdepends=(xorg-server-xvfb pipewire-session-manager python-dbusmock zenity)
|
||||
_commit=d313c8f4fe14d8a287bd75bb202434c538048808 # tags/43.0^97
|
||||
_commit=8329a3eb5f4960df919e0348bd445c40568d3d60 # tags/43.1^0
|
||||
source=("$pkgname::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit"
|
||||
'mr1441.patch'
|
||||
'mr1880.patch')
|
||||
'mr1880.patch'
|
||||
'mr2671.patch')
|
||||
sha256sums=('SKIP'
|
||||
'd7a014965cbb90892ccbe65d0de49ddce50191dbd7521467d7f11c2f4825045c'
|
||||
'a075fad955d589ea5e59178221a80fe162f7b10cd0c77fcb94219fb380810952')
|
||||
'a075fad955d589ea5e59178221a80fe162f7b10cd0c77fcb94219fb380810952'
|
||||
'd7f8e1a52ddcc02af677b7a7167b720028a4363f1b4df8a9a47fdf5b770ca721')
|
||||
|
||||
pkgver() {
|
||||
cd $pkgname
|
||||
|
@ -150,6 +152,14 @@ prepare() {
|
|||
# Fixes: #1162
|
||||
pick_mr '1880' 'mr1880.patch' 'patch'
|
||||
|
||||
# Title: surface-actor-wayland: Clean up and optimize check for primary view
|
||||
# Author: Robert Mader <robert.mader@posteo.de>
|
||||
# URL: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2671
|
||||
# Type: 1
|
||||
# Status: 2
|
||||
# Comment: Avoid some allocations, save some CPU cycles and make the code easier to read.
|
||||
pick_mr '2671' 'mr2671.patch' 'patch'
|
||||
|
||||
}
|
||||
|
||||
build() {
|
||||
|
|
200
mr2671.patch
Normal file
200
mr2671.patch
Normal file
|
@ -0,0 +1,200 @@
|
|||
Author: Robert Mader <robert.mader@posteo.de>
|
||||
Source: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/2671
|
||||
Editor: Mingi Sung <FiestaLake@protonmail.com>
|
||||
Commit: d9f1681b149c12c94e3e457c6decd34babed951f
|
||||
Last Updated: 11/16/22 (Mutter 43.0-1)
|
||||
---
|
||||
|
||||
Avoid some allocations, save some CPU cycles and make the code easier
|
||||
to read.
|
||||
|
||||
Behaviourwise the only expected change is that now, if there are mapped
|
||||
clones, we unconditionally choose the view with the highest refresh
|
||||
rate the actor (or one of its clones) is on and don't check the
|
||||
obscurred region any more.
|
||||
|
||||
Thus in some cases a client may receive a higher rate of frame callbacks
|
||||
when obscurred on a faster view while a clone is present on a slower
|
||||
one. The assumption is that cases like this are relatively rare and
|
||||
that the reduction of code complexity, the reduction of allocations in
|
||||
meta_surface_actor_is_obscured_on_stage_view() whenever the actor is
|
||||
not fully obscurred and has clones on other views, as well as generally
|
||||
fewer lookups and less code in most common cases, compensate for that.
|
||||
|
||||
---
|
||||
diff --git a/src/compositor/meta-surface-actor-wayland.c b/src/compositor/meta-surface-actor-wayland.c
|
||||
index b58f328dc3272b9f418beda90c607b1759d5b345..7cbaa65ce3f628295337c6dc471895f4c9681aae 100644
|
||||
--- a/src/compositor/meta-surface-actor-wayland.c
|
||||
+++ b/src/compositor/meta-surface-actor-wayland.c
|
||||
@@ -67,60 +67,79 @@ meta_surface_actor_wayland_is_opaque (MetaSurfaceActor *actor)
|
||||
|
||||
#define UNOBSCURED_TRESHOLD 0.1
|
||||
|
||||
-ClutterStageView *
|
||||
-meta_surface_actor_wayland_get_current_primary_view (MetaSurfaceActor *actor,
|
||||
- ClutterStage *stage)
|
||||
+gboolean
|
||||
+meta_surface_actor_wayland_is_stage_view_current_primary_view (MetaSurfaceActor *actor,
|
||||
+ ClutterStageView *stage_view)
|
||||
{
|
||||
ClutterStageView *current_primary_view = NULL;
|
||||
float highest_refresh_rate = 0.f;
|
||||
float biggest_unobscurred_fraction = 0.f;
|
||||
GList *l;
|
||||
|
||||
- for (l = clutter_stage_peek_stage_views (stage); l; l = l->next)
|
||||
+ if (!clutter_actor_is_effectively_on_stage_view (CLUTTER_ACTOR (actor),
|
||||
+ stage_view))
|
||||
+ return FALSE;
|
||||
+
|
||||
+ if (clutter_actor_has_mapped_clones (CLUTTER_ACTOR (actor)))
|
||||
{
|
||||
- ClutterStageView *stage_view = l->data;
|
||||
- float refresh_rate;
|
||||
- float unobscurred_fraction = 1.f;
|
||||
+ ClutterStage *stage;
|
||||
|
||||
- if (clutter_actor_has_mapped_clones (CLUTTER_ACTOR (actor)))
|
||||
+ stage = CLUTTER_STAGE (clutter_actor_get_stage (CLUTTER_ACTOR (actor)));
|
||||
+ for (l = clutter_stage_peek_stage_views (stage); l; l = l->next)
|
||||
{
|
||||
+ ClutterStageView *view = l->data;
|
||||
+ float refresh_rate;
|
||||
+
|
||||
if (!clutter_actor_is_effectively_on_stage_view (CLUTTER_ACTOR (actor),
|
||||
- stage_view))
|
||||
+ view))
|
||||
continue;
|
||||
- }
|
||||
- else
|
||||
- {
|
||||
- if (l->next || biggest_unobscurred_fraction > 0.f)
|
||||
- {
|
||||
- if (meta_surface_actor_is_obscured_on_stage_view (actor,
|
||||
- stage_view,
|
||||
- &unobscurred_fraction))
|
||||
- continue;
|
||||
- }
|
||||
- else
|
||||
+
|
||||
+ refresh_rate = clutter_stage_view_get_refresh_rate (view);
|
||||
+ if (refresh_rate > highest_refresh_rate)
|
||||
{
|
||||
- if (meta_surface_actor_is_obscured (actor) ||
|
||||
- !clutter_actor_is_effectively_on_stage_view (CLUTTER_ACTOR (actor),
|
||||
- stage_view))
|
||||
- continue;
|
||||
+ current_primary_view = view;
|
||||
+ highest_refresh_rate = refresh_rate;
|
||||
}
|
||||
}
|
||||
|
||||
- refresh_rate = clutter_stage_view_get_refresh_rate (stage_view);
|
||||
+ return current_primary_view == stage_view;
|
||||
+ }
|
||||
+
|
||||
+ l = clutter_actor_peek_stage_views (CLUTTER_ACTOR (actor));
|
||||
+ g_assert (l != NULL);
|
||||
+
|
||||
+ if (!l->next)
|
||||
+ {
|
||||
+ g_assert (l->data == stage_view);
|
||||
+ return !meta_surface_actor_is_obscured (actor);
|
||||
+ }
|
||||
+
|
||||
+ for (; l; l = l->next)
|
||||
+ {
|
||||
+ ClutterStageView *view = l->data;
|
||||
+ float refresh_rate;
|
||||
+ float unobscurred_fraction;
|
||||
+
|
||||
+ if (meta_surface_actor_is_obscured_on_stage_view (actor,
|
||||
+ view,
|
||||
+ &unobscurred_fraction))
|
||||
+ continue;
|
||||
+
|
||||
+ refresh_rate = clutter_stage_view_get_refresh_rate (view);
|
||||
|
||||
if ((refresh_rate > highest_refresh_rate &&
|
||||
- (unobscurred_fraction > UNOBSCURED_TRESHOLD ||
|
||||
- biggest_unobscurred_fraction < UNOBSCURED_TRESHOLD)) ||
|
||||
+ (biggest_unobscurred_fraction < UNOBSCURED_TRESHOLD ||
|
||||
+ unobscurred_fraction > UNOBSCURED_TRESHOLD)) ||
|
||||
(biggest_unobscurred_fraction < UNOBSCURED_TRESHOLD &&
|
||||
unobscurred_fraction > UNOBSCURED_TRESHOLD))
|
||||
{
|
||||
- current_primary_view = stage_view;
|
||||
+ current_primary_view = view;
|
||||
highest_refresh_rate = refresh_rate;
|
||||
biggest_unobscurred_fraction = unobscurred_fraction;
|
||||
}
|
||||
}
|
||||
|
||||
- return current_primary_view;
|
||||
+ return current_primary_view == stage_view;
|
||||
}
|
||||
|
||||
static void
|
||||
diff --git a/src/compositor/meta-surface-actor-wayland.h b/src/compositor/meta-surface-actor-wayland.h
|
||||
index 1a349af91f250978ff356a3114d1da3817010089..1898147d55e0180efdb7320efbf421ad67958b24 100644
|
||||
--- a/src/compositor/meta-surface-actor-wayland.h
|
||||
+++ b/src/compositor/meta-surface-actor-wayland.h
|
||||
@@ -44,8 +44,8 @@ MetaSurfaceActor * meta_surface_actor_wayland_new (MetaWaylandSurface *surface);
|
||||
MetaWaylandSurface * meta_surface_actor_wayland_get_surface (MetaSurfaceActorWayland *self);
|
||||
void meta_surface_actor_wayland_surface_destroyed (MetaSurfaceActorWayland *self);
|
||||
|
||||
-ClutterStageView * meta_surface_actor_wayland_get_current_primary_view (MetaSurfaceActor *actor,
|
||||
- ClutterStage *stage);
|
||||
+gboolean meta_surface_actor_wayland_is_stage_view_current_primary_view (MetaSurfaceActor *actor,
|
||||
+ ClutterStageView *stage_view);
|
||||
|
||||
G_END_DECLS
|
||||
|
||||
diff --git a/src/wayland/meta-wayland-presentation-time.c b/src/wayland/meta-wayland-presentation-time.c
|
||||
index fb99445eb70dd72d95e8e425a3230be8505b8b25..0025b62e1e6a0381f30b70e3ef2da817dc3dc214 100644
|
||||
--- a/src/wayland/meta-wayland-presentation-time.c
|
||||
+++ b/src/wayland/meta-wayland-presentation-time.c
|
||||
@@ -156,7 +156,6 @@ on_after_paint (ClutterStage *stage,
|
||||
GList *l_cur = l;
|
||||
MetaWaylandSurface *surface = l->data;
|
||||
MetaSurfaceActor *actor;
|
||||
- ClutterStageView *surface_primary_view;
|
||||
|
||||
l = l->next;
|
||||
|
||||
@@ -164,9 +163,8 @@ on_after_paint (ClutterStage *stage,
|
||||
if (!actor)
|
||||
continue;
|
||||
|
||||
- surface_primary_view =
|
||||
- meta_surface_actor_wayland_get_current_primary_view (actor, stage);
|
||||
- if (stage_view != surface_primary_view)
|
||||
+ if (!meta_surface_actor_wayland_is_stage_view_current_primary_view (actor,
|
||||
+ stage_view))
|
||||
continue;
|
||||
|
||||
if (!wl_list_empty (&surface->presentation_time.feedback_list))
|
||||
diff --git a/src/wayland/meta-wayland.c b/src/wayland/meta-wayland.c
|
||||
index 9d066b19cb4d555b720f908b3f099ee8fbab4235..af8f9db1c3db8c1dc1876e3a4ec53ef5d25a5a65 100644
|
||||
--- a/src/wayland/meta-wayland.c
|
||||
+++ b/src/wayland/meta-wayland.c
|
||||
@@ -224,7 +224,6 @@ on_after_update (ClutterStage *stage,
|
||||
MetaWaylandSurface *surface = l->data;
|
||||
MetaSurfaceActor *actor;
|
||||
MetaWaylandActorSurface *actor_surface;
|
||||
- ClutterStageView *surface_primary_view;
|
||||
|
||||
l = l->next;
|
||||
|
||||
@@ -232,9 +231,8 @@ on_after_update (ClutterStage *stage,
|
||||
if (!actor)
|
||||
continue;
|
||||
|
||||
- surface_primary_view =
|
||||
- meta_surface_actor_wayland_get_current_primary_view (actor, stage);
|
||||
- if (stage_view != surface_primary_view)
|
||||
+ if (!meta_surface_actor_wayland_is_stage_view_current_primary_view (actor,
|
||||
+ stage_view))
|
||||
continue;
|
||||
|
||||
actor_surface = META_WAYLAND_ACTOR_SURFACE (surface->role);
|
Loading…
Reference in a new issue