Community
Participate
Working Groups
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
Created attachment 10538 [details] Stack trace
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.
Has anyone looked at the performance dump? Is it still relevent? Is fillActionBars still slow?
The profile is out of date, but fillActionBars is still a concern. It takes 480ms on my machine (of 9 secs).
is this going to be fixed?
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.
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.
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
I don't see anything we can do to improve this situation.