Community
Participate
Working Groups
tasks.ui is starting up very slowly. Need to investigate where this performance problem is.
Created attachment 85624 [details] thread dumps from start
Created attachment 85625 [details] ignore above, this is the dump
I've committed some improvements to startup related to orphaned tasks. Deferring further changes to 2.3 since risk of destabilizing is high. Early in 2.3 I'll update AbstractTaskContainer to use a hashmap and will write unit tests to ensure url refactoring works correctly for all AbstractTaskContainer descendants including categories. This should result in considerable performance improvements.
Another spot that needs to be reviewed is the TaskActiviationHistory. It stores tasks in a list and relies on equals() for removing tasks.
Note to self: bug#210801 must be resolved first so that we can get straight forward access to task parents during handle refactoring
Further improvements will require guarding against formation of cycles in the tasklist model upon addition of tasks. Pushing to 3.0.
There is a cyclic dependency check in AbstractTaskContainerPropertySource.java in method public boolean containsCyclic(AbstractTaskContainer parent) in the sandbox.dev tools. Maybe its a question of moving this functionality. See bug 210639 and bug 200235
(In reply to comment #6) > Further improvements will require guarding against formation of cycles in the > tasklist model upon addition of tasks. Pushing to 3.0. See bug 200235 For use of hashmap in AbstractTaskContainer see bug#168878
There is still a noticeable delay on startup when loading large task lists: Thread [main] (Suspended) String.equals(Object) line: 1018 TaskTask(AbstractTask).equals(Object) line: 236 CopyOnWriteArrayList<E>.eq(Object, Object) line: 131 CopyOnWriteArrayList<E>.remove(Object) line: 484 UnmatchedTaskContainer(AbstractTaskContainer).internalRemoveChild(ITask) line: 59 TaskList.removeOrphan(AbstractTask, Set<TaskContainerDelta>) line: 561 TaskList.addTask(ITask, AbstractTaskContainer) line: 164 DelegatingTaskExternalizer.readTaskReferences(AbstractTaskContainer, NodeList, TaskList) line: 357 TaskListExternalizer.readTaskList(TaskList, File) line: 239 TaskListExternalizationParticipant$1.execute(IProgressMonitor) line: 75 TaskList.run(ITaskListRunnable, IProgressMonitor) line: 621 TaskListExternalizationParticipant.load(File, IProgressMonitor) line: 79 TaskListExternalizationParticipant(AbstractExternalizationParticipant).performLoad(File, IProgressMonitor) line: 76 TaskListExternalizationParticipant.performLoad(File, IProgressMonitor) line: 84 TaskListExternalizationParticipant(AbstractExternalizationParticipant).execute(IExternalizationContext, IProgressMonitor) line: 66 ExternalizationManager$1.run() line: 114 SafeRunner.run(ISafeRunnable) line: 37 ExternalizationManager.load(IExternalizationParticipant, IProgressMonitor) line: 103 ExternalizationManager.load() line: 81 TasksUiPlugin.loadDataSources() line: 810 TasksUiPlugin.start(BundleContext) line: 602 BundleContextImpl$2.run() line: 1009 AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method] BundleContextImpl.startActivator(BundleActivator) line: 1003 BundleContextImpl.start() line: 984 BundleHost.startWorker(int) line: 346 BundleHost(AbstractBundle).start(int) line: 265 SecureAction.start(Bundle, int) line: 400 EclipseLazyStarter.postFindLocalClass(String, Class, ClasspathManager) line: 111 ClasspathManager.findLocalClass(String) line: 427 DefaultClassLoader.findLocalClass(String) line: 193 BundleLoader.findLocalClass(String) line: 368 SingleSourcePackage.loadClass(String) line: 33 BundleLoader.findClassInternal(String, boolean, ClassLoader) line: 441 BundleLoader.findClass(String, boolean) line: 397 BundleLoader.findClass(String) line: 385 DefaultClassLoader.loadClass(String, boolean) line: 87 DefaultClassLoader(ClassLoader).loadClass(String) line: 251 DefaultClassLoader(ClassLoader).loadClassInternal(String) line: 319 TasktopPreferencesInitializers.initializeDefaultPreferences() line: 26 PreferenceServiceRegistryHelper.runInitializer(IConfigurationElement) line: 276 PreferenceServiceRegistryHelper.applyRuntimeDefaults(String, WeakReference) line: 130 PreferencesService.applyRuntimeDefaults(String, WeakReference) line: 367 DefaultPreferences.applyRuntimeDefaults() line: 163 DefaultPreferences.loadDefaults() line: 236 DefaultPreferences.load() line: 232 DefaultPreferences(EclipsePreferences).create(EclipsePreferences, String, Object) line: 307 DefaultPreferences(EclipsePreferences).internalNode(String, boolean, Object) line: 543 DefaultPreferences(EclipsePreferences).node(String) line: 662 DefaultScope(AbstractScope).getNode(String) line: 38 DefaultScope.getNode(String) line: 68 ScopedPreferenceStore.getDefaultPreferences() line: 250 ScopedPreferenceStore.getPreferenceNodes(boolean) line: 284 ScopedPreferenceStore.internalGet(String) line: 474 ScopedPreferenceStore.getBoolean(String) line: 386 TasktopUiPlugin.start(BundleContext) line: 167 BundleContextImpl$2.run() line: 1009 AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method] BundleContextImpl.startActivator(BundleActivator) line: 1003 BundleContextImpl.start() line: 984 BundleHost.startWorker(int) line: 346 BundleHost(AbstractBundle).start(int) line: 265 SecureAction.start(Bundle, int) line: 400 EclipseLazyStarter.postFindLocalClass(String, Class, ClasspathManager) line: 111 ClasspathManager.findLocalClass(String) line: 427 DefaultClassLoader.findLocalClass(String) line: 193 BundleLoader.findLocalClass(String) line: 368 SingleSourcePackage.loadClass(String) line: 33 BundleLoader.findClassInternal(String, boolean, ClassLoader) line: 441 BundleLoader.findClass(String, boolean) line: 397 BundleLoader.findClass(String) line: 385 DefaultClassLoader.loadClass(String, boolean) line: 87 DefaultClassLoader(ClassLoader).loadClass(String) line: 251 DefaultClassLoader(ClassLoader).loadClassInternal(String) line: 319 TasktopWebUiPlugin.start(BundleContext) line: 81 BundleContextImpl$2.run() line: 1009 AccessController.doPrivileged(PrivilegedExceptionAction<T>) line: not available [native method] BundleContextImpl.startActivator(BundleActivator) line: 1003 BundleContextImpl.start() line: 984 BundleHost.startWorker(int) line: 346 BundleHost(AbstractBundle).start(int) line: 265 SecureAction.start(Bundle, int) line: 400 EclipseLazyStarter.postFindLocalClass(String, Class, ClasspathManager) line: 111 ClasspathManager.findLocalClass(String) line: 427 DefaultClassLoader.findLocalClass(String) line: 193 BundleLoader.findLocalClass(String) line: 368 BundleLoader.findClassInternal(String, boolean, ClassLoader) line: 444 BundleLoader.findClass(String, boolean) line: 397 BundleLoader.findClass(String) line: 385 DefaultClassLoader.loadClass(String, boolean) line: 87 DefaultClassLoader(ClassLoader).loadClass(String) line: 251 BundleLoader.loadClass(String) line: 313 BundleHost.loadClass(String, boolean) line: 227 BundleHost(AbstractBundle).loadClass(String) line: 1274 EquinoxRegistryStrategy(RegistryStrategyOSGI).createExecutableExtension(RegistryContributor, String, String) line: 160 ExtensionRegistry.createExecutableExtension(RegistryContributor, String, String) line: 867 ConfigurationElement.createExecutableExtension(String) line: 243 ConfigurationElementHandle.createExecutableExtension(String) line: 51 Util.safeLoadExecutableExtension(IConfigurationElement, String, Class) line: 794 MenuAdditionCacheEntry.createControlAdditionContribution(IServiceLocator, IConfigurationElement) line: 330 MenuAdditionCacheEntry.createContributionItems(IServiceLocator, IContributionRoot) line: 194 WorkbenchMenuService$5.run() line: 563 SafeRunner.run(ISafeRunnable) line: 37 WorkbenchMenuService.processAdditions(IServiceLocator, Set, ContributionManager, AbstractContributionFactory, Set) line: 624 WorkbenchMenuService.addContributionsToManager(IServiceLocator, Set, ContributionManager, String, boolean, List) line: 685 WorkbenchMenuService.populateContributionManager(IServiceLocator, Set, ContributionManager, String, boolean) line: 671 TrimContributionManager$ToolBarTrimProxy.dock(int) line: 75 TrimContributionManager.update(boolean, boolean) line: 232 WorkbenchWindow.updateLayoutDataForContents() line: 3683 WorkbenchWindow.setLayoutDataForContents() line: 3694 WorkbenchWindow.createDefaultContents(Shell) line: 1112 WorkbenchWindowConfigurer.createDefaultContents(Shell) line: 625 IDEWorkbenchWindowAdvisor(WorkbenchWindowAdvisor).createWindowContents(Shell) line: 268 WorkbenchWindow.createContents(Composite) line: 998 WorkbenchWindow(Window).create() line: 431 Workbench$59.runWithException() line: 3339 Workbench$59(StartupThreading$StartupRunnable).run() line: 31 RunnableLock.run() line: 35 UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 132 Display.runAsyncMessages(boolean) line: 3778 Display.readAndDispatch() line: 3403 IDEWorkbenchAdvisor(WorkbenchAdvisor).openWindows() line: 803 Workbench$27.runWithException() line: 1361 Workbench$27(StartupThreading$StartupRunnable).run() line: 31 RunnableLock.run() line: 35 UISynchronizer(Synchronizer).runAsyncMessages(boolean) line: 132 Display.runAsyncMessages(boolean) line: 3778 Display.readAndDispatch() line: 3403 Workbench.runUI() line: 2298 Workbench.access$4(Workbench) line: 2203 Workbench$5.run() line: 493 Realm.runWithDefault(Realm, Runnable) line: 288 Workbench.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 488 PlatformUI.createAndRunWorkbench(Display, WorkbenchAdvisor) line: 149 IDEApplication.start(IApplicationContext) line: 112 EclipseAppHandle.run(Object) line: 193 EclipseAppLauncher.runApplication(Object) line: 110 EclipseAppLauncher.start(Object) line: 79 EclipseStarter.run(Object) line: 379 EclipseStarter.run(String[], Runnable) line: 179 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Main.invokeFramework(String[], URL[]) line: 549 Main.basicRun(String[]) line: 504 Main.run(String[]) line: 1236 Main.main(String[]) line: 1212
Steffen: I assume that this should be on for 3.0.1 and not 3.0?
I have moved this to 3.1 for now. I am not sure where the performance work fits best in the 3.x release cycle.
Created attachment 115510 [details] patch
Created attachment 115511 [details] mylyn/context/zip
*** Bug 406376 has been marked as a duplicate of this bug. ***
Jaxsun, you made some progress here. Should this be closed?
I did make improvements to the loading of the TaskList however I think much more could and should be done. There is still a lot of thrashing when reading the TaskList.
Since that work was tracked on bug 493037, I'll remove the milestone from this one.
Mylyn has been restructured, and our issue tracking has moved to GitHub [1]. We are closing ~14K Bugzilla issues to give the new team a fresh start. If you feel that this issue is still relevant, please create a new one on GitHub. [1] https://github.com/orgs/eclipse-mylyn