gnome-shell/js/ui
Daniel van Vugt 78f6a409aa 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-10-30 18:09:04 +00:00
..
components automountManager: Explicitly track active operations 2018-10-08 13:18:53 +00:00
status Fix connection to wifi APs from user menu (RH #1628263) 2018-09-18 16:15:32 -07:00
accessDialog.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
altTab.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
animation.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
appDisplay.js appFolder: Don't block all shortcuts 2018-10-13 12:30:37 +00:00
appFavorites.js appFavorites: Don't add app explicitly 2018-10-08 16:22:04 +00:00
audioDeviceSelection.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
background.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
backgroundMenu.js cleanup: Use arrow notation for anonymous functions 2018-02-21 13:55:00 +00:00
barLevel.js barLevel: Add "overdrive" capability 2018-07-31 18:14:14 +00:00
boxpointer.js js/ui: Choose some actors to cache on the GPU 2018-08-27 14:16:59 +00:00
calendar.js calendar: chain up to parent on _onDestroy 2018-09-03 22:43:21 +00:00
checkBox.js cleanup: Use method syntax 2018-02-21 13:54:58 +00:00
closeDialog.js closeDialog: Untrack chrome when window loses focus 2018-10-08 16:03:53 +00:00
ctrlAltTab.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
dash.js js/ui: Choose some actors to cache on the GPU 2018-08-27 14:16:59 +00:00
dateMenu.js worldClock: Handle named timezones 2018-04-13 09:15:48 +00:00
dialog.js js/ui: Choose some actors to cache on the GPU 2018-08-27 14:16:59 +00:00
dnd.js dnd: Nullify _dragActor after we've destroyed it, and avoid invalid access 2018-09-03 22:43:21 +00:00
edgeDragAction.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
endSessionDialog.js endSessionDialog: squash "reference to undefined property" warning 2018-09-25 21:28:35 +01:00
environment.js cleanup: Use arrow notation for anonymous functions 2018-02-21 13:55:00 +00:00
extensionDownloader.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
extensionSystem.js extensionSystem: Unset stylesheet file reference when unloaded 2018-09-03 23:29:01 +00:00
focusCaretTracker.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
grabHelper.js cleanup: Use arrow notation for anonymous functions 2018-02-21 13:55:00 +00:00
ibusCandidatePopup.js ibusCandidatePopup: Fix candidate-clicked signal 2018-04-18 13:37:53 +09:00
iconGrid.js iconGrid: Defer and group animation cleanup 2018-10-30 18:09:04 +00:00
inhibitShortcutsDialog.js cleanup: Use method syntax 2018-02-21 13:54:58 +00:00
kbdA11yDialog.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
keyboard.js keyboard: Listen to IbusPanelService::focus-in/out to track focus changes 2018-09-25 23:49:42 +00:00
layout.js layout: Don't update input region on wayland 2018-10-08 16:03:53 +00:00
lightbox.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
lookingGlass.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
magnifier.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
magnifierDBus.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
main.js js/main: Throw error if no valid default stylesheet is found 2018-09-03 23:29:01 +00:00
messageList.js messageList: stop syncing if closeButton has been destroyed 2018-09-03 22:43:21 +00:00
messageTray.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
modalDialog.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
mpris.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
notificationDaemon.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
osdMonitorLabeler.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
osdWindow.js osdWindow: Disconnect signals on destroy 2018-10-22 18:10:15 +00:00
overview.js overview: Use whole stage size for cover pane 2018-08-06 10:18:28 +02:00
overviewControls.js overview: Restore previous workspace switcher policy 2018-08-14 17:34:57 +00:00
padOsd.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
panel.js panel: Also ignore hidden windows for proximity 2018-10-23 15:32:13 +00:00
panelMenu.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
pointerWatcher.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
popupMenu.js popupMenu: Handle keypress if numlock is enabled 2018-10-11 07:46:53 +00:00
remoteMenu.js remoteMenu: Support icons in app-menu 2018-04-14 09:02:20 +00:00
remoteSearch.js js: use ES6 template strings for dbus interfaces 2018-08-27 19:23:00 +02:00
runDialog.js runDialog: Use ClutterText::activate for enter handling 2018-08-17 18:37:32 +00:00
screencast.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
screenShield.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
screenshot.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
scripting.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
search.js search: Ignore search provider results metas if search is cancelled 2018-09-04 01:00:52 +02:00
sessionMode.js Explicitly convert raw data to strings 2018-07-31 16:28:53 +00:00
shellDBus.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
shellEntry.js shellEntry: Use correct enum for input purpose hints 2018-03-14 13:30:47 +00:00
shellMountOperation.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
slider.js barLevel: Support maxValue higher than 1 2018-07-31 18:14:10 +00:00
switcherPopup.js switcherPopup: Cancel window cycling with Tab 2018-07-14 14:35:05 +00:00
switchMonitor.js switchMonitor: switch to next config upon initial keypress 2018-09-13 16:11:16 +00:00
tweener.js cleanup: Use arrow notation for anonymous functions 2018-02-21 13:55:00 +00:00
unlockDialog.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
userWidget.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
viewSelector.js viewSelector: Don't unfocus other modals on reset 2018-10-04 16:40:46 +00:00
windowAttentionHandler.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00
windowManager.js dbus: Move all interface descriptions into the resource 2018-09-17 07:34:49 +00:00
windowMenu.js windowMenu: Port from Meta.ScreenDirection to Meta.DisplayDirection 2018-09-11 12:59:07 +02:00
workspace.js workspace: Simplify detecting added dialogs after closing a window 2018-08-03 00:09:02 +02:00
workspacesView.js workspacesView: initialize self._restackedNotifyId 2018-09-25 23:00:53 +01:00
workspaceSwitcherPopup.js Remove usage of MetaScreen 2018-07-06 19:56:19 +02:00
workspaceThumbnail.js Revert "workspaceThumbnail: rebuild thumbnails if workareas size changed" 2018-08-19 12:41:08 +00:00
xdndHandler.js cleanup: Use Function.prototype.bind() 2018-02-21 13:55:02 +00:00