| Summary: | [Widgets] Getting view is busy logs while using Open Type | ||||||
|---|---|---|---|---|---|---|---|
| Product: | [Eclipse Project] Platform | Reporter: | Paul Webster <pwebster> | ||||
| Component: | SWT | Assignee: | Platform-SWT-Inbox <platform-swt-inbox> | ||||
| Status: | CLOSED WORKSFORME | QA Contact: | Bogdan Gheorghe <gheorghe> | ||||
| Severity: | normal | ||||||
| Priority: | P3 | CC: | bokowski, ericwill, gheorghe, hsoliwal, pinnamur, Silenio_Quarti | ||||
| Version: | 3.6 | Keywords: | triaged | ||||
| Target Milestone: | --- | ||||||
| Hardware: | PC | ||||||
| OS: | Linux | ||||||
| Whiteboard: | |||||||
| Attachments: |
|
||||||
Sending to SWT. This is happening in a virtual table. I believe the problem is caused by TableItem.setText(int, String) not always setting cached=true, for example if string.equals(text).
The reason for this causing a problem is that we make calls like this:
item.setText(potentiallyTheSameTextAsLastTime);
if (newImage != item.getImage()) {
item.setImage(newImage);
}
And then the call to getImage() causing an unwanted SetData event.
Since there is no equivalent optimization for images in SWT (return early if the new image is the same as the old image), we need to use the pattern above to avoid performance degradation. I.e. we would not want to change the above to:
item.setText(potentiallyTheSameTextAsLastTime);
item.setImage(newImage);
in JFace.
I cannot reproduce this issue. Bug triaged, visit https://wiki.eclipse.org/SWT/Devel/Triage for more inforamation. |
Created attachment 157267 [details] Viewer warning log While using open type I see logs like this occasionally, but twice this morning. I've attached my log which has the same error on I20091208-0100 as well. eclipse.buildId=I20100126-0100 java.fullversion=J2RE 1.5.0 IBM J9 2.3 Linux x86-32 j9vmxi3223-20080315 (JIT enabled) J9VM - 20080314_17962_lHdSMr JIT - 20080130_0718ifx2_r8 GC - 200802_08 BootLoader constants: OS=linux, ARCH=x86, WS=gtk, NL=en_US Command-line arguments: -os linux -ws gtk -arch x86 -data /opt/pwebster/workspaces/test360 Warning Tue Jan 26 09:07:24 EST 2010 Ignored reentrant call while viewer is busy. This is only logged once per viewer instance, but similar calls will still be ignored. java.lang.RuntimeException at org.eclipse.jface.viewers.ColumnViewer.checkBusy(ColumnViewer.java:763) at org.eclipse.jface.viewers.AbstractTableViewer.replace(AbstractTableViewer.java:1056) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$ContentProvider.updateElement(FilteredItemsSelectionDialog.java:2896) at org.eclipse.jface.viewers.AbstractTableViewer$1.handleEvent(AbstractTableViewer.java:86) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1223) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1247) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1232) at org.eclipse.swt.widgets.Table.checkData(Table.java:286) at org.eclipse.swt.widgets.TableItem.getImage(TableItem.java:531) at org.eclipse.jface.viewers.TableViewerRow.setImage(TableViewerRow.java:132) at org.eclipse.jface.viewers.ViewerCell.setImage(ViewerCell.java:169) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$ItemsListLabelProvider.update(FilteredItemsSelectionDialog.java:1696) at org.eclipse.jface.viewers.ViewerColumn.refresh(ViewerColumn.java:152) at org.eclipse.jface.viewers.AbstractTableViewer.doUpdateItem(AbstractTableViewer.java:399) at org.eclipse.jface.viewers.StructuredViewer$UpdateItemSafeRunnable.run(StructuredViewer.java:481) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.JFaceUtil$1.run(JFaceUtil.java:49) at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:175) at org.eclipse.jface.viewers.StructuredViewer.refreshItem(StructuredViewer.java:1503) at org.eclipse.jface.viewers.AbstractTableViewer.replace(AbstractTableViewer.java:1059) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$ContentProvider.updateElement(FilteredItemsSelectionDialog.java:2896) at org.eclipse.jface.viewers.AbstractTableViewer.getVirtualSelection(AbstractTableViewer.java:510) at org.eclipse.jface.viewers.AbstractTableViewer.getSelectionFromWidget(AbstractTableViewer.java:481) at org.eclipse.jface.viewers.StructuredViewer.getSelection(StructuredViewer.java:994) at org.eclipse.jface.viewers.StructuredViewer.handleSelect(StructuredViewer.java:1160) at org.eclipse.jface.viewers.StructuredViewer$4.widgetSelected(StructuredViewer.java:1190) at org.eclipse.jface.util.OpenStrategy.fireSelectionEvent(OpenStrategy.java:228) at org.eclipse.jface.util.OpenStrategy.access$4(OpenStrategy.java:222) at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:389) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1223) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1247) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1232) at org.eclipse.swt.widgets.Widget.notifyListeners(Widget.java:1051) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog.refresh(FilteredItemsSelectionDialog.java:962) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$RefreshJob.runInUIThread(FilteredItemsSelectionDialog.java:1391) at org.eclipse.ui.progress.UIJob$1.run(UIJob.java:95) at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:35) at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:134) at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:3501) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3148) at org.eclipse.jface.window.Window.runEventLoop(Window.java:825) at org.eclipse.jface.window.Window.open(Window.java:801) at org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog.open(FilteredTypesSelectionDialog.java:500) at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.runWithEvent(OpenTypeAction.java:78) at org.eclipse.jdt.internal.ui.actions.OpenTypeAction.runWithEvent(OpenTypeAction.java:160) at org.eclipse.ui.internal.handlers.ActionDelegateHandlerProxy.execute(ActionDelegateHandlerProxy.java:281) at org.eclipse.core.commands.Command.executeWithChecks(Command.java:476) at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508) at org.eclipse.ui.internal.handlers.HandlerService.executeCommand(HandlerService.java:169) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.executeCommand(WorkbenchKeyboard.java:470) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.press(WorkbenchKeyboard.java:824) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.processKeyEvent(WorkbenchKeyboard.java:880) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.filterKeySequenceBindings(WorkbenchKeyboard.java:569) at org.eclipse.ui.internal.keys.WorkbenchKeyboard.access$3(WorkbenchKeyboard.java:510) at org.eclipse.ui.internal.keys.WorkbenchKeyboard$KeyDownFilter.handleEvent(WorkbenchKeyboard.java:125) at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84) at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1520) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1222) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1247) at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1232) at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1259) at org.eclipse.swt.widgets.Widget.gtk_key_press_event(Widget.java:720) at org.eclipse.swt.widgets.Control.gtk_key_press_event(Control.java:2834) at org.eclipse.swt.widgets.Composite.gtk_key_press_event(Composite.java:704) at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:1696) at org.eclipse.swt.widgets.Control.windowProc(Control.java:4606) at org.eclipse.swt.widgets.Display.windowProc(Display.java:4303) at org.eclipse.swt.internal.gtk.OS._gtk_main_do_event(Native Method) at org.eclipse.swt.internal.gtk.OS.gtk_main_do_event(OS.java:8051) at org.eclipse.swt.widgets.Display.eventProc(Display.java:1238) at org.eclipse.swt.internal.gtk.OS._g_main_context_iteration(Native Method) at org.eclipse.swt.internal.gtk.OS.g_main_context_iteration(OS.java:2181) at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3143) at org.eclipse.ui.internal.Workbench.runEventLoop(Workbench.java:2407) at org.eclipse.ui.internal.Workbench.runUI(Workbench.java:2371) at org.eclipse.ui.internal.Workbench.access$4(Workbench.java:2220) at org.eclipse.ui.internal.Workbench$5.run(Workbench.java:500) at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:332) at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:493) 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:194) 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:367) at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:179) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:618) at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:611) at org.eclipse.equinox.launcher.Main.basicRun(Main.java:566) at org.eclipse.equinox.launcher.Main.run(Main.java:1363)