Bug 61901 - [ActionSets] IDEWorkbenchAdvisor.fillActionBars slow on startup
Summary: [ActionSets] IDEWorkbenchAdvisor.fillActionBars slow on startup
Status: RESOLVED WONTFIX
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.0   Edit
Hardware: PC Windows XP
: P3 normal (vote)
Target Milestone: 3.1 M7   Edit
Assignee: Nick Edgar CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2004-05-12 10:23 EDT by Tod Creasey CLA
Modified: 2005-05-04 17:09 EDT (History)
2 users (show)

See Also:


Attachments
Stack trace (70.37 KB, text/html)
2004-05-12 10:23 EDT, Tod Creasey CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Tod Creasey CLA 2004-05-12 10:23:35 EDT
I will attach a stack trace of the startup time of the fillActionBars method 
which is taking about 2 seconds. Note 
that it is likely not actually this bad as the profiler causes some 
performance degredation.

DETAILS
1) Workbench has platform-ui module loaded
2) No editors open
3) Only the resource perspective is opened 
4) Default views for the resource perspective
Comment 1 Tod Creasey CLA 2004-05-12 10:23:52 EDT
Created attachment 10538 [details]
Stack trace
Comment 2 Tod Creasey CLA 2005-03-07 11:57:15 EST
Adding my name to the cc list as we are now tracking performance issues more
closely. Please remove the performance keyword if this is not a performance bug.
Comment 3 Mike Wilson CLA 2005-04-21 14:55:48 EDT
Has anyone looked at the performance dump? Is it still relevent? Is fillActionBars still slow?
Comment 4 Nick Edgar CLA 2005-04-21 16:07:38 EDT
The profile is out of date, but fillActionBars is still a concern.  It takes
480ms on my machine (of 9 secs).

Comment 5 Mike Wilson CLA 2005-04-25 10:07:07 EDT
is this going to be fixed?
Comment 6 Nick Edgar CLA 2005-04-25 10:25:30 EDT
Turns out most of the time is in classloading, not in the commands stuff like I
first expected.  I'm still investigating if there are cases that can be deferred.
Comment 7 Nick Edgar CLA 2005-04-27 15:39:03 EDT
Latest data, running target eclipse with minimal workspace (one empty simple
project):
- on startup, fillActionBars takes 551ms
- on Window > New Window, it takes 10ms

This shows that most of the time is in class loading, static initializers, or
bundle starts.

10ms is still a long time to add a handful of actions though.
Comment 8 Nick Edgar CLA 2005-05-03 19:02:04 EDT
250 classes are loaded during WorkbenchActionBuilder.fillActionBars().
Almost all of these are the concrete actions and contribution items that appear
in the IDE's menus.  

java.text.Collator and friends are triggered, but they would get referenced
sooner or later anyway.

It's unfortunate that the pattern in ActionFactory and ContributionItemFactory
causes all the nested classes to be loaded for verification.  ActionFactory
alone accounts for 80ms.

Here is the complete list:

org.eclipse.ui.actions.ActionFactory
org.eclipse.ui.actions.ActionFactory$1
org.eclipse.ui.actions.ActionFactory$2
org.eclipse.ui.actions.ActionFactory$3
org.eclipse.ui.actions.ActionFactory$4
org.eclipse.ui.actions.ActionFactory$5
org.eclipse.ui.actions.ActionFactory$6
org.eclipse.ui.actions.ActionFactory$7
org.eclipse.ui.actions.ActionFactory$8
org.eclipse.ui.actions.ActionFactory$9
org.eclipse.ui.actions.ActionFactory$10
org.eclipse.ui.actions.ActionFactory$11
org.eclipse.ui.actions.ActionFactory$12
org.eclipse.ui.actions.ActionFactory$13
org.eclipse.ui.actions.ActionFactory$14
org.eclipse.ui.actions.ActionFactory$15
org.eclipse.ui.actions.ActionFactory$16
org.eclipse.ui.actions.ActionFactory$17
org.eclipse.ui.actions.ActionFactory$18
org.eclipse.ui.actions.ActionFactory$19
org.eclipse.ui.actions.ActionFactory$20
org.eclipse.ui.actions.ActionFactory$21
org.eclipse.ui.actions.ActionFactory$22
org.eclipse.ui.actions.ActionFactory$23
org.eclipse.ui.actions.ActionFactory$24
org.eclipse.ui.actions.ActionFactory$25
org.eclipse.ui.actions.ActionFactory$26
org.eclipse.ui.actions.ActionFactory$27
org.eclipse.ui.actions.ActionFactory$28
org.eclipse.ui.actions.ActionFactory$29
org.eclipse.ui.actions.ActionFactory$30
org.eclipse.ui.actions.ActionFactory$31
org.eclipse.ui.actions.ActionFactory$32
org.eclipse.ui.actions.ActionFactory$33
org.eclipse.ui.actions.ActionFactory$34
org.eclipse.ui.actions.ActionFactory$35
org.eclipse.ui.actions.ActionFactory$36
org.eclipse.ui.actions.ActionFactory$37
org.eclipse.ui.actions.ActionFactory$38
org.eclipse.ui.actions.ActionFactory$39
org.eclipse.ui.actions.ActionFactory$40
org.eclipse.ui.actions.ActionFactory$41
org.eclipse.ui.actions.ActionFactory$42
org.eclipse.ui.actions.ActionFactory$43
org.eclipse.ui.actions.ActionFactory$44
org.eclipse.ui.actions.ActionFactory$45
org.eclipse.ui.actions.ActionFactory$46
org.eclipse.ui.actions.ActionFactory$47
org.eclipse.ui.actions.ActionFactory$48
org.eclipse.ui.actions.ActionFactory$49
org.eclipse.ui.actions.ActionFactory$50
org.eclipse.ui.actions.ActionFactory$51
org.eclipse.ui.actions.ActionFactory$52
org.eclipse.ui.actions.ActionFactory$53
org.eclipse.ui.actions.ActionFactory$54
org.eclipse.ui.actions.ActionFactory$55
org.eclipse.ui.actions.ActionFactory$56
org.eclipse.ui.actions.ActionFactory$57
org.eclipse.ui.actions.ActionFactory$58
org.eclipse.ui.actions.ActionFactory$59
org.eclipse.ui.actions.ActionFactory$60
org.eclipse.ui.actions.ActionFactory$61
org.eclipse.ui.internal.util.StatusLineContributionItem
org.eclipse.ui.actions.NewWizardAction
org.eclipse.jface.viewers.IStructuredSelection
org.eclipse.jface.wizard.IWizard
org.eclipse.ui.internal.PerspectiveTracker
org.eclipse.ui.internal.help.WorkbenchHelpSystem
org.eclipse.help.internal.HelpPlugin
org.eclipse.help.IHelp
org.eclipse.ui.internal.help.WorkbenchHelpSystem$1
org.eclipse.ui.internal.help.WorkbenchHelpSystem$6
org.eclipse.jface.commands.ActionHandler
org.eclipse.ui.ide.IDEActionFactory
org.eclipse.ui.ide.IDEActionFactory$1
org.eclipse.ui.ide.IDEActionFactory$2
org.eclipse.ui.ide.IDEActionFactory$3
org.eclipse.ui.ide.IDEActionFactory$4
org.eclipse.ui.ide.IDEActionFactory$5
org.eclipse.ui.ide.IDEActionFactory$6
org.eclipse.ui.ide.IDEActionFactory$7
org.eclipse.ui.ide.IDEActionFactory$8
org.eclipse.ui.ide.IDEActionFactory$9
org.eclipse.ui.ide.IDEActionFactory$10
org.eclipse.ui.ide.IDEActionFactory$11
org.eclipse.ui.ide.IDEActionFactory$12
org.eclipse.ui.ide.IDEActionFactory$13
org.eclipse.ui.ide.IDEActionFactory$14
org.eclipse.ui.ide.IDEActionFactory$15
org.eclipse.ui.internal.ide.actions.RetargetActionWithDefault
org.eclipse.ui.actions.CompoundContributionItem
org.eclipse.ui.actions.BaseNewWizardMenu
org.eclipse.ui.actions.NewWizardMenu
org.eclipse.jface.action.IMenuListener
org.eclipse.ui.actions.BaseNewWizardMenu$3
org.eclipse.ui.actions.CompoundContributionItem$1
org.eclipse.ui.actions.BaseNewWizardMenu$1
org.eclipse.ui.actions.BaseNewWizardMenu$2
org.eclipse.ui.actions.NewProjectAction
org.eclipse.jface.viewers.StructuredSelection
org.eclipse.ui.actions.NewExampleAction
org.eclipse.ui.actions.NewWizardDropDownAction
org.eclipse.ui.actions.NewWizardDropDownAction$1
org.eclipse.ui.actions.BaseSelectionListenerAction
org.eclipse.ui.actions.ImportResourcesAction
org.eclipse.ui.actions.ImportResourcesAction$1
org.eclipse.ui.actions.ExportResourcesAction
org.eclipse.ui.actions.ExportResourcesAction$1
org.eclipse.ui.actions.GlobalBuildAction
org.eclipse.ui.actions.GlobalBuildAction$1
org.eclipse.ui.internal.ide.actions.BuildCleanAction
org.eclipse.ui.internal.ide.actions.ToggleAutoBuildAction
org.eclipse.ui.internal.PageEventAction
org.eclipse.ui.internal.ActiveEditorAction
org.eclipse.ui.internal.BaseSaveAction
org.eclipse.ui.internal.SaveAction
org.eclipse.ui.internal.BaseSaveAction$1
org.eclipse.ui.internal.BaseSaveAction$2
org.eclipse.ui.internal.SaveAsAction
org.eclipse.ui.internal.SaveAllAction
org.eclipse.ui.internal.actions.OpenAgainAction
org.eclipse.ui.actions.RetargetAction$1
org.eclipse.ui.actions.RetargetAction$2
org.eclipse.ui.internal.CloseEditorAction
org.eclipse.ui.internal.CloseAllAction
org.eclipse.ui.internal.CloseAllSavedAction
org.eclipse.ui.internal.actions.HelpContentsAction
org.eclipse.ui.internal.actions.HelpSearchAction
org.eclipse.ui.internal.actions.DynamicHelpAction
org.eclipse.ui.internal.about.AboutAction
org.eclipse.ui.internal.OpenPreferencesAction
org.eclipse.ui.internal.ide.IDEPreferenceInitializer
org.eclipse.ui.actions.QuickStartAction
org.eclipse.ui.internal.ide.AboutInfo
org.eclipse.ui.internal.ide.TipsAndTricksAction
org.eclipse.ui.internal.ShowPartPaneMenuAction
org.eclipse.ui.internal.ShowViewMenuAction
org.eclipse.ui.internal.CyclePartAction
org.eclipse.ui.internal.CycleEditorAction
org.eclipse.swt.layout.FillLayout
org.eclipse.swt.events.FocusListener
org.eclipse.swt.events.TraverseListener
org.eclipse.swt.events.MouseListener
org.eclipse.swt.events.KeyListener
org.eclipse.ui.internal.CyclePerspectiveAction
org.eclipse.jface.viewers.ILabelProvider
org.eclipse.jface.viewers.LabelProvider
org.eclipse.jface.viewers.ITableLabelProvider
org.eclipse.ui.model.PerspectiveLabelProvider
org.eclipse.ui.internal.ActivateEditorAction
org.eclipse.ui.internal.MaximizePartAction
org.eclipse.ui.internal.MinimizePartAction
org.eclipse.ui.internal.WorkbenchEditorsAction
org.eclipse.ui.internal.WorkbookEditorsAction
org.eclipse.ui.internal.PerspectiveAction
org.eclipse.ui.internal.ToggleEditorsVisibilityAction
org.eclipse.ui.internal.SavePerspectiveAction
org.eclipse.ui.IPerspectiveDescriptor
org.eclipse.ui.internal.EditActionSetsAction
org.eclipse.ui.internal.LockToolBarAction
org.eclipse.ui.internal.LockToolBarAction$1
org.eclipse.ui.internal.ResetPerspectiveAction
org.eclipse.ui.internal.ClosePerspectiveAction
org.eclipse.ui.internal.CloseAllPerspectivesAction
org.eclipse.ui.internal.NavigationHistoryAction
org.eclipse.ui.internal.NavigationHistoryAction$MenuCreator
org.eclipse.ui.internal.QuitAction
org.eclipse.ui.internal.ide.actions.OpenWorkspaceAction
org.eclipse.ui.internal.ide.actions.ProjectPropertyDialogAction
org.eclipse.jface.viewers.ISelectionProvider
org.eclipse.ui.internal.WorkbenchIntroManager
org.eclipse.ui.IViewPart
org.eclipse.ui.internal.WorkbenchIntroManager$1
org.eclipse.ui.internal.IntroAction
org.eclipse.ui.internal.intro.IntroMessages
org.eclipse.ui.internal.IntroAction$1
org.eclipse.swt.widgets.Table
org.eclipse.swt.widgets.Tree
org.eclipse.swt.custom.StyledText
org.eclipse.ui.actions.ContributionItemFactory
org.eclipse.ui.actions.ContributionItemFactory$1
org.eclipse.ui.actions.ContributionItemFactory$2
org.eclipse.ui.actions.ContributionItemFactory$3
org.eclipse.ui.actions.ContributionItemFactory$4
org.eclipse.ui.actions.ContributionItemFactory$5
org.eclipse.ui.actions.ContributionItemFactory$6
org.eclipse.ui.actions.ContributionItemFactory$7
org.eclipse.ui.actions.ContributionItemFactory$8
org.eclipse.ui.internal.PinEditorAction
org.eclipse.ui.internal.PinEditorAction$1
org.eclipse.ui.internal.actions.PinEditorContributionItem
org.eclipse.jface.action.ActionContributionItem$1
org.eclipse.jface.action.ActionContributionItem$2
org.eclipse.ui.internal.actions.PinEditorContributionItem$1
org.eclipse.ui.internal.ReopenEditorMenu
org.eclipse.ui.internal.ReopenEditorMenu$1
org.eclipse.ui.internal.ShowInMenu
org.eclipse.ui.internal.ShowInMenu$1
org.eclipse.ui.internal.ide.actions.BuildSetMenu
org.eclipse.ui.internal.ide.actions.BuildSetMenu$1
org.eclipse.ui.internal.ide.actions.SelectBuildWorkingSetAction
org.eclipse.ui.actions.OpenInNewWindowAction
org.eclipse.ui.actions.PerspectiveMenu
org.eclipse.ui.internal.ChangeToPerspectiveMenu
org.eclipse.ui.actions.PerspectiveMenu$3
org.eclipse.ui.actions.PerspectiveMenu$1
org.eclipse.ui.actions.PerspectiveMenu$2
java.text.Collator from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.RuleBasedCollator from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.CollationRules from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.RBCollationTables from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.RBTableBuilder from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.RBCollationTables$BuildAPI from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.IntHashtable from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.CompactIntArray from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.NormalizerUtilities from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.Normalizer$Mode from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.Normalizer from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.DecompData from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.CompactCharArray from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.Utility from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.CompactByteArray from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.MergeCollation from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.PatternEntry$Parser from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.PatternEntry from d:\j2sdk1.4.2_01\jre\lib\rt.jar
java.text.EntryPair from d:\j2sdk1.4.2_01\jre\lib\rt.jar
sun.text.ComposedCharIter from d:\j2sdk1.4.2_01\jre\lib\rt.jar
org.eclipse.ui.internal.registry.PerspectiveRegistry
org.eclipse.ui.internal.registry.PerspectiveRegistry$1
org.eclipse.ui.internal.registry.PerspectiveRegistryReader
org.eclipse.ui.internal.registry.PerspectiveDescriptor
org.eclipse.jface.dialogs.DialogSettings
org.apache.crimson.tree.ParentNode$TagList from d:\j2sdk1.4.2_01\jre\lib\rt.jar
org.apache.crimson.tree.TreeWalker from d:\j2sdk1.4.2_01\jre\lib\rt.jar
org.eclipse.ui.internal.ShowViewMenu
org.eclipse.ui.internal.ShowViewMenu$2
org.eclipse.ui.internal.ShowViewMenu$1
org.eclipse.ui.handlers.ShowViewHandler
org.eclipse.ui.internal.ShowViewMenu$3
org.eclipse.ui.internal.SwitchToWindowMenu
org.eclipse.ui.internal.SwitchToWindowMenu$1
org.eclipse.jface.action.ToolBarManager
org.eclipse.swt.accessibility.AccessibleListener
org.eclipse.ui.internal.ide.WorkbenchActionBuilder$10
org.eclipse.ui.internal.ide.actions.BuildUtilities
org.eclipse.ui.internal.ide.WorkbenchActionBuilder$1
org.eclipse.ui.internal.ide.WorkbenchActionBuilder$2
org.eclipse.ui.internal.ide.WorkbenchActionBuilder$3
org.eclipse.ui.internal.ide.WorkbenchActionBuilder$5
Comment 9 Nick Edgar CLA 2005-05-04 17:09:34 EDT
I don't see anything we can do to improve this situation.