Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 194430

Summary: [performance] Task list refresh is slow
Product: z_Archived Reporter: Steffen Pingel <steffen.pingel>
Component: MylynAssignee: Steffen Pingel <steffen.pingel>
Status: RESOLVED FIXED QA Contact:
Severity: major    
Priority: P1 CC: robert.elves, shawn.minto
Version: unspecified   
Target Milestone: 2.2   
Hardware: PC   
OS: Linux   
Whiteboard:
Attachments:
Description Flags
patch
none
mylyn/context/zip none

Description Steffen Pingel CLA 2007-06-26 10:41:38 EDT
Sometimes Eclipse blocks while refreshing the task list. Typically this shows up in the stack trace:

"main" prio=1 tid=0x080951b0 nid=0x95d runnable [0xbfb47000..0xbfb48e38]
        at java.lang.String.equals(String.java:858)
        at org.eclipse.mylyn.tasks.core.AbstractTaskContainer.contains(AbstractTaskContainer.java:69)
        at org.eclipse.mylyn.tasks.core.TaskList.getQueriesForHandle(TaskList.java:523)
        at org.eclipse.mylyn.internal.tasks.ui.views.TaskListContentProvider.getFilteredChildrenFor(TaskListContentProvider.java:239)
        at org.eclipse.mylyn.internal.tasks.ui.views.TaskListContentProvider.getChildren(TaskListContentProvider.java:90)
        at org.eclipse.jface.viewers.AbstractTreeViewer.getRawChildren(AbstractTreeViewer.java:1317)
        at org.eclipse.jface.viewers.TreeViewer.getRawChildren(TreeViewer.java:366)
        at org.eclipse.jface.viewers.AbstractTreeViewer.getFilteredChildren(AbstractTreeViewer.java:615)
        at org.eclipse.jface.viewers.AbstractTreeViewer.getSortedChildren(AbstractTreeViewer.java:581)
        at org.eclipse.jface.viewers.AbstractTreeViewer.updateChildren(AbstractTreeViewer.java:2497)
        at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefreshStruct(AbstractTreeViewer.java:1826)
        at org.eclipse.jface.viewers.TreeViewer.internalRefreshStruct(TreeViewer.java:692)
        at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1801)
        at org.eclipse.jface.viewers.AbstractTreeViewer.internalRefresh(AbstractTreeViewer.java:1757)
        at org.eclipse.jface.viewers.StructuredViewer$8.run(StructuredViewer.java:1460)
        at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1368)
        at org.eclipse.jface.viewers.TreeViewer.preservingSelection(TreeViewer.java:378)
        at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1330)
        at org.eclipse.jface.viewers.StructuredViewer.refresh(StructuredViewer.java:1458)
        at org.eclipse.jface.viewers.ColumnViewer.refresh(ColumnViewer.java:514)
        at org.eclipse.ui.dialogs.FilteredTree$NotifyingTreeViewer.refresh(FilteredTree.java:823)
        at org.eclipse.mylyn.internal.tasks.ui.views.TaskListView.refresh(TaskListView.java:1646)
        at org.eclipse.mylyn.internal.tasks.ui.views.TaskListView.access$4(TaskListView.java:1636)
        at org.eclipse.mylyn.internal.tasks.ui.views.TaskListView$5$1.run(TaskListView.java:469)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:123)
        - locked <0x328d4150> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3296)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2974)
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2389)
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2353)
        at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2219)
        at org.eclipse.ui.internal.Workbench$4.run(Workbench.java:466)
        at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:289)
        at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:461)
        at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
        at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:106)
        at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:153)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:106)
        at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:76)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:363)
        at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:176)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:504)
        at org.eclipse.equinox.launcher.Main.basicRun(Main.java:443)
        at org.eclipse.equinox.launcher.Main.run(Main.java:1169)
Comment 1 Steffen Pingel CLA 2007-06-26 10:46:11 EDT
It is particularly noticeable when opening an editor.
Comment 2 Eugene Kuleshov CLA 2007-06-26 11:38:11 EDT
Seems like AbstractTaskContainer should use HashMap instead of set and do hash lookup instead of iterating trough children in AbstractTaskContainer.contains() method.
Comment 3 Steffen Pingel CLA 2007-10-27 03:50:31 EDT
Created attachment 81321 [details]
patch

The patch adds a system job to TaskListView to delay the refresh of the task list. The idea is to aggregate multiple refresh events to avoid blocking the UI. The implemented strategy always delays refreshes at least 200 ms and at most 500 ms.
Comment 4 Steffen Pingel CLA 2007-10-27 03:50:33 EDT
Created attachment 81322 [details]
mylyn/context/zip
Comment 5 Mik Kersten CLA 2007-10-31 20:54:27 EDT
Excellent, patch applied.  Testing on my workspace now...
Comment 6 Steffen Pingel CLA 2007-11-01 14:09:35 EDT
Marking as resolved.
Comment 7 Mik Kersten CLA 2007-11-01 14:15:35 EDT
*** Bug 207341 has been marked as a duplicate of this bug. ***