Bug 70291 - "Open Type" while decorators are not update takes forever + locks as busy
Summary: "Open Type" while decorators are not update takes forever + locks as busy
Status: RESOLVED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: UI (show other bugs)
Version: 3.0   Edit
Hardware: Other All
: P3 normal (vote)
Target Milestone: 3.1 M7   Edit
Assignee: JDT-UI-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-07-17 13:59 EDT by Morten Moeller CLA
Modified: 2005-04-25 19:38 EDT (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Morten Moeller CLA 2004-07-17 13:59:55 EDT
Given, our project is big (500k+ lines of generated/written code), sometimes 
it takes 10+ minutes before, for example, Open Type opens. This happens often 
if I close/open one of the 20 projects I got available.  
 
That it is waiting a long time is fine, and sometimes it does show 'table 
synchronization' in the bottom right progress indicator. The biggest problem 
is that Eclipse is in a busy state so I cannot do anything (probably due to I 
pressed ctrl-shift-t to open Open Type). This makes it impossible for me to 
continue working or cancel the background process. 
 
I think this has to be handled better. Either Open Type shouldn't care that 
certain decorators aren't up to date, or at least pop up the "waiting for 
background processes" dialog and get out of busy state. 
 
I've attached a thread dump of what is happening while I'm waiting: 
 
 
"main" prio=1 tid=0x08052bc8 nid=0x2638 runnable [bfffa000..bfffcc28] 
        at java.lang.System.arraycopy(Native Method) 
        at java.util.ArrayList.toArray(ArrayList.java:305) 
        at 
org.eclipse.core.internal.resources.MarkerManager.basicFindMatching(MarkerManager.java:116) 
        at 
org.eclipse.core.internal.resources.MarkerManager$3.visitElement(MarkerManager.java:520) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:78) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.doIteration(ElementTreeIterator.java:82) 
        at 
org.eclipse.core.internal.watson.ElementTreeIterator.iterate(ElementTreeIterator.java:123) 
        at 
org.eclipse.core.internal.resources.MarkerManager.visitorFindMarkers(MarkerManager.java:526) 
        at 
org.eclipse.core.internal.resources.MarkerManager.findMarkers(MarkerManager.java:226) 
        at 
org.eclipse.core.internal.resources.Resource.findMarkers(Resource.java:810) 
        at 
org.eclipse.jdt.ui.ProblemsLabelDecorator.getErrorTicksFromMarkers(ProblemsLabelDecorator.java:214) 
        at 
org.eclipse.jdt.ui.ProblemsLabelDecorator.computeAdornmentFlags(ProblemsLabelDecorator.java:164) 
        at 
org.eclipse.jdt.internal.ui.viewsupport.TreeHierarchyLayoutProblemsDecorator.computeAdornmentFlags(TreeHierarchyLayoutProblemsDecorator.java:69) 
        at 
org.eclipse.jdt.ui.ProblemsLabelDecorator.decorateImage(ProblemsLabelDecorator.java:144) 
        at 
org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider.decorateImage(JavaUILabelProvider.java:119) 
        at 
org.eclipse.jdt.internal.ui.viewsupport.JavaUILabelProvider.getImage(JavaUILabelProvider.java:134) 
        at 
org.eclipse.jface.viewers.DecoratingLabelProvider.getImage(DecoratingLabelProvider.java:74) 
        at 
org.eclipse.jface.viewers.DecoratingLabelProvider.updateLabel(DecoratingLabelProvider.java:208) 
        at 
org.eclipse.jdt.internal.ui.viewsupport.ResourceToItemsMapper.updateItem(ResourceToItemsMapper.java:82) 
        at 
org.eclipse.jdt.internal.ui.viewsupport.ResourceToItemsMapper.resourceChanged(ResourceToItemsMapper.java:62) 
        at 
org.eclipse.jdt.internal.ui.viewsupport.ProblemTreeViewer.handleLabelProviderChanged(ProblemTreeViewer.java:115) 
        at 
org.eclipse.jface.viewers.ContentViewer$1.labelProviderChanged(ContentViewer.java:74) 
        at 
org.eclipse.jdt.ui.ProblemsLabelDecorator.fireProblemsChanged(ProblemsLabelDecorator.java:349) 
        at org.eclipse.jdt.ui.ProblemsLabelDecorator.access$0
(ProblemsLabelDecorator.java:344) 
        at 
org.eclipse.jdt.ui.ProblemsLabelDecorator$1.problemsChanged(ProblemsLabelDecorator.java:324) 
        at 
org.eclipse.jdt.internal.ui.viewsupport.ProblemMarkerManager$1.run(ProblemMarkerManager.java:176) 
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) 
        at 
org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:106) 
        - locked <0x49b7dc00> (a org.eclipse.swt.widgets.RunnableLock) 
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:2572) 
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2301) 
        at 
org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:136) 
        at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:262) 
        at 
org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:397) 
        at 
org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:251) 
        at 
org.eclipse.ui.internal.progress.ProgressManager$3.run(ProgressManager.java:778) 
        at 
org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:69) 
        at 
org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:812) 
        at 
org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:789) 
        at 
org.eclipse.ui.internal.progress.ProgressManager.run(ProgressManager.java:973) 
        at 
org.eclipse.jdt.internal.ui.dialogs.TypeSelectionDialog.isCacheUpToDate(TypeSelectionDialog.java:260) 
        at 
org.eclipse.jdt.internal.ui.dialogs.TypeSelectionDialog.open(TypeSelectionDialog.java:183) 
        at 
org.eclipse.jdt.internal.ui.actions.OpenTypeAction.run(OpenTypeAction.java:68) 
        at 
org.eclipse.jdt.internal.ui.actions.OpenTypeAction.run(OpenTypeAction.java:89) 
        at 
org.eclipse.ui.internal.PluginAction.runWithEvent(PluginAction.java:276) 
        at 
org.eclipse.ui.internal.WWinPluginAction.runWithEvent(WWinPluginAction.java:206) 
        at 
org.eclipse.ui.commands.ActionHandler.execute(ActionHandler.java:141) 
        at org.eclipse.ui.internal.commands.Command.execute(Command.java:132) 
        at 
org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:471) 
        at 
org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:889) 
        at 
org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:930) 
        at 
org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:548) 
        at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$2
(WorkbenchKeyboard.java:496) 
        at 
org.eclipse.ui.internal.keys.WorkbenchKeyboard$1.handleEvent(WorkbenchKeyboard.java:261) 
        at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:82) 
        at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1006) 
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:953) 
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:978) 
        at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:963) 
        at org.eclipse.swt.widgets.Control.sendKeyEvent(Control.java:2337) 
        at 
org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:1816) 
        at 
org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:440) 
        at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1207) 
        at org.eclipse.swt.widgets.Display.windowProc(Display.java:3098) 
        at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(Native Method) 
        at org.eclipse.swt.widgets.Display.eventProc(Display.java:879) 
        at org.eclipse.swt.internal.gtk.OS.gtk_main_iteration(Native Method) 
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:2297) 
        at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:1377) 
        at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:1348) 
        at 
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:254) 
        at 
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:141) 
        at 
org.eclipse.ui.internal.ide.IDEApplication.run(IDEApplication.java:96) 
        at 
org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:335) 
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:273) 
        at 
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:129) 
        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:324) 
        at org.eclipse.core.launcher.Main.basicRun(Main.java:183) 
        at org.eclipse.core.launcher.Main.run(Main.java:644) 
        at org.eclipse.core.launcher.Main.main(Main.java:628) 
 
"VM Thread" prio=1 tid=0x08086820 nid=0x2638 runnable
Comment 1 John Arthorne CLA 2005-04-18 11:55:52 EDT
Not sure why this was moved to core.  The UI is blocked because Open Type uses a
modal progress dialog.  This 10+ minutes of waiting will likely be fixed by the
improvements currently being made in the Open Type dialog.
Comment 2 Dirk Baeumer CLA 2005-04-19 05:02:16 EDT
This will indeed be improved with the new open type dialog for which a beta
version goes into the build of today. It will do the search engine refreshing in
a background job, so the dialog will be more responsive and will allow selecting
types from the history in this stage.

However, the current dialog should support cancel in this state. What happens is
that due to the closing of the project search indexes have to be refresh. This
will also happen with the new dialog since it can't be avoided.
Comment 3 Dirk Baeumer CLA 2005-04-25 19:38:20 EDT
The new dialog got released and it doesn't take any locks/scheduling rules anymore.