Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Breadcrumb performance issue: enabling Breadcrumb makes Java editor very slow to type, even after restarting Eclipse #2709

Closed
kl0ck opened this issue Jan 15, 2025 · 2 comments
Labels
bug Something isn't working performance

Comments

@kl0ck
Copy link

kl0ck commented Jan 15, 2025

Steps to reproduce

  • Enable breadcrumb. Open a big Java file (10000+ lines). Try to edit the file, move the cursor around, feel the lag.
  • Disable breadcrumb and notice the lag disappeared.

Tested under this environment:

Eclipse IDE for Enterprise Java and Web Developers (includes Incubating components)
Version: 2024-12 (4.34.0)
Build id: 20241128-0757
OS: Windows 11

Here is some relevant log output

From <workspace>/.metadata/.log

!SUBENTRY 1 org.eclipse.ui.monitoring 1 0 2025-01-15 17:21:30.556
!MESSAGE Sample at 17:21:29.997 (+0,646s)
Thread 'main' tid=1 (RUNNABLE)
!STACK 0
Stack Trace
	at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:133)
	at lombok.eclipse.EclipseAST.traverseChildren(EclipseAST.java:231)
	at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:79)
	at lombok.eclipse.EclipseAST.traverseChildren(EclipseAST.java:231)
	at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:74)
	at lombok.eclipse.EclipseAST.traverseChildren(EclipseAST.java:231)
	at lombok.eclipse.EclipseNode.traverse(EclipseNode.java:69)
	at lombok.eclipse.EclipseAST.traverse(EclipseAST.java:224)
	at lombok.eclipse.TransformEclipseAST.go(TransformEclipseAST.java:226)
	at lombok.eclipse.TransformEclipseAST.transform(TransformEclipseAST.java:187)
	at [email protected]/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
	at [email protected]/java.lang.invoke.LambdaForm$MH/0x0000019759413c00.invoke(LambdaForm$MH)
	at [email protected]/java.lang.invoke.LambdaForm$MH/0x0000019758002400.invokeExact_MT(LambdaForm$MH)
	at [email protected]/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:155)
	at [email protected]/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:580)
	at lombok.launch.PatchFixesHider$Util.invokeMethod(PatchFixesHider.java:146)
	at lombok.launch.PatchFixesHider$Transform.transform(PatchFixesHider.java:267)
	at org.eclipse.jdt.internal.compiler.parser.Parser.getMethodBodies(Parser.java:11446)
	at org.eclipse.jdt.internal.compiler.Compiler.process(Compiler.java:935)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:1024)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver.resolve(CompilationUnitResolver.java:728)
	at org.eclipse.jdt.core.dom.CompilationUnitResolver$ECJCompilationUnitResolver.resolve(CompilationUnitResolver.java:100)
	at org.eclipse.jdt.core.dom.ASTParser.createASTs(ASTParser.java:1004)
	at org.eclipse.jdt.apt.core.internal.env.BaseProcessorEnv.createASTs(BaseProcessorEnv.java:851)
	at org.eclipse.jdt.apt.core.internal.env.ReconcileEnv.openPipeline(ReconcileEnv.java:113)
	at org.eclipse.jdt.apt.core.internal.env.AbstractCompilationEnv.newReconcileEnv(AbstractCompilationEnv.java:98)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.reconcile(APTDispatchRunnable.java:218)
	at org.eclipse.jdt.apt.core.internal.APTDispatchRunnable.runAPTDuringReconcile(APTDispatchRunnable.java:162)
	at org.eclipse.jdt.apt.core.internal.AptCompilationParticipant.reconcile(AptCompilationParticipant.java:271)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation$1.run(ReconcileWorkingCopyOperation.java:314)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:47)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.notifyParticipants(ReconcileWorkingCopyOperation.java:299)
	at org.eclipse.jdt.internal.core.ReconcileWorkingCopyOperation.executeOperation(ReconcileWorkingCopyOperation.java:113)
	at org.eclipse.jdt.internal.core.JavaModelOperation.run(JavaModelOperation.java:751)
	at org.eclipse.jdt.internal.core.JavaModelOperation.runOperation(JavaModelOperation.java:816)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1419)
	at org.eclipse.jdt.internal.core.CompilationUnit.reconcile(CompilationUnit.java:1378)
	at org.eclipse.jdt.internal.corext.util.JavaModelUtil.reconcile(JavaModelUtil.java:644)
	at org.eclipse.jdt.internal.ui.actions.SelectionConverter.getElementAtOffset(SelectionConverter.java:279)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditorBreadcrumb.getCurrentInput(JavaEditorBreadcrumb.java:819)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditorBreadcrumb.setInput(JavaEditorBreadcrumb.java:790)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.setBreadcrumbInput(JavaEditor.java:2007)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor.selectionChanged(JavaEditor.java:2272)
	at org.eclipse.jdt.internal.ui.javaeditor.JavaEditor$EditorSelectionChangedListener.selectionChanged(JavaEditor.java:310)
	at org.eclipse.jface.text.TextViewer.firePostSelectionChanged(TextViewer.java:2725)
	at org.eclipse.jface.text.TextViewer.firePostSelectionChanged(TextViewer.java:2655)
	at org.eclipse.jface.text.TextViewer.postSelectionChanged(TextViewer.java:2638)
	at org.eclipse.jface.text.TextViewer$$Lambda/0x0000019758c74880.run(Unknown Source)
	at org.eclipse.jface.util.Throttler.lambda$0(Throttler.java:66)
	at org.eclipse.jface.util.Throttler$$Lambda/0x00000197585798d8.run(Unknown Source)
	at org.eclipse.jface.util.Throttler.lambda$1(Throttler.java:79)
	at org.eclipse.jface.util.Throttler$$Lambda/0x0000019758579b00.run(Unknown Source)
	at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
	at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:132)
	at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:4177)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3793)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1151)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1042)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:663)
	at org.eclipse.ui.internal.Workbench$$Lambda/0x0000019758252598.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:339)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:570)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:173)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:178)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:208)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:143)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:109)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:439)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:271)
	at [email protected]/java.lang.invoke.DirectMethodHandle$Holder.invokeStatic(DirectMethodHandle$Holder)
	at [email protected]/java.lang.invoke.LambdaForm$MH/0x000001975801a800.invoke(LambdaForm$MH)
	at [email protected]/java.lang.invoke.LambdaForm$MH/0x0000019758002400.invokeExact_MT(LambdaForm$MH)
	at [email protected]/jdk.internal.reflect.DirectMethodHandleAccessor.invokeImpl(DirectMethodHandleAccessor.java:155)
	at [email protected]/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:103)
	at [email protected]/java.lang.reflect.Method.invoke(Method.java:580)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:668)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:605)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1481)
@kl0ck kl0ck added the bug Something isn't working label Jan 15, 2025
@jukzi
Copy link
Contributor

jukzi commented Jan 16, 2025

the stacktrace includes "lombok" which is not part of platform. Either create a reproducer without lombook or report to lombok.
For perfromance issues you should also add screenshot of callstack and hotspots from sampling with for example visualVm.

@kl0ck
Copy link
Author

kl0ck commented Jan 16, 2025

Ok, reported to Lombok: projectlombok/lombok#3809

@kl0ck kl0ck closed this as completed Jan 16, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working performance
Projects
None yet
Development

No branches or pull requests

2 participants