gnome-shell/js/ui
Daniel van Vugt e781e1fdba iconGrid: Create icon clones in a separate loop
For reasons not yet fully understood, `Main.uiGroup.add_actor` takes around
10 milliseconds to complete.

Because of this, each `actor.opacity = 0` has a good chance of falling
on a different frame. And when it does, `_opacityChangedId` also lands
on multiple different frames each incurring a separate relayout cycle.
It is this excessive number of relayouts that causes stuttering in the
icon grid animation (#2065). But it is the slowness of `uiGroup.add_actor`
that causes the number to be excessive when it should be one.

By creating the clones and adding them to `uiGroup` early, we then enable
the existing loop starting the animation to complete within a single frame.
And by completing within a single frame all the opacity changes land within
the same frame interval, thus incurring only a single relayout instead of
many.

This issue went unnoticed until 004a5e1042 (!704), after which the slow
emissions of `notify::opacity` became a more visible performance problem.

Closes: https://gitlab.gnome.org/GNOME/gnome-shell/issues/2065

https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/1002
2020-02-19 15:39:21 +00:00
..
components js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
status js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
accessDialog.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
altTab.js altTab: Allow pressing uppercase keys to close apps and windows 2020-01-17 14:34:34 +00:00
animation.js animation: Scale animation actor for HiDPI 2020-01-30 14:28:45 +00:00
appDisplay.js appDisplay: Remove unnecessary bind constraint 2020-02-19 09:20:05 -03:00
appFavorites.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
audioDeviceSelection.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
background.js background: Remove noise texture 2020-02-10 22:30:52 +00:00
backgroundMenu.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
barLevel.js cleanup: Require "dangling" commas 2019-11-11 19:25:14 +00:00
boxpointer.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
calendar.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
checkBox.js checkbox: Correctly align label 2020-01-30 15:48:26 +01:00
closeDialog.js dialog: Rename subtitle property to description 2020-01-15 00:12:54 +01:00
ctrlAltTab.js cleanup: Require "dangling" commas 2019-11-11 19:25:14 +00:00
dash.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
dateMenu.js dateMenu: Use BindConstraint for indicator pad 2020-02-19 12:44:28 +00:00
dialog.js dialogs: Use a smaller font-size if the title width exceeds the space 2020-02-17 21:42:05 +00:00
dnd.js dnd: Make DND translation-property-aware 2020-02-07 14:43:56 +00:00
edgeDragAction.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
endSessionDialog.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
environment.js environment: Remove unused ease parameter 2020-01-06 13:17:59 +00:00
extensionDownloader.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
extensionSystem.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
focusCaretTracker.js cleanup: Prefer template strings 2019-07-05 11:32:31 +00:00
grabHelper.js grabHelper: Add (promised-based) grabAsync() 2019-12-20 15:41:32 +01:00
ibusCandidatePopup.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
iconGrid.js iconGrid: Create icon clones in a separate loop 2020-02-19 15:39:21 +00:00
inhibitShortcutsDialog.js inhibitShortcutsDialog: Adapt to new dialog design 2020-01-27 23:40:04 +01:00
kbdA11yDialog.js ui: Use ClutterSeat for keyboard/pointer a11y 2020-01-30 17:49:08 +00:00
keyboard.js keyboard: Plug a leak of KeyboardControllers 2020-02-18 14:48:39 +00:00
layout.js switcherPopup: Dismiss when a system modal dialog opens 2019-12-06 19:55:39 +01:00
lightbox.js lightbox: Change vignette brightness to 0.5 2020-01-19 18:01:57 +01:00
locatePointer.js locatePointer: Bind ripples creation to settings 2019-09-09 19:28:18 +00:00
lookingGlass.js lookingGlass: Also handle null objects in objectToString 2020-02-19 11:56:36 +01:00
magnifier.js magnifier: Make magnification factor changes animatable 2020-02-07 18:18:25 +01:00
magnifierDBus.js cleanup: Use JSDoc for documentation comments 2019-11-11 19:25:14 +00:00
main.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
messageList.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
messageTray.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
modalDialog.js switcherPopup: Dismiss when a system modal dialog opens 2019-12-06 19:55:39 +01:00
mpris.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
notificationDaemon.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
osdMonitorLabeler.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
osdWindow.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
overview.js Update hint texts of all entries 2020-02-17 11:03:07 +00:00
overviewControls.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
padOsd.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
pageIndicators.js pageIndicators: Redesign and add position-based animation 2019-11-23 03:01:51 +05:00
panel.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
panelMenu.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
pointerA11yTimeout.js ui: Use ClutterSeat for keyboard/pointer a11y 2020-01-30 17:49:08 +00:00
pointerWatcher.js cleanup: Stop using Mainloop module 2019-09-12 19:09:24 +02:00
popupMenu.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
remoteSearch.js cleanup: Avoid unnecessary parentheses 2019-11-11 19:25:14 +00:00
ripples.js cleanup: Require "dangling" commas 2019-11-11 19:25:14 +00:00
runDialog.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
screencast.js cleanup: Use destructuring for imports from GI 2019-02-09 07:39:20 +01:00
screenShield.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
screenshot.js screenshot: Fix stripping suffix from relative filename 2020-01-10 19:31:04 +01:00
scripting.js perf-tool: Spawn perf-tool-helper from gnome-shell 2020-01-27 13:43:06 +00:00
search.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
sessionMode.js sessionMode: Remove lock-screen mode 2020-02-10 22:30:52 +00:00
shellDBus.js extensionPrefs: Rename to Extensions 2020-02-03 19:03:19 +01:00
shellEntry.js js: Initialize some properties 2020-01-31 17:39:18 +01:00
shellMountOperation.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
slider.js slider: Stop emulating drags in key handling 2019-11-23 15:08:54 +01:00
swipeTracker.js swipeTracker: Reset scroll gesture state on disabling 2020-02-06 17:36:05 +00:00
switcherPopup.js altTab: Don't return from _init() if there are no windows/apps 2020-01-17 14:34:34 +00:00
switchMonitor.js switchMonitor: Center align switcher icon's label 2020-01-02 13:03:08 +05:30
tweener.js tweener: Use new adjustAnimationTime() helper 2019-08-06 20:50:43 +02:00
unlockDialog.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
userWidget.js userWidget: Always set actor size inside update() 2020-02-18 22:10:00 +00:00
viewSelector.js workspaceThumbnail: Sync indicator with WorkspacesDisplay 2020-01-08 23:07:08 +01:00
windowAttentionHandler.js cleanup: Don't shadow variables 2019-11-11 19:25:14 +00:00
windowManager.js js: Don't use templates in files with translations 2020-02-17 23:20:40 +01:00
windowMenu.js cleanup: Avoid unnecessary parentheses in arrow functions 2019-09-15 16:02:45 +02:00
workspace.js workspace: Ensure style of window-chrome titles before requesting width 2020-02-19 10:09:20 +00:00
workspacesView.js workspacesView: Disable swipe tracker during window dragging 2020-01-28 22:08:48 +00:00
workspaceSwitcherPopup.js cleanup: Require "dangling" commas 2019-11-11 19:25:14 +00:00
workspaceThumbnail.js workspaceThumbnail: Sync indicator with WorkspacesDisplay 2020-01-08 23:07:08 +01:00
xdndHandler.js cleanup: Require "dangling" commas 2019-11-11 19:25:14 +00:00