Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.
Bug 346011 - [performance] ProblemsLabelDecorator causes slowness when editing large files
Summary: [performance] ProblemsLabelDecorator causes slowness when editing large files
Status: NEW
Alias: None
Product: CDT
Classification: Tools
Component: cdt-editor (show other bugs)
Version: 8.0   Edit
Hardware: All All
: P3 major with 2 votes (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact: Jonah Graham CLA
URL:
Whiteboard:
Keywords:
: 398611 (view as bug list)
Depends on:
Blocks:
 
Reported: 2011-05-16 18:40 EDT by Sergey Prigogin CLA
Modified: 2021-10-19 06:44 EDT (History)
5 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
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.