1
0
Fork 0

Sync to gnome-3-36, cleanup

This commit is contained in:
Térence Clastres 2020-08-31 16:32:29 +02:00
parent 208dd2a459
commit ee05e9d612
3 changed files with 9 additions and 147 deletions

View file

@ -1,7 +1,7 @@
pkgbase = mutter-performance
pkgdesc = A window manager for GNOME | Attempts to improve performances with non-upstreamed merge-requests and frequent stable branch resync
pkgver = 3.36.4+10+gef3dac706
pkgrel = 2
pkgver = 3.36.5+10+g84512cb1f
pkgrel = 1
url = https://gitlab.gnome.org/GNOME/mutter
install = mutter.install
arch = x86_64
@ -34,8 +34,7 @@ pkgbase = mutter-performance
provides = libmutter-6.so
conflicts = mutter
replaces = mutter-781835-workaround
source = mutter-performance::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=ef3dac70648196de8e291708eaa1cf68dc2eec28
source = fix_clutter_actor_set_allocation_spam.patch
source = mutter-performance::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=84512cb1f36633d32418720e3608d01c6122ee26
sha256sums = SKIP
sha256sums = 9b2a5c4ab0e8c5e9a54fddc7461a85455055b175af9a7c89b0e16f30a939fa42

View file

@ -8,14 +8,14 @@
### MERGE REQUESTS SELECTION
# Merge Requests List: ('429' '493' '579' '983' '798' '1003' '1267' '1360' '1359' '1369')
_merge_requests_to_use=('1003' '1267' '1360' '1359' '1369') # safe pick
# Merge Requests List: ('429' '493' '579' '983' '798' '1003' '1267' '1360' '1359')
_merge_requests_to_use=('1003' '1267' '1360' '1359') # safe pick
### IMPORTANT: Do no edit below this line unless you know what you're doing
pkgname=mutter-performance
pkgver=3.36.4+10+gef3dac706
pkgrel=2
pkgver=3.36.5+10+g84512cb1f
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"
arch=(x86_64)
@ -30,9 +30,8 @@ conflicts=(mutter)
replaces=(mutter-781835-workaround)
groups=(gnome)
install=mutter.install
_commit=ef3dac70648196de8e291708eaa1cf68dc2eec28 # tags/3.36.4^10
source=("$pkgname::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit"
"fix_clutter_actor_set_allocation_spam.patch")
_commit=84512cb1f36633d32418720e3608d01c6122ee26 # tags/3.36.5^10
source=("$pkgname::git+https://gitlab.gnome.org/GNOME/mutter.git#commit=$_commit")
sha256sums=('SKIP'
'9b2a5c4ab0e8c5e9a54fddc7461a85455055b175af9a7c89b0e16f30a939fa42')
@ -170,12 +169,6 @@ prepare() {
# Comment:
pick_mr "1359"
# Title: Fix wine copy & paste
# URL: https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/1369
# Type: 3
# Status: 2
# Comment:
pick_mr "1369"
}
build() {

View file

@ -1,130 +0,0 @@
diff --git a/clutter/clutter/clutter-stage.c b/clutter/clutter/clutter-stage.c
index 82565c6b5..60544d8f3 100644
--- a/clutter/clutter/clutter-stage.c
+++ b/clutter/clutter/clutter-stage.c
@@ -119,8 +119,7 @@ struct _ClutterStagePrivate
ClutterPlane current_clip_planes[4];
- GHashTable *pending_relayouts;
- unsigned int pending_relayouts_version;
+ GSList *pending_relayouts;
GList *pending_queue_redraws;
gint sync_delay;
@@ -154,6 +153,7 @@ struct _ClutterStagePrivate
guint motion_events_enabled : 1;
guint has_custom_perspective : 1;
guint stage_was_relayout : 1;
+ guint in_relayout : 1;
};
enum
@@ -1312,7 +1312,7 @@ _clutter_stage_needs_update (ClutterStage *stage)
priv = stage->priv;
- return priv->redraw_pending || g_hash_table_size (priv->pending_relayouts) > 0;
+ return priv->redraw_pending || priv->pending_relayouts != NULL;
}
void
@@ -1321,11 +1321,11 @@ clutter_stage_queue_actor_relayout (ClutterStage *stage,
{
ClutterStagePrivate *priv = stage->priv;
- if (g_hash_table_size (priv->pending_relayouts) == 0)
+ if (priv->pending_relayouts == NULL)
_clutter_stage_schedule_update (stage);
- g_hash_table_add (priv->pending_relayouts, g_object_ref (actor));
- priv->pending_relayouts_version++;
+ priv->pending_relayouts = g_slist_prepend (priv->pending_relayouts,
+ g_object_ref (actor));
}
void
@@ -1333,24 +1333,28 @@ _clutter_stage_maybe_relayout (ClutterActor *actor)
{
ClutterStage *stage = CLUTTER_STAGE (actor);
ClutterStagePrivate *priv = stage->priv;
- GHashTableIter iter;
- gpointer key;
+ g_autoptr (GSList) stolen_list = NULL;
+ GSList *l;
int count = 0;
/* No work to do? Avoid the extraneous debug log messages too. */
- if (g_hash_table_size (priv->pending_relayouts) == 0)
+ if (priv->pending_relayouts == NULL)
return;
CLUTTER_NOTE (ACTOR, ">>> Recomputing layout");
- g_hash_table_iter_init (&iter, priv->pending_relayouts);
- while (g_hash_table_iter_next (&iter, &key, NULL))
+ if (priv->in_relayout)
{
- g_autoptr (ClutterActor) queued_actor = key;
- unsigned int old_version;
+ g_warning ("Tried to start a relayout while inside an allocation cycle");
+ return;
+ }
+
+ priv->in_relayout = TRUE;
- g_hash_table_iter_steal (&iter);
- priv->pending_relayouts_version++;
+ stolen_list = g_steal_pointer (&priv->pending_relayouts);
+ for (l = stolen_list; l; l = l->next)
+ {
+ g_autoptr (ClutterActor) queued_actor = l->data;
if (CLUTTER_ACTOR_IN_RELAYOUT (queued_actor)) /* avoid reentrancy */
continue;
@@ -1366,21 +1370,14 @@ _clutter_stage_maybe_relayout (ClutterActor *actor)
CLUTTER_NOTE (ACTOR, " Shallow relayout of actor %s",
_clutter_actor_get_debug_name (queued_actor));
- CLUTTER_SET_PRIVATE_FLAGS (queued_actor, CLUTTER_IN_RELAYOUT);
-
- old_version = priv->pending_relayouts_version;
clutter_actor_allocate_preferred_size (queued_actor,
CLUTTER_ALLOCATION_NONE);
- CLUTTER_UNSET_PRIVATE_FLAGS (queued_actor, CLUTTER_IN_RELAYOUT);
-
count++;
-
- /* Prevent using an iterator that's been invalidated */
- if (old_version != priv->pending_relayouts_version)
- g_hash_table_iter_init (&iter, priv->pending_relayouts);
}
+ priv->in_relayout = FALSE;
+
CLUTTER_NOTE (ACTOR, "<<< Completed recomputing layout of %d subtrees", count);
if (count)
@@ -1958,7 +1955,9 @@ clutter_stage_dispose (GObject *object)
(GDestroyNotify) free_queue_redraw_entry);
priv->pending_queue_redraws = NULL;
- g_clear_pointer (&priv->pending_relayouts, g_hash_table_destroy);
+ g_slist_free_full (priv->pending_relayouts,
+ (GDestroyNotify) g_object_unref);
+ priv->pending_relayouts = NULL;
/* this will release the reference on the stage */
stage_manager = clutter_stage_manager_get_default ();
@@ -2319,10 +2318,6 @@ clutter_stage_init (ClutterStage *self)
clutter_actor_set_background_color (CLUTTER_ACTOR (self),
&default_stage_color);
- priv->pending_relayouts = g_hash_table_new_full (NULL,
- NULL,
- g_object_unref,
- NULL);
clutter_stage_queue_actor_relayout (self, CLUTTER_ACTOR (self));
clutter_actor_set_reactive (CLUTTER_ACTOR (self), TRUE);