| Summary: | JDT UI activator slows down startup of Eclipse | ||
|---|---|---|---|
| Product: | [Eclipse Project] JDT | Reporter: | Andrey Loskutov <loskutov> |
| Component: | UI | Assignee: | Mark Hoffmann <m.hoffmann> |
| Status: | RESOLVED WONTFIX | QA Contact: | |
| Severity: | normal | ||
| Priority: | P3 | CC: | daniel_megert, Lars.Vogel, m.hoffmann |
| Version: | 4.6 | ||
| Target Milestone: | 4.11 M3 | ||
| Hardware: | All | ||
| OS: | All | ||
| See Also: |
https://bugs.eclipse.org/bugs/show_bug.cgi?id=477579 https://git.eclipse.org/r/#/c/131872/ https://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/?id=a73822ec12b13bd4ac73d1f502e5b8b6f7544fd7 https://git.eclipse.org/r/#/c/135961/ https://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/?id=0e218f5e8779d6e61875a15f066066c9fb04fb63 https://bugs.eclipse.org/bugs/show_bug.cgi?id=547468 |
||
| Whiteboard: | |||
|
Description
Andrey Loskutov
Thanks Mark! Dani reported issues with this change in the PMC call. Dani, can you add details? That changes causes this on my Windows 7 machine (4 cores, 16 GB RAM) with Java 11 using the first build (I20190125-1800) that has that change: org.eclipse.core.runtime.AssertionFailedException: null argument: at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:88) at org.eclipse.core.runtime.Assert.isNotNull(Assert.java:76) at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:118) at org.eclipse.jface.resource.ColorRegistry.<init>(ColorRegistry.java:96) at org.eclipse.jface.resource.JFaceResources.getColorRegistry(JFaceResources.java:191) at org.eclipse.jdt.ui.PreferenceConstants.initializeDeprecatedColorConstants(PreferenceConstants.java:4350) at org.eclipse.jdt.ui.PreferenceConstants.initializeDefaultValues(PreferenceConstants.java:4027) at org.eclipse.jdt.internal.ui.JavaUIPreferenceInitializer.initializeDefaultPreferences(JavaUIPreferenceInitializer.java:38) at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper$1.run(PreferenceServiceRegistryHelper.java:301) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45) at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.runInitializer(PreferenceServiceRegistryHelper.java:304) at org.eclipse.core.internal.preferences.PreferenceServiceRegistryHelper.applyRuntimeDefaults(PreferenceServiceRegistryHelper.java:134) at org.eclipse.core.internal.preferences.PreferencesService.applyRuntimeDefaults(PreferencesService.java:375) at org.eclipse.core.internal.preferences.DefaultPreferences.applyRuntimeDefaults(DefaultPreferences.java:225) at org.eclipse.core.internal.preferences.DefaultPreferences.load(DefaultPreferences.java:279) at org.eclipse.core.internal.preferences.EclipsePreferences.create(EclipsePreferences.java:370) at org.eclipse.core.internal.preferences.EclipsePreferences.internalNode(EclipsePreferences.java:623) at org.eclipse.core.internal.preferences.EclipsePreferences.node(EclipsePreferences.java:766) at org.eclipse.core.internal.preferences.AbstractScope.getNode(AbstractScope.java:41) at org.eclipse.core.runtime.preferences.DefaultScope.getNode(DefaultScope.java:77) at org.eclipse.jdt.internal.core.manipulation.MembersOrderPreferenceCacheCommon.install(MembersOrderPreferenceCacheCommon.java:112) at org.eclipse.jdt.internal.ui.preferences.MembersOrderPreferenceCache.install(MembersOrderPreferenceCache.java:38) at org.eclipse.jdt.internal.ui.JavaPlugin.createMemberOrderPreferenceCache(JavaPlugin.java:682) at org.osgi.util.promise.DeferredPromiseImpl$Submit.run(DeferredPromiseImpl.java:658) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at java.base/java.lang.Thread.run(Thread.java:834) And I see JDT UI preferences not being correctly set. For example the 'Build Path' page has no default values. As a result, creating a new Java project results in an error. I will revert the change to see, whether it works again in tomorrow's build. . (In reply to Dani Megert from comment #3) Yep, the stack is direct result of the patch. If the code running before managed to init ColorRegistry, you will see no issues. Sadly, is that in this concrete case htere is no need in the Display at all, only RGB values are needed by org.eclipse.jdt.ui.PreferenceConstants.initializeDeprecatedColorConstants(IPreferenceStore). (In reply to Dani Megert from comment #3) > I will revert the change to see, whether it works again in tomorrow's build. Done. I was already sceptical when I saw the bug report. Reverting the change gets rid of the exception and creating new Java projects works again. Tested with eclipse-SDK-I20190129-1800-win32-x86_64. Besides that it badly broke things there are other issues with the proposed fix. Biggest issue is that it can cause a deadlock because getMemberOrderPreferenceCache() method blocks on promise.getValue. Depending on which thread (and its locks) calls getValue this can cause a deadlock. Furthermore we do not have any performance measurements that would show a performance improvement. |