Open
Description
Environment:
- Select the platforms on which the behavior is seen.
[x] All OS
[ ] Windows
[ x] Linux
[ ] macOS
Eclipse SDK
Version: 2022-06 (4.25)
Build id: I20220612-1800
OS: Linux, v.5.15.0-37-generic, x86_64 / gtk 3.24.33, WebKit 2.36.3
Java vendor: Eclipse Adoptium
Java runtime version: 17.0.3+7
Java version: 17.0.3
I see long UI freezes coming from the Git History view with regards to Table.setItemCount. Looks like a lot is happening in this method, like removing all items, etc. Can this be improved?
Method code:
public void setItemCount (int count) {
checkWidget ();
count = Math.max (0, count);
if (count == itemCount) return;
boolean isVirtual = (style & SWT.VIRTUAL) != 0;
if (!isVirtual) setRedraw (false);
remove (count, itemCount - 1);
int length = Math.max (4, (count + 3) / 4 * 4);
TableItem [] newItems = new TableItem [length];
System.arraycopy (items, 0, newItems, 0, itemCount);
items = newItems;
if (isVirtual) {
long iter = OS.g_malloc (GTK.GtkTreeIter_sizeof ());
if (iter == 0) error (SWT.ERROR_NO_HANDLES);
for (int i=itemCount; i<count; i++) {
GTK.gtk_list_store_append (modelHandle, iter);
}
OS.g_free (iter);
itemCount = count;
} else {
for (int i=itemCount; i<count; i++) {
new TableItem (this, SWT.NONE, i, true);
}
}
if (!isVirtual) setRedraw (true);
}
Stack Trace
at org.eclipse.swt.internal.gtk.GTK.gtk_list_store_clear(Native Method)
at org.eclipse.swt.widgets.Table.removeAll(Table.java:2812)
at org.eclipse.swt.widgets.Table.remove(Table.java:2703)
at org.eclipse.swt.widgets.Table.setItemCount(Table.java:3652)
at org.eclipse.jface.viewers.TableViewer.doSetItemCount(TableViewer.java:231)
at org.eclipse.jface.viewers.AbstractTableViewer.internalVirtualRefreshAll(AbstractTableViewer.java:646)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:620)
at org.eclipse.jface.viewers.AbstractTableViewer.internalRefresh(AbstractTableViewer.java:610)
at org.eclipse.jface.viewers.AbstractTableViewer.lambda$0(AbstractTableViewer.java:572)
at org.eclipse.jface.viewers.AbstractTableViewer$$Lambda$1107/0x00000008015751b8.run(Unknown Source)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1398)
at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1359)
at org.eclipse.jface.viewers.AbstractTableViewer.inputChanged(AbstractTableViewer.java:572)
at org.eclipse.jface.viewers.ContentViewer.setInput(ContentViewer.java:282)
at org.eclipse.jface.viewers.StructuredViewer.setInput(StructuredViewer.java:1632)
at org.eclipse.egit.ui.internal.history.GitHistoryPage.clearViewers(GitHistoryPage.java:1835)
at org.eclipse.egit.ui.internal.history.GitHistoryPage.lambda$6(GitHistoryPage.java:2558)
at org.eclipse.egit.ui.internal.history.GitHistoryPage$$Lambda$1415/0x0000000801739d08.run(Unknown Source)
at org.eclipse.egit.core.UnitOfWork.execute(UnitOfWork.java:96)
at org.eclipse.egit.ui.internal.history.GitHistoryPage.initAndStartRevWalk(GitHistoryPage.java:2512)
at org.eclipse.egit.ui.internal.history.GitHistoryPage.inputSet(GitHistoryPage.java:2132)
at org.eclipse.egit.ui.internal.history.GitHistoryPage.inputSet(GitHistoryPage.java:1991)
at org.eclipse.team.ui.history.HistoryPage.setInput(HistoryPage.java:54)
at org.eclipse.egit.ui.internal.history.GitHistoryPage.setInput(GitHistoryPage.java:1981)
at org.eclipse.team.internal.ui.history.GenericHistoryView.getPageRec(GenericHistoryView.java:650)
at org.eclipse.ui.part.PageBookView.partActivated(PageBookView.java:694)
at org.eclipse.team.internal.ui.history.GenericHistoryView.showHistoryPageFor(GenericHistoryView.java:626)
at org.eclipse.team.internal.ui.history.GenericHistoryView.showLastSelectedElement(GenericHistoryView.java:565)
at org.eclipse.team.internal.ui.history.GenericHistoryView$1.selectionChanged(GenericHistoryView.java:406)
at org.eclipse.ui.internal.e4.compatibility.SelectionService.notifyListeners(SelectionService.java:266)
at org.eclipse.ui.internal.e4.compatibility.SelectionService.handlePostSelectionChanged(SelectionService.java:123)
at org.eclipse.ui.internal.e4.compatibility.SelectionService.lambda$2(SelectionService.java:78)
at org.eclipse.ui.internal.e4.compatibility.SelectionService$$Lambda$344/0x0000000801063780.selectionChanged(Unknown Source)
at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$3.run(SelectionAggregator.java:163)
at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.notifyPostListeners(SelectionAggregator.java:160)
at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.lambda$0(SelectionAggregator.java:250)
at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6$$Lambda$1089/0x0000000801544480.run(Unknown Source)
at org.eclipse.e4.core.contexts.RunAndTrack.runExternalCode(RunAndTrack.java:59)
at org.eclipse.e4.ui.internal.workbench.SelectionAggregator$6.changed(SelectionAggregator.java:250)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:105)
at org.eclipse.e4.core.internal.contexts.EclipseContext.runAndTrack(EclipseContext.java:338)
at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.track(SelectionAggregator.java:236)
at org.eclipse.e4.ui.internal.workbench.SelectionAggregator.setPart(SelectionAggregator.java:114)
at jdk.internal.reflect.GeneratedMethodAccessor57.invoke(Unknown Source)
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:58)
at org.eclipse.e4.core.internal.contexts.ContextObjectSupplier$ContextInjectionListener.update(ContextObjectSupplier.java:95)
at org.eclipse.e4.core.internal.contexts.TrackableComputationExt.update(TrackableComputationExt.java:103)
at org.eclipse.e4.core.internal.contexts.EclipseContext.processScheduled(EclipseContext.java:356)
at org.eclipse.e4.core.internal.contexts.EclipseContext.set(EclipseContext.java:372)
at org.eclipse.e4.core.internal.contexts.EclipseContext.activate(EclipseContext.java:659)
at org.eclipse.e4.core.internal.contexts.EclipseContext.activateBranch(EclipseContext.java:668)
at org.eclipse.e4.ui.internal.workbench.PartActivationHistory.activate(PartActivationHistory.java:58)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:761)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:680)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:675)
at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.showPart(PartServiceImpl.java:1252)
at org.eclipse.ui.internal.WorkbenchPage.showPart(WorkbenchPage.java:1247)
at org.eclipse.ui.internal.WorkbenchPage.busyShowView(WorkbenchPage.java:1235)
at org.eclipse.ui.internal.WorkbenchPage.lambda$11(WorkbenchPage.java:4228)
at org.eclipse.ui.internal.WorkbenchPage$$Lambda$1439/0x00000008017077b0.run(Unknown Source)
at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4226)
at org.eclipse.ui.internal.WorkbenchPage.showView(WorkbenchPage.java:4208)
at org.eclipse.ui.internal.quickaccess.providers.ViewElement.execute(ViewElement.java:93)
at org.eclipse.ui.internal.quickaccess.QuickAccessDialog$1$$Lambda$2465/0x0000000801d72d40.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:5000)
at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4480)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1155)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1046)
at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:644)
at org.eclipse.ui.internal.Workbench$$Lambda$160/0x0000000800dd2d40.run(Unknown Source)
at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:551)
at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:156)
at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:152)
at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:136)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:402)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at [email protected]/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at [email protected]/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at [email protected]/java.lang.reflect.Method.invoke(Method.java:568)
at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:659)
at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:596)
at app//org.eclipse.equinox.launcher.Main.run(Main.java:1467)
at app//org.eclipse.equinox.launcher.Main.main(Main.java:1440)