Bug 27360 - [startup] [Action Sets] debug.ui (and other) activated at startup
Summary: [startup] [Action Sets] debug.ui (and other) activated at startup
Status: RESOLVED DUPLICATE of bug 18830
Alias: None
Product: Platform
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 2.1   Edit
Hardware: PC Windows 2000
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Eduardo Pereira CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2002-11-28 16:36 EST by Jeff McAffer CLA
Modified: 2002-12-09 17:15 EST (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Jeff McAffer CLA 2002-11-28 16:36:23 EST
VM = Sidecar 1122 with -verify

Starting Eclipse with an empty workspace, debug.ui is activated as per the 
stack trace below.  This causes some 30 classes and 160K of code to be loaded.  
It also causes debug.core and ui.workbench.texteditor to be activated for a 
further 35 classed and 110K of code.  

This seems to be related to the external tools support and the drop down 
activation problem.  However, even if that problem is fixed, it still appears 
that too much work is being done to facilitate some presence in the external 
tools framework.


Activating plugin: org.eclipse.debug.ui
Plugin activation stack:
	org.eclipse.debug.ui
Class loading stack:
	org.eclipse.ui.externaltools.internal.menu.ExternalToolMenuDelegate
Stack trace:
java.lang.Throwable
	at java.lang.Throwable.<init>(Throwable.java)
	at org.eclipse.core.internal.runtime.PluginStats.traceActivate
(PluginStats.java:89)
	at org.eclipse.core.internal.runtime.PluginStats.startActivation
(PluginStats.java:71)
	at org.eclipse.core.internal.plugins.PluginDescriptor.doPluginActivation
(PluginDescriptor.java:187)
	at org.eclipse.core.internal.plugins.PluginClassLoader.activatePlugin
(PluginClassLoader.java:59)
	at 
org.eclipse.core.internal.plugins.PluginClassLoader.internalFindClassParentsSelf
(PluginClassLoader.java)
	at 
org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassParentsSelf
(DelegatingURLClassLoader.java)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass
(DelegatingURLClassLoader.java)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.access$0
(DelegatingURLClassLoader.java)
	at 
org.eclipse.core.internal.boot.DelegatingURLClassLoader$DelegateLoader.loadClass
(DelegatingURLClassLoader.java)
	at 
org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassPrerequisites
(DelegatingURLClassLoader.java)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass
(DelegatingURLClassLoader.java)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass
(DelegatingURLClassLoader.java)
	at java.lang.ClassLoader.loadClass(ClassLoader.java)
	at java.lang.ClassLoader.defineClassImpl(Native Method)
	at java.lang.ClassLoader.defineClass(ClassLoader.java)
	at java.security.SecureClassLoader.defineClass(SecureClassLoader.java)
	at java.net.URLClassLoader.defineClass(URLClassLoader.java)
	at java.net.URLClassLoader.access$400(URLClassLoader.java)
	at java.net.URLClassLoader$ClassFinder.run(URLClassLoader.java)
	at java.security.AccessController.doPrivileged
(AccessController.java:217)
	at java.net.URLClassLoader.findClass(URLClassLoader.java)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClass
(DelegatingURLClassLoader.java)
	at 
org.eclipse.core.internal.plugins.PluginClassLoader.internalFindClassParentsSelf
(PluginClassLoader.java)
	at 
org.eclipse.core.internal.boot.DelegatingURLClassLoader.findClassParentsSelf
(DelegatingURLClassLoader.java)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass
(DelegatingURLClassLoader.java)
	at org.eclipse.core.internal.boot.DelegatingURLClassLoader.loadClass
(DelegatingURLClassLoader.java)
	at java.lang.ClassLoader.loadClass(ClassLoader.java)
	at 
org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension
(PluginDescriptor.java:130)
	at 
org.eclipse.core.internal.plugins.PluginDescriptor.createExecutableExtension
(PluginDescriptor.java:167)
	at 
org.eclipse.core.internal.plugins.ConfigurationElement.createExecutableExtension
(ConfigurationElement.java:103)
	at org.eclipse.ui.internal.WorkbenchPlugin$1.run
(WorkbenchPlugin.java:116)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:65)
	at org.eclipse.ui.internal.WorkbenchPlugin.createExtension
(WorkbenchPlugin.java:113)
	at org.eclipse.ui.internal.PluginAction.createDelegate
(PluginAction.java:85)
	at org.eclipse.ui.internal.WWinPluginPulldown.getPulldownDelegate
(WWinPluginPulldown.java:72)
	at org.eclipse.ui.internal.WWinPluginPulldown$MenuProxy.getMenu
(WWinPluginPulldown.java:29)
	at org.eclipse.jface.action.ActionContributionItem.fill
(ActionContributionItem.java:228)
	at org.eclipse.jface.action.SubContributionItem.fill
(SubContributionItem.java:45)
	at org.eclipse.jface.action.MenuManager.update(MenuManager.java:535)
	at org.eclipse.jface.action.MenuManager.update(MenuManager.java:447)
	at org.eclipse.jface.action.MenuManager.fill(MenuManager.java:182)
	at org.eclipse.jface.action.SubContributionItem.fill
(SubContributionItem.java:45)
	at org.eclipse.jface.action.MenuManager.update(MenuManager.java:535)
	at org.eclipse.jface.action.MenuManager.updateAll(MenuManager.java:582)
	at org.eclipse.ui.internal.WorkbenchWindow.updateActionBars
(WorkbenchWindow.java:1442)
	at org.eclipse.ui.internal.WorkbenchWindow.updateActionSets
(WorkbenchWindow.java:1460)
	at org.eclipse.ui.internal.WorkbenchWindow$7.run
(WorkbenchWindow.java:1268)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:65)
	at org.eclipse.ui.internal.WorkbenchWindow.setActivePage
(WorkbenchWindow.java:1242)
	at org.eclipse.ui.internal.WorkbenchWindow.restoreState
(WorkbenchWindow.java:1125)
	at org.eclipse.ui.internal.Workbench.restoreState(Workbench.java:1231)
	at org.eclipse.ui.internal.Workbench.access$7(Workbench.java:1200)
	at org.eclipse.ui.internal.Workbench$8.run(Workbench.java:838)
	at org.eclipse.core.internal.runtime.InternalPlatform.run
(InternalPlatform.java:843)
	at org.eclipse.core.runtime.Platform.run(Platform.java:413)
	at org.eclipse.ui.internal.Workbench.openPreviousWorkbenchState
(Workbench.java:790)
	at org.eclipse.ui.internal.Workbench.init(Workbench.java:603)
	at org.eclipse.ui.internal.Workbench.run(Workbench.java:1346)
	at org.eclipse.core.internal.boot.InternalBootLoader.run
(InternalBootLoader.java:841)
	at org.eclipse.core.boot.BootLoader.run(BootLoader.java:462)
	at java.lang.reflect.AccessibleObject.invokeL(AccessibleObject.java:203)
	at java.lang.reflect.Method.invoke(Method.java:271)
	at org.eclipse.core.launcher.Main.basicRun(Main.java:247)
	at org.eclipse.core.launcher.Main.run(Main.java:703)
	at org.eclipse.core.launcher.Main.main(Main.java:539)
Comment 1 Nick Edgar CLA 2002-12-09 10:37:05 EST
It does not look like we will be able to fix this for M4.
We were looking at deferring submenu creation until the main menu was pulled 
down.  But we cannot do this due to the structure of the API.

We are investigating other options, like allowing plugins to add and remove 
items dynamically to action sets and having the workbench persist them, but 
this will not be done for M4.

Darin, how much room for improvement is there in reducing the startup time for 
debug and external tools, so that the effects of this are minimized?
For example, would it be possible for you to persist a picture of the menus 
without having to recreate the launch configs?
Comment 2 Nick Edgar CLA 2002-12-09 10:42:31 EST

*** This bug has been marked as a duplicate of 18830 ***
Comment 3 Darin Wright CLA 2002-12-09 17:15:59 EST
It is non-trivial work to persist the images/labels as temporary delegates, and 
then replace actions with the real "launch actions". As well, external tools 
subclasses the "AbstractLaunchToolbarAction" (defined in the debug UI), which 
will still cause the debug UI plug-in to be loaded (I believe). I believe we 
should just determine the proper solution, rather implementing a temporary fix.