Bug 559129 - UI freeze with History view switches due to Compare view
Summary: UI freeze with History view switches due to Compare view
Status: CLOSED DUPLICATE of bug 550022
Alias: None
Product: EGit
Classification: Technology
Component: UI (show other bugs)
Version: unspecified   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2020-01-13 14:48 EST by Lars Vogel CLA
Modified: 2020-01-27 07:14 EST (History)
3 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Lars Vogel CLA 2020-01-13 14:48:59 EST
I see UI freezes of 500 - 800 ms if the History view switches do to a selection via the Compare editor. 

Stacktrace from the UI freeze monitor.

Stack Trace
	at org.eclipse.swt.internal.gtk.GTK._gtk_list_store_clear(Native Method)
	at org.eclipse.swt.internal.gtk.GTK.gtk_list_store_clear(GTK.java:3905)
	at org.eclipse.swt.widgets.Table.removeAll(Table.java:2815)
	at org.eclipse.swt.widgets.Table.remove(Table.java:2689)
	at org.eclipse.swt.widgets.Table.setItemCount(Table.java:3657)
	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$533.0000000000000000.run(Unknown Source)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1397)
	at org.eclipse.jface.viewers.StructuredViewer.preservingSelection(StructuredViewer.java:1358)
	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:1631)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage.clearViewers(GitHistoryPage.java:1805)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage.lambda$6(GitHistoryPage.java:2511)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage$$Lambda$2296.0000000000000000.run(Unknown Source)
	at org.eclipse.egit.core.UnitOfWork.execute(UnitOfWork.java:96)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage.initAndStartRevWalk(GitHistoryPage.java:2465)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage.inputSet(GitHistoryPage.java:2089)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage.inputSet(GitHistoryPage.java:1957)
	at org.eclipse.team.ui.history.HistoryPage.setInput(HistoryPage.java:54)
	at org.eclipse.egit.ui.internal.history.GitHistoryPage.setInput(GitHistoryPage.java:1947)
	at org.eclipse.team.internal.ui.history.GenericHistoryView.getPageRec(GenericHistoryView.java:652)
	at org.eclipse.ui.part.PageBookView.partActivated(PageBookView.java:694)
	at org.eclipse.team.internal.ui.history.GenericHistoryView.showHistoryPageFor(GenericHistoryView.java:628)
	at org.eclipse.team.internal.ui.history.GenericHistoryView.showHistory(GenericHistoryView.java:899)
	at org.eclipse.team.internal.ui.history.GenericHistoryView.editorActivated(GenericHistoryView.java:835)
	at org.eclipse.team.internal.ui.history.GenericHistoryView.partActivated(GenericHistoryView.java:382)
	at org.eclipse.ui.part.PageBookView$1.partActivated(PageBookView.java:1006)
	at org.eclipse.ui.internal.WorkbenchPage$4.run(WorkbenchPage.java:4903)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.ui.internal.WorkbenchPage.firePartActivated(WorkbenchPage.java:4900)
	at org.eclipse.ui.internal.WorkbenchPage.access$3(WorkbenchPage.java:4876)
	at org.eclipse.ui.internal.WorkbenchPage$E4PartListener.partActivated(WorkbenchPage.java:216)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl$3.run(PartServiceImpl.java:253)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:45)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.firePartActivated(PartServiceImpl.java:250)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:774)
	at org.eclipse.e4.ui.internal.workbench.PartServiceImpl.activate(PartServiceImpl.java:683)
	at org.eclipse.e4.ui.internal.workbench.swt.AbstractPartRenderer.activate(AbstractPartRenderer.java:97)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer.lambda$0(ContributedPartRenderer.java:63)
	at org.eclipse.e4.ui.workbench.renderers.swt.ContributedPartRenderer$$Lambda$377.0000000000000000.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5741)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1423)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1449)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1432)
	at org.eclipse.swt.widgets.Shell.setActiveControl(Shell.java:2121)
	at org.eclipse.swt.widgets.Control.gtk_button_press_event(Control.java:3605)
	at org.eclipse.swt.widgets.Control.gtk_button_press_event(Control.java:3501)
	at org.eclipse.swt.widgets.Composite.gtk_button_press_event(Composite.java:839)
	at org.eclipse.swt.widgets.Canvas.gtk_button_press_event(Canvas.java:159)
	at org.eclipse.swt.widgets.Widget.windowProc(Widget.java:2252)
	at org.eclipse.swt.widgets.Control.windowProc(Control.java:6684)
	at org.eclipse.swt.widgets.Display.windowProc(Display.java:5982)
	at org.eclipse.swt.internal.gtk.GTK._gtk_main_do_event(Native Method)
	at org.eclipse.swt.internal.gtk.GTK.gtk_main_do_event(GTK.java:4168)
	at org.eclipse.swt.widgets.Display.eventProc(Display.java:1493)
	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:1628)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4491)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1160)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1049)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:155)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:660)
	at org.eclipse.ui.internal.Workbench$$Lambda$129.0000000000000000.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:338)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:559)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:154)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:150)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:203)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:137)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:107)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:401)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:255)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1447)
	at org.eclipse.equinox.launcher.Main.main(Main.java:1420)
Comment 1 Matthias Sohn CLA 2020-01-13 15:31:06 EST
(In reply to Lars Vogel from comment #0)
> I see UI freezes of 500 - 800 ms if the History view switches do to a
> selection via the Compare editor. 

> History view switches do to a selection via the Compare editor

I don't understand this sentence
Comment 2 Lars Vogel CLA 2020-01-13 15:38:55 EST
Sorry. The history view switches input because I open a compare editor for a file which belongs to another Git repository.
Comment 3 Thomas Wolf CLA 2020-01-27 07:10:21 EST
I don't see what we could do better in GitHistoryPage.clearViewers(). EGit does

  viewer.setSelection(StructuredSelection.EMPTY);
  viewer.setInput(new SWTCommit[0]);

with viewer being a TableViewer. The selection is cleared first to avoid that the preservingSelection() does any work, and then we set an empty input. The TableViewer correctly removes all items. If that takes long on GTK, it's an SWT/GTK problem. (It's a virtual table.)

Closing as duplicate of bug 550022.

*** This bug has been marked as a duplicate of bug 550022 ***
Comment 4 Lars Vogel CLA 2020-01-27 07:14:28 EST
Thanks, Thomas for the answer. Welcome back from vacation.