Go to file
Daniel van Vugt 5610a2435d iconGrid: Defer and group animation cleanup
The `reactive` property of icon actors was being restored 24 times over
the course of the spring animation, all at slightly different times as
each icon finished animating at different times.

The problem is that toggling `reactive` on an `StWidget` incurs a style
change of the `insensitive` pseudo class, and style changes would quickly
queue relayouts incurring full stage reallocation. This occurred many times
during a spring animation hogging the CPU and limiting the frame rate.

The solution is defer and batch the cleanup for all icons until after the
last icon has finished animating. This way the CPU impact of the style
change and stage relayout isn't felt during the animation so the frame
rate remains higher and smoother. The overall CPU usage of the animation
is also reduced as the remaining relayouts are much more likely to be
grouped into a single frame.

Icon spring animation performance on an i7-7700:
Before: 83% CPU and 47 FPS
After : 78% CPU and 54 FPS
which is about a 22% increase in performance per clock (FPS/CPU).

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/253


(cherry picked from commit a5e6dd52d2)
2018-11-20 19:52:16 +00:00
.settings Convert all JS style to be uniform, add Eclipse settings bits 2008-11-28 20:12:20 +00:00
browser-plugin build: Drop autotools support 2017-08-10 20:16:06 +02:00
data system: Align submenu labels with parent - adjust for deeper hierarchies 2018-04-02 14:54:43 -07:00
docs/reference build: Drop autotools support 2017-08-10 20:16:06 +02:00
js iconGrid: Defer and group animation cleanup 2018-11-20 19:52:16 +00:00
man man: Update project website 2018-01-07 21:39:18 +01:00
meson build: Run postinstall script where necessary 2018-04-09 19:19:33 +00:00
po Updated Czech translation 2018-10-07 14:32:30 +02:00
src st-texture-cache: Obey cache policy in st_texture_cache_load 2018-08-31 14:15:30 +00:00
subprojects build: Update gvc to support renamed options 2018-01-30 13:37:38 +01:00
tests utils: Simplify URL regex to only support one layer of parentheses 2018-04-13 18:15:44 +00:00
tools/build tools: Remove obsolete check-for-missing script 2017-09-30 03:18:55 +02:00
.gitignore data: Add README and supporting script to update keyboard layouts from CLDR 2018-02-05 17:46:57 +01:00
.gitmodules theme: Replace gnome-shell-sass submodule with subtree 2018-02-09 21:45:09 +00:00
.project Convert all JS style to be uniform, add Eclipse settings bits 2008-11-28 20:12:20 +00:00
AUTHORS Initial commit 2008-10-31 04:22:44 +00:00
config.h.meson build: Support the meson build system 2017-07-20 00:20:54 +02:00
COPYING Changed obsolete FSF postal address. 2014-01-08 04:35:14 +07:00
gnome-shell.doap doap: add <programming-language> 2014-07-31 17:48:46 +02:00
HACKING cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
MAINTAINERS MAINTAINERS: Fix my email address 2011-05-23 09:15:58 -04:00
meson_options.txt build: Stop detecting features automatically 2017-11-30 00:24:53 +01:00
meson.build Bump version to 3.28.3 2018-07-18 22:53:05 +02:00
NEWS Bump version to 3.28.3 2018-07-18 22:53:05 +02:00
README doap: update URLs 2014-04-04 19:32:09 +02:00

GNOME Shell provides core user interface functions for the GNOME 3 desktop,
like switching to windows and launching applications. GNOME Shell takes
advantage of the capabilities of modern graphics hardware and introduces
innovative user interface concepts to provide a visually attractive and
easy to use experience.

For more information about GNOME Shell, including instructions on how
to build GNOME Shell from source and how to get involved with the project,
see:

 https://wiki.gnome.org/Projects/GnomeShell

Bugs should be reported at http://bugzilla.gnome.org against the 'gnome-shell'
product.

License
=======
GNOME Shell is distributed under the terms of the GNU General Public License,
version 2 or later. See the COPYING file for details.