Bug 516795 - very long start-up org.eclipse.ltk.ui.refactoring
Summary: very long start-up org.eclipse.ltk.ui.refactoring
Status: CLOSED DUPLICATE of bug 205705
Alias: None
Product: PDE
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 4.7   Edit
Hardware: PC Windows NT
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Karsten Thoms CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2017-05-17 06:31 EDT by Jonah Graham CLA
Modified: 2019-12-05 02:26 EST (History)
7 users (show)

See Also:


Attachments
jps log (21.68 KB, application/octet-stream)
2017-05-17 06:31 EDT, Jonah Graham CLA
no flags Details
jps without Plugins View open (27.99 KB, application/octet-stream)
2017-05-17 06:31 EDT, Jonah Graham CLA
no flags Details
opening Plug-ins view after eclipse launches (35.23 KB, application/octet-stream)
2017-05-17 06:35 EDT, Jonah Graham CLA
no flags Details
jstack output while typing (37.01 KB, application/octet-stream)
2019-02-15 06:21 EST, Jonah Graham CLA
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
Description Jonah Graham CLA 2017-05-17 06:31:20 EDT
Created attachment 268396 [details]
jps log

Eclipse SDK Oxygen M7 is having very slow startup times for me, showing org.eclipse.ltk.ui.refactoring in the splashscreen for the whole delay. See attached jps log file.

I have extracted the main thread. I have done a few runs which have similar results. As this first result looked like it may be because PluginsView was open, I re-ran without PluginsView open and will attach that trace next.


"main" #1 prio=6 os_prio=0 tid=0x000000000213e800 nid=0x24c0 runnable [0x000000000014a000]
   java.lang.Thread.State: RUNNABLE
	at java.io.WinNTFileSystem.getBooleanAttributes(Native Method)
	at java.io.File.exists(File.java:819)
	at org.eclipse.pde.core.target.TargetBundle.initialize(TargetBundle.java:151)
	at org.eclipse.pde.core.target.TargetBundle.<init>(TargetBundle.java:71)
	at org.eclipse.pde.internal.core.target.IUBundleContainer.generateBundle(IUBundleContainer.java:441)
	at org.eclipse.pde.internal.core.target.IUBundleContainer.generateResolvedBundles(IUBundleContainer.java:415)
	at org.eclipse.pde.internal.core.target.IUBundleContainer.cacheBundles(IUBundleContainer.java:307)
	at org.eclipse.pde.internal.core.target.IUBundleContainer.synchronizerChanged(IUBundleContainer.java:333)
	at org.eclipse.pde.internal.core.target.P2TargetUtils.notify(P2TargetUtils.java:805)
	at org.eclipse.pde.internal.core.target.P2TargetUtils.synchronize(P2TargetUtils.java:743)
	- locked <0x00000000c2dd1c70> (a org.eclipse.pde.internal.core.target.P2TargetUtils)
	at org.eclipse.pde.internal.core.target.IUBundleContainer.resolveFeatures(IUBundleContainer.java:179)
	at org.eclipse.pde.internal.core.target.AbstractBundleContainer.resolve(AbstractBundleContainer.java:82)
	at org.eclipse.pde.internal.core.target.TargetDefinition.resolve(TargetDefinition.java:282)
	at org.eclipse.pde.internal.core.TargetPlatformHelper.getWorkspaceTargetResolved(TargetPlatformHelper.java:485)
	at org.eclipse.pde.internal.core.PluginModelManager.getExternalBundles(PluginModelManager.java:615)
	at org.eclipse.pde.internal.core.PluginModelManager.initializeTable(PluginModelManager.java:539)
	- locked <0x00000000c2e1ef68> (a org.eclipse.pde.internal.core.PluginModelManager)
	at org.eclipse.pde.internal.core.PluginModelManager.getState(PluginModelManager.java:1166)
	at org.eclipse.pde.internal.core.TargetPlatformHelper.getPDEState(TargetPlatformHelper.java:460)
	at org.eclipse.pde.internal.ui.util.SourcePluginFilter.<init>(SourcePluginFilter.java:28)
	at org.eclipse.pde.internal.ui.views.plugins.PluginsView.<init>(PluginsView.java:81)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	at java.lang.Class.newInstance(Class.java:442)
	at org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:184)
	at org.eclipse.core.internal.registry.ExtensionRegistry.createExecutableExtension(ExtensionRegistry.java:905)
	at org.eclipse.core.internal.registry.ConfigurationElement.createExecutableExtension(ConfigurationElement.java:243)
	at org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:55)
	at org.eclipse.ui.internal.registry.ViewDescriptor.createView(ViewDescriptor.java:59)
	at org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:101)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.createPart(CompatibilityPart.java:293)
	at org.eclipse.ui.internal.e4.compatibility.CompatibilityPart.create(CompatibilityPart.java:331)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:55)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:990)
	at org.eclipse.e4.core.internal.di.InjectorImpl.processAnnotated(InjectorImpl.java:955)
	at org.eclipse.e4.core.internal.di.InjectorImpl.inject(InjectorImpl.java:124)
	at org.eclipse.e4.core.internal.di.InjectorImpl.internalMake(InjectorImpl.java:399)
	at org.eclipse.e4.core.internal.di.InjectorImpl.make(InjectorImpl.java:318)
	at org.eclipse.e4.core.contexts.ContextInjectionFactory.make(ContextInjectionFactory.java:162)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.createFromBundle(ReflectionContributionFactory.java:105)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.doCreate(ReflectionContributionFactory.java:74)
	at org.eclipse.e4.ui.internal.workbench.ReflectionContributionFactory.create(ReflectionContributionFactory.java:56)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.createWidget(ContributedPartRenderer.java:129)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:997)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:666)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$1.run(PartRenderingEngine.java:551)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:535)
	at org.eclipse.e4.ui.workbench.renderers.swt.ElementReferenceRenderer.createWidget(ElementReferenceRenderer.java:70)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createWidget(PartRenderingEngine.java:997)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:666)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
	at org.eclipse.e4.ui.workbench.renderers.swt.StackRenderer.showTab(StackRenderer.java:1289)
	at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:97)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:684)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:69)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:137)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:69)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveRenderer.processContents(PerspectiveRenderer.java:49)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.showTab(PerspectiveStackRenderer.java:79)
	at org.eclipse.e4.ui.workbench.renderers.swt.LazyStackRenderer.postProcess(LazyStackRenderer.java:97)
	at org.eclipse.e4.ui.workbench.renderers.swt.PerspectiveStackRenderer.postProcess(PerspectiveStackRenderer.java:61)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:684)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:69)
	at org.eclipse.e4.ui.workbench.renderers.swt.SashRenderer.processContents(SashRenderer.java:137)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
	at org.eclipse.e4.ui.workbench.renderers.swt.SWTPartRenderer.processContents(SWTPartRenderer.java:69)
	at org.eclipse.e4.ui.workbench.renderers.swt.WBWRenderer.processContents(WBWRenderer.java:704)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:680)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.safeCreateGui(PartRenderingEngine.java:772)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.access$0(PartRenderingEngine.java:743)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$2.run(PartRenderingEngine.java:737)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.createGui(PartRenderingEngine.java:721)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1081)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1044)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
	at org.eclipse.ui.internal.Workbench$$Lambda$65/1924966548.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:653)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
Comment 1 Jonah Graham CLA 2017-05-17 06:31:52 EDT
Created attachment 268397 [details]
jps without Plugins View open
Comment 2 Jonah Graham CLA 2017-05-17 06:35:54 EDT
Created attachment 268398 [details]
opening Plug-ins view after eclipse launches

In the jps without Plugins View open I see that it is the PackageExplorerContentProvider that is there. So restarting without either Plug-ins or Package Explorer open does lead to normal start-up times.

Then if I open the Plug-ins view the UI freezes for a long time. I have attached the jps output in that case.
Comment 3 Vikas Chandra CLA 2017-05-17 06:41:12 EDT
With comparison to M6, what is the slowdown percentage ?
Comment 4 Jonah Graham CLA 2017-05-17 07:33:23 EDT
(In reply to Vikas Chandra from comment #3)
> With comparison to M6, what is the slowdown percentage ?

Hi Vikas, I re-read Comment 0, I certainly implied this was a regression, I had only meant to emphasize that I tested with latest and greatest.

This AFAICT has been a problem for a while (Neon or earlier) possibly forever. The example provided stack traces cause Eclipse to hang the UI for many minutes. 

I had been meaning to submit this for a while, but I finally found a reproducible case so I got useful (I think?) stack traces.
Comment 5 Vikas Chandra CLA 2017-05-17 07:43:27 EDT
Ok thanks. I will investigate
Comment 6 Mat Hansen CLA 2018-04-23 07:45:12 EDT
I experienced this issue today on a Windows 10 machine. The progress bar in the splash screen was hanging at "org.eclipse.ltk.ui.refactoring". After starting the task manager it turned out it was the Windows Defender which used up most of the CPU time while the Eclipse process was pretty much idle. Disabling the "Real-time protection" feature of Windows Defender substantially improved the startup time.
Comment 7 Eclipse Genie CLA 2018-10-29 12:53:27 EDT
New Gerrit change created: https://git.eclipse.org/r/131609
Comment 8 Karsten Thoms CLA 2019-02-08 10:26:18 EST
The plugin view is blocked when it was open on startup, while the target platform state was not initialized yet. In this case the filter initialization can be deferred to a background job which triggers the TP initialization and applies the filter lazily. The UI thread is then not blocked anymore. For the case that TP state is initialized already, the filter can be immediately applied.
Comment 10 Julian Honnen CLA 2019-02-08 10:51:38 EST
Thanks Karsten
Comment 11 Lars Vogel CLA 2019-02-12 10:52:14 EST
(In reply to Julian Honnen from comment #10)
> Thanks Karsten

IIRC we prefer to use descriptive names for jobs. 	

Job.createSystem("", monitor -> { //$NON-NLS-1$

would make it harder to identify what is running if I also displaying system jobs in the Progress Monitor.

Can we add a name to the job?
Comment 12 Eclipse Genie CLA 2019-02-13 06:50:00 EST
New Gerrit change created: https://git.eclipse.org/r/136834
Comment 14 Vikas Chandra CLA 2019-02-15 04:49:37 EST
Can bug reporter or bug assignee please verify this defect for 4.11M3?
Comment 15 Jonah Graham CLA 2019-02-15 05:21:05 EST
(In reply to Vikas Chandra from comment #14)
> Can bug reporter or bug assignee please verify this defect for 4.11M3?

I am testing this now.
Comment 16 Jonah Graham CLA 2019-02-15 06:15:34 EST
(In reply to Jonah Graham from comment #15)
> (In reply to Vikas Chandra from comment #14)
> > Can bug reporter or bug assignee please verify this defect for 4.11M3?
> 
> I am testing this now.

Tested with eclipse-SDK-I20190214-1800

This is a step in the right direction. Eclipse startup no longer hangs with this change on the splash screen. 

However, if the Plug-ins view is open when I start (or I open immediately after I start) the UI will still lock up for a long time depending on what I do. For example, typing in a Java editor causes a long (>20 second) lockup. I don't have any lockup if I don't open the Plug-ins view. 

Therefore, this is good progress, but I don't think the underlying problem is resolved. I will try to capture useful stack traces and attach here.
Comment 17 Jonah Graham CLA 2019-02-15 06:21:23 EST
Created attachment 277590 [details]
jstack output while typing

The attached log was reproduced with my largish workspace (all of Eclipse CDT using CDT's target platform) and the eclipse-SDK-I20190214-1800 with no additional plug-ins installed.
Comment 18 Lars Vogel CLA 2019-02-19 03:31:37 EST
Mass change, please reset target if you still planning to fix this for 4.11.
Comment 19 Lars Vogel CLA 2019-06-12 13:43:40 EDT
Karsten, are you planning to work on this?
Comment 20 Karsten Thoms CLA 2019-06-13 04:48:48 EDT
(In reply to Lars Vogel from comment #19)
> Karsten, are you planning to work on this?

Can't do this ATM, time is rare :(
Comment 21 Lars Vogel CLA 2019-12-04 16:24:32 EST
(In reply to Karsten Thoms from comment #20)
> (In reply to Lars Vogel from comment #19)
> > Karsten, are you planning to work on this?
> 
> Can't do this ATM, time is rare :(

Maybe for 4.15?
Comment 22 Julian Honnen CLA 2019-12-05 02:06:05 EST
The underlying performance issue looks like bug 205705.
Comment 23 Lars Vogel CLA 2019-12-05 02:25:45 EST

*** This bug has been marked as a duplicate of bug 205705 ***
Comment 24 Lars Vogel CLA 2019-12-05 02:26:15 EST
Thanks Julian