Inserting very slow when in Block Selection mode [message #492174] |
Mon, 19 October 2009 06:23  |
Eclipse User |
|
|
|
Hi all
In our own TextEditor implementation we also support Block Selection Mode, which was added to Eclipse 3.5.
Our users use the Block Selection mode heavily, and they complain that it is very slow when inserting a character in a lot of lines (say 100 lines) at the same position.
I spent quite some time investigating this, and also found two related Eclipse bugs:
https://bugs.eclipse.org/bugs/show_bug.cgi?id=276265
https://bugs.eclipse.org/bugs/show_bug.cgi?id=268044
However I see that the same text modifications work much faster when using either the Eclipse Text Editor or the Eclipse Java Editor, so there has to be a work-around used by the Eclipse guys...
What I got so far: I overrided TextViewer#getSelection with my own implementation, to discover that MyTextViewer#getSelection is called once per line that is currently selected. The stacktrace of those calls is as follows:
java.lang.Thread.getStackTrace(Thread.java:1436)
com.company.name.editor.internal.MySourceViewer.getSelection(MySourceViewer.java:126)
org.eclipse.jface.text.source.projection.ProjectionViewer.handleVerifyEvent(ProjectionViewer.java:1254)
org.eclipse.jface.text.TextViewer$TextVerifyListener.verifyText(TextViewer.java:433)
org.eclipse.swt.widgets.TypedListener.handleEvent(TypedListener.java:249)
org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1027)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1012)
org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:770)
org.eclipse.swt.custom.StyledText.modifyContent(StyledText.java:6602)
org.eclipse.swt.custom.StyledText.sendKeyEvent(StyledText.java:7442)
org.eclipse.swt.custom.StyledText.insertBlockSelectionText(StyledText.java:5506)
org.eclipse.swt.custom.StyledText.doContent(StyledText.java:2408)
org.eclipse.swt.custom.StyledText.handleKey(StyledText.java:5814)
org.eclipse.swt.custom.StyledText.handleKeyDown(StyledText.java:5839)
org.eclipse.swt.custom.StyledText$7.handleEvent(StyledText.java:5541)
org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1003)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1027)
org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1012)
org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1040)
org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1036)
org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1368)
org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4053)
org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:346)
org.eclipse.swt.widgets.Control.windowProc(Control.java:3946)
org.eclipse.swt.widgets.Canvas.windowProc(Canvas.java:342)
org.eclipse.swt.widgets.Display.windowProc(Display.java:4589)
org.eclipse.swt.internal.win32.OS.DispatchMessageW(Native Method)
org.eclipse.swt.internal.win32.OS.DispatchMessage(OS.java:2409)
org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3471)
org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2405)
org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2369)
org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2221)
org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500)
org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332)
org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493)
org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:149)
org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:113)
org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:194)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:110)
org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:79)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:368)
org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:559)
org.eclipse.equinox.launcher.Main.basicRun(Main.java:514)
org.eclipse.equinox.launcher.Main.run(Main.java:1311)
org.eclipse.equinox.launcher.Main.main(Main.java:1287)
Obviously, no code of mine is involved...any ideas anyone?
Thanks,
stefan.
|
|
|
|
|
|
|
Powered by
FUDForum. Page generated in 0.11681 seconds