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

Bug 346011

Summary: [performance] ProblemsLabelDecorator causes slowness when editing large files
Product: [Tools] CDT Reporter: Sergey Prigogin <eclipse.sprigogin>
Component: cdt-editorAssignee: Project Inbox <cdt-editor-inbox>
Status: NEW --- QA Contact: Jonah Graham <jonah>
Severity: major    
Priority: P3 CC: cdtdoug, malaperle, prakash, yevshif, zeratul976
Version: 8.0   
Target Milestone: ---   
Hardware: All   
OS: All   
See Also: https://bugs.eclipse.org/bugs/show_bug.cgi?id=450663
Whiteboard:

Description Sergey Prigogin CLA 2011-05-16 18:40:42 EDT
Here is a typical call stack captured while the UI thread was unresponsive:

"main" prio=10 tid=0x0a016400 nid=0x355c runnable [0xff8bd000]
   java.lang.Thread.State: RUNNABLE
	at (C/C++) __kernel_vsyscall( ())
	at (C/C++) Monitor::ILock(Thread*)( (/usr/local/buildtools/java/jdk6-google-v3/bin/../jre/lib/i386/client/libjvm.so))
	at (C/C++) Monitor::lock_without_safepoint_check(Thread*)( (/usr/local/buildtools/java/jdk6-google-v3/bin/../jre/lib/i386/client/libjvm.so))
	at (C/C++) Monitor::lock_without_safepoint_check()( (/usr/local/buildtools/java/jdk6-google-v3/bin/../jre/lib/i386/client/libjvm.so))
	at (C/C++) SafepointSynchronize::block(JavaThread*)( (/usr/local/buildtools/java/jdk6-google-v3/bin/../jre/lib/i386/client/libjvm.so))
	at (C/C++) JVM_InternString( (/usr/local/buildtools/java/jdk6-google-v3/bin/../jre/lib/i386/client/libjvm.so))
	at (C/C++) Java_java_lang_String_intern( (/usr/local/buildtools/java/jdk6-google-v3/jre/lib/i386/libjava.so))
	at java.lang.String.intern(Native Method)
	at org.eclipse.core.internal.resources.MarkerAttributeMap.get(MarkerAttributeMap.java:133)
	at org.eclipse.core.internal.resources.MarkerInfo.getAttribute(MarkerInfo.java:107)
	at org.eclipse.core.internal.resources.Marker.getAttribute(Marker.java:109)
	at org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator.isMarkerInRange(ProblemsLabelDecorator.java:222)
	at org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator.getErrorTicksFromMarkers(ProblemsLabelDecorator.java:207)
	at org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator.computeAdornmentFlags(ProblemsLabelDecorator.java:175)
	at org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator.decorateImage(ProblemsLabelDecorator.java:144)
	at org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider.decorateImage(CUILabelProvider.java:133)
	at org.eclipse.cdt.internal.ui.viewsupport.CUILabelProvider.getImage(CUILabelProvider.java:149)
	at org.eclipse.jface.viewers.DelegatingStyledCellLabelProvider.getImage(DelegatingStyledCellLabelProvider.java:184)
	at org.eclipse.jface.viewers.DecoratingStyledCellLabelProvider.getImage(DecoratingStyledCellLabelProvider.java:167)
	at org.eclipse.cdt.internal.ui.util.ResourceToItemsMapper.updateItem(ResourceToItemsMapper.java:91)
	at org.eclipse.cdt.internal.ui.util.ResourceToItemsMapper.resourceChanged(ResourceToItemsMapper.java:65)
	at org.eclipse.cdt.internal.ui.util.ProblemTreeViewer.handleLabelProviderChanged(ProblemTreeViewer.java:116)
	at org.eclipse.jface.viewers.ContentViewer$1.labelProviderChanged(ContentViewer.java:97)
	at org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator.fireProblemsChanged(ProblemsLabelDecorator.java:351)
	at org.eclipse.cdt.internal.ui.viewsupport.ProblemsLabelDecorator$1.problemsChanged(ProblemsLabelDecorator.java:326)
	at org.eclipse.cdt.internal.ui.util.ProblemMarkerManager$1.run(ProblemMarkerManager.java:183)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134)
	- locked <0x907dfc30> (a org.eclipse.swt.widgets.RunnableLock)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3515)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3164)
	at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2644)
	at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2606)
	at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2440)
	at org.eclipse.ui.internal.Workbench$7.run(Workbench.java:683)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:676)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:115)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:369)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
	at (C/C++) _fini(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:616)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:619)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:574)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1407)
Comment 1 Anton Leherbauer CLA 2011-05-18 05:32:40 EDT
ProblemTreeViewer indicates C/C++ Projects view.   Does the same happen with the Project Explorer?
Comment 2 Anton Leherbauer CLA 2011-05-18 06:50:15 EDT
(In reply to comment #1)
> ProblemTreeViewer indicates C/C++ Projects view.   Does the same happen with
> the Project Explorer?

I just confirmed that this also happens with the PE.
JDT has has some optimizations in place, esp. breaking the loop in getErrorTicksFromMarkers() as soon as the problem severity reaches ERROR (it can't get higher).
Comment 3 Anton Leherbauer CLA 2011-05-18 06:52:08 EDT
(In reply to comment #2)
> JDT has has some optimizations in place, esp. breaking the loop in
> getErrorTicksFromMarkers() as soon as the problem severity reaches ERROR (it
> can't get higher).

Sorry, red herring.  That optimization is already in place.
Comment 4 Anton Leherbauer CLA 2011-05-18 07:39:40 EDT
In fact, the view in question is probably the Outline view.
Comment 5 Sergey Prigogin CLA 2013-01-22 12:43:24 EST
*** Bug 398611 has been marked as a duplicate of this bug. ***
Comment 6 Nathan Ridge CLA 2015-03-05 01:16:29 EST
Is this still an issue?
Comment 7 Sergey Prigogin CLA 2015-03-05 13:23:35 EST
(In reply to Nathan Ridge from comment #6)
> Is this still an issue?

I don't know. I haven't noticed those stacks lately, but likely because I didn't pay attention.