Avoid excessive redraws
This commit is contained in:
		
							parent
							
								
									674a6c1418
								
							
						
					
					
						commit
						f17f73a21a
					
				| @ -0,0 +1,83 @@ | |||||||
|  | From fc2a5cfe195fda9d79615fbde140b5ea7dd45b0b Mon Sep 17 00:00:00 2001 | ||||||
|  | From: "Owen W. Taylor" <otaylor@fishsoup.net> | ||||||
|  | Date: Fri, 22 Nov 2013 10:30:21 -0500 | ||||||
|  | Subject: [PATCH 1/2] Bind constraints: Don't force redraws on source relayout | ||||||
|  | 
 | ||||||
|  | When the source actor potentially changes size, that shouldn't | ||||||
|  | necessarily result in the target actor being redrawn - it should | ||||||
|  | be like when a child of a container is reallocated due to changes | ||||||
|  | in its siblings or parent - it should redraw only to the extent | ||||||
|  | that it is moved and resized. Privately export an internal function | ||||||
|  | from clutter-actor.c to allow getting this right. | ||||||
|  | 
 | ||||||
|  | https://bugzilla.gnome.org/show_bug.cgi?id=719367 | ||||||
|  | ---
 | ||||||
|  |  clutter/clutter-actor-private.h   | 1 + | ||||||
|  |  clutter/clutter-actor.c           | 4 +--- | ||||||
|  |  clutter/clutter-bind-constraint.c | 2 +- | ||||||
|  |  clutter/clutter-snap-constraint.c | 2 +- | ||||||
|  |  4 files changed, 4 insertions(+), 5 deletions(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/clutter/clutter-actor-private.h b/clutter/clutter-actor-private.h
 | ||||||
|  | index 1c6f165..8bcf26c 100644
 | ||||||
|  | --- a/clutter/clutter-actor-private.h
 | ||||||
|  | +++ b/clutter/clutter-actor-private.h
 | ||||||
|  | @@ -318,6 +318,7 @@ void                            _clutter_actor_detach_clone
 | ||||||
|  |                                                                                           ClutterActor *clone); | ||||||
|  |  void                            _clutter_actor_queue_redraw_on_clones                   (ClutterActor *actor); | ||||||
|  |  void                            _clutter_actor_queue_relayout_on_clones                 (ClutterActor *actor); | ||||||
|  | +void                            _clutter_actor_queue_only_relayout                      (ClutterActor *actor);
 | ||||||
|  |   | ||||||
|  |  G_END_DECLS | ||||||
|  |   | ||||||
|  | diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
 | ||||||
|  | index 4ceb62c..4504ac6 100644
 | ||||||
|  | --- a/clutter/clutter-actor.c
 | ||||||
|  | +++ b/clutter/clutter-actor.c
 | ||||||
|  | @@ -1037,8 +1037,6 @@ static void           clutter_anchor_coord_set_gravity (AnchorCoord       *coord
 | ||||||
|  |   | ||||||
|  |  static gboolean clutter_anchor_coord_is_zero (const AnchorCoord *coord); | ||||||
|  |   | ||||||
|  | -static void _clutter_actor_queue_only_relayout (ClutterActor *self);
 | ||||||
|  | -
 | ||||||
|  |  static void _clutter_actor_get_relative_transformation_matrix (ClutterActor *self, | ||||||
|  |                                                                 ClutterActor *ancestor, | ||||||
|  |                                                                 CoglMatrix *matrix); | ||||||
|  | @@ -8862,7 +8860,7 @@ _clutter_actor_queue_redraw_with_clip (ClutterActor       *self,
 | ||||||
|  |                                      NULL /* effect */); | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | -static void
 | ||||||
|  | +void
 | ||||||
|  |  _clutter_actor_queue_only_relayout (ClutterActor *self) | ||||||
|  |  { | ||||||
|  |    ClutterActorPrivate *priv = self->priv; | ||||||
|  | diff --git a/clutter/clutter-bind-constraint.c b/clutter/clutter-bind-constraint.c
 | ||||||
|  | index b9e45ab..fa94906 100644
 | ||||||
|  | --- a/clutter/clutter-bind-constraint.c
 | ||||||
|  | +++ b/clutter/clutter-bind-constraint.c
 | ||||||
|  | @@ -151,7 +151,7 @@ source_queue_relayout (ClutterActor          *source,
 | ||||||
|  |                         ClutterBindConstraint *bind) | ||||||
|  |  { | ||||||
|  |    if (bind->actor != NULL) | ||||||
|  | -    clutter_actor_queue_relayout (bind->actor);
 | ||||||
|  | +    _clutter_actor_queue_only_relayout (bind->actor);
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static void | ||||||
|  | diff --git a/clutter/clutter-snap-constraint.c b/clutter/clutter-snap-constraint.c
 | ||||||
|  | index c8eaea9..b4c558f 100644
 | ||||||
|  | --- a/clutter/clutter-snap-constraint.c
 | ||||||
|  | +++ b/clutter/clutter-snap-constraint.c
 | ||||||
|  | @@ -94,7 +94,7 @@ source_queue_relayout (ClutterActor          *source,
 | ||||||
|  |                         ClutterSnapConstraint *constraint) | ||||||
|  |  { | ||||||
|  |    if (constraint->actor != NULL) | ||||||
|  | -    clutter_actor_queue_relayout (constraint->actor);
 | ||||||
|  | +    _clutter_actor_queue_only_relayout (constraint->actor);
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  static void | ||||||
|  | -- 
 | ||||||
|  | 1.8.4.2 | ||||||
|  | 
 | ||||||
| @ -0,0 +1,59 @@ | |||||||
|  | From 224e0ee7de1fc09adc9eed031f55569d219c567e Mon Sep 17 00:00:00 2001 | ||||||
|  | From: "Owen W. Taylor" <otaylor@fishsoup.net> | ||||||
|  | Date: Tue, 26 Nov 2013 11:04:27 -0500 | ||||||
|  | Subject: [PATCH 2/2] Don't queue redraws when reallocating actor that haven't | ||||||
|  |  moved | ||||||
|  | 
 | ||||||
|  | When support for implicit animation of actor position was added, | ||||||
|  | the optimization for not queueing when allocating an actor back | ||||||
|  | to the same location was lost. This optimization is important | ||||||
|  | since when we are hierarchically allocating down from the top of | ||||||
|  | the stage we constantly reallocate the actors at the top of the | ||||||
|  | hierarchy back to the same place. | ||||||
|  | 
 | ||||||
|  | https://bugzilla.gnome.org/show_bug.cgi?id=719368 | ||||||
|  | ---
 | ||||||
|  |  clutter/clutter-actor.c | 13 ++++++++++++- | ||||||
|  |  1 file changed, 12 insertions(+), 1 deletion(-) | ||||||
|  | 
 | ||||||
|  | diff --git a/clutter/clutter-actor.c b/clutter/clutter-actor.c
 | ||||||
|  | index 4504ac6..b371183 100644
 | ||||||
|  | --- a/clutter/clutter-actor.c
 | ||||||
|  | +++ b/clutter/clutter-actor.c
 | ||||||
|  | @@ -9738,7 +9738,9 @@ clutter_actor_allocate_internal (ClutterActor           *self,
 | ||||||
|  |   | ||||||
|  |    CLUTTER_UNSET_PRIVATE_FLAGS (self, CLUTTER_IN_RELAYOUT); | ||||||
|  |   | ||||||
|  | -  clutter_actor_queue_redraw (self);
 | ||||||
|  | +  /* Caller should call clutter_actor_queue_redraw() if needed
 | ||||||
|  | +   * for that particular case.
 | ||||||
|  | +   */
 | ||||||
|  |  } | ||||||
|  |   | ||||||
|  |  /** | ||||||
|  | @@ -9847,6 +9849,14 @@ clutter_actor_allocate (ClutterActor           *self,
 | ||||||
|  |        return; | ||||||
|  |      } | ||||||
|  |   | ||||||
|  | +  if (!stage_allocation_changed)
 | ||||||
|  | +    {
 | ||||||
|  | +      /* If the actor didn't move but needs_allocation is set, we just
 | ||||||
|  | +       * need to allocate the children */
 | ||||||
|  | +      clutter_actor_allocate_internal (self, &real_allocation, flags);
 | ||||||
|  | +      return;
 | ||||||
|  | +    }
 | ||||||
|  | +
 | ||||||
|  |    /* When ABSOLUTE_ORIGIN_CHANGED is passed in to | ||||||
|  |     * clutter_actor_allocate(), it indicates whether the parent has its | ||||||
|  |     * absolute origin moved; when passed in to ClutterActor::allocate() | ||||||
|  | @@ -14718,6 +14728,7 @@ clutter_actor_set_animatable_property (ClutterActor *actor,
 | ||||||
|  |        clutter_actor_allocate_internal (actor, | ||||||
|  |                                         g_value_get_boxed (value), | ||||||
|  |                                         actor->priv->allocation_flags); | ||||||
|  | +      clutter_actor_queue_redraw (actor);
 | ||||||
|  |        break; | ||||||
|  |   | ||||||
|  |      case PROP_DEPTH: | ||||||
|  | -- 
 | ||||||
|  | 1.8.4.2 | ||||||
|  | 
 | ||||||
							
								
								
									
										10
									
								
								clutter.spec
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								clutter.spec
									
									
									
									
									
								
							| @ -6,7 +6,7 @@ | |||||||
| 
 | 
 | ||||||
| Name:          clutter | Name:          clutter | ||||||
| Version:       1.16.2 | Version:       1.16.2 | ||||||
| Release:       1%{?dist} | Release:       2%{?dist} | ||||||
| Summary:       Open Source software library for creating rich graphical user interfaces | Summary:       Open Source software library for creating rich graphical user interfaces | ||||||
| 
 | 
 | ||||||
| Group:         Development/Libraries | Group:         Development/Libraries | ||||||
| @ -14,6 +14,9 @@ License:       LGPLv2+ | |||||||
| URL:           http://www.clutter-project.org/ | URL:           http://www.clutter-project.org/ | ||||||
| Source0:       http://download.gnome.org/sources/clutter/1.16/clutter-%{version}.tar.xz | Source0:       http://download.gnome.org/sources/clutter/1.16/clutter-%{version}.tar.xz | ||||||
| Patch0: clutter-1.16.0-fix-evdev-touchpad.patch | Patch0: clutter-1.16.0-fix-evdev-touchpad.patch | ||||||
|  | # upstream fixes, to avoid excessive redraws | ||||||
|  | Patch1: 0001-Bind-constraints-Don-t-force-redraws-on-source-relay.patch | ||||||
|  | Patch2: 0002-Don-t-queue-redraws-when-reallocating-actor-that-hav.patch | ||||||
| 
 | 
 | ||||||
| BuildRequires: glib2-devel mesa-libGL-devel pkgconfig pango-devel | BuildRequires: glib2-devel mesa-libGL-devel pkgconfig pango-devel | ||||||
| BuildRequires: cairo-gobject-devel gdk-pixbuf2-devel atk-devel | BuildRequires: cairo-gobject-devel gdk-pixbuf2-devel atk-devel | ||||||
| @ -81,6 +84,8 @@ This package contains documentation for clutter. | |||||||
| %prep | %prep | ||||||
| %setup -q | %setup -q | ||||||
| %patch0 -p1 -b .touch | %patch0 -p1 -b .touch | ||||||
|  | %patch1 -p1 -b .redraws1 | ||||||
|  | %patch2 -p1 -b .redraws2 | ||||||
| 
 | 
 | ||||||
| %build | %build | ||||||
| (if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi; | (if ! test -x configure; then NOCONFIGURE=1 ./autogen.sh; CONFIGFLAGS=--enable-gtk-doc; fi; | ||||||
| @ -132,6 +137,9 @@ find %{buildroot} -name '*.la' -exec rm -f {} ';' | |||||||
| %{_datadir}/gtk-doc/html/cally | %{_datadir}/gtk-doc/html/cally | ||||||
| 
 | 
 | ||||||
| %changelog | %changelog | ||||||
|  | * Tue Nov 26 2013 Matthias Clasen <mclasen@redhat.com> - 1.16.2-2 | ||||||
|  | - Avoid excessive redraws when windows are moved in gnome-shell | ||||||
|  | 
 | ||||||
| * Thu Nov 21 2013 Richard Hughes <rhughes@redhat.com> - 1.16.2-1 | * Thu Nov 21 2013 Richard Hughes <rhughes@redhat.com> - 1.16.2-1 | ||||||
| - Update to 1.16.2 | - Update to 1.16.2 | ||||||
| 
 | 
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user