Bug 533230 - Repositories view blocks Eclipse on startup
Summary: Repositories view blocks Eclipse on startup
Status: RESOLVED FIXED
Alias: None
Product: EGit
Classification: Technology
Component: UI (show other bugs)
Version: 4.11   Edit
Hardware: All All
: P3 normal (vote)
Target Milestone: 5.0   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords: performance
Depends on:
Blocks:
 
Reported: 2018-04-04 15:37 EDT by Michael Keppler CLA
Modified: 2018-10-18 23:55 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Michael Keppler CLA 2018-04-04 15:37:57 EDT
I just had a 13 second UI freeze on starting my Platform UI workbench, where platform.ui is the only cloned repository. All samples of that freeze are in the same method, org.eclipse.jgit.internal.storage.file.RefDirectory.scanRef() and its related file I/O.

Since this is only needed for deciding whether some tree item in the repository view has children or not, there seems to be potential for optimization.

org.eclipse.ui.monitoring
Info
Wed Apr 04 21:26:02 CEST 2018
Sample at 21:25:55.720 (+5,507s)
Thread 'main' tid=1 (RUNNABLE)

Stack Trace
	at java.io.FileInputStream.open0(Native Method)
	at java.io.FileInputStream.open(FileInputStream.java:195)
	at java.io.FileInputStream.<init>(FileInputStream.java:138)
	at org.eclipse.jgit.util.IO.readSome(IO.java:101)
	at org.eclipse.jgit.internal.storage.file.RefDirectory.scanRef(RefDirectory.java:1135)
	at org.eclipse.jgit.internal.storage.file.RefDirectory$LooseScanner.scanOne(RefDirectory.java:522)
	at org.eclipse.jgit.internal.storage.file.RefDirectory$LooseScanner.scanTree(RefDirectory.java:490)
	at org.eclipse.jgit.internal.storage.file.RefDirectory$LooseScanner.scanTree(RefDirectory.java:488)
	at org.eclipse.jgit.internal.storage.file.RefDirectory$LooseScanner.scan(RefDirectory.java:444)
	at org.eclipse.jgit.internal.storage.file.RefDirectory.getRefs(RefDirectory.java:376)
	at org.eclipse.egit.ui.internal.repository.RepositoriesViewContentProvider.getRefs(RepositoriesViewContentProvider.java:593)
	at org.eclipse.egit.ui.internal.repository.RepositoriesViewContentProvider.hasChildren(RepositoriesViewContentProvider.java:563)
	at org.eclipse.ui.internal.navigator.extensions.SafeDelegateTreeContentProvider.hasChildren(SafeDelegateTreeContentProvider.java:112)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.callNormalHasChildren(NavigatorContentServiceContentProvider.java:442)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.access$4(NavigatorContentServiceContentProvider.java:437)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider$3.run(NavigatorContentServiceContentProvider.java:405)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:390)
	at org.eclipse.ui.internal.navigator.NavigatorContentServiceContentProvider.hasChildren(NavigatorContentServiceContentProvider.java:434)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2099)
	at org.eclipse.jface.viewers.TreeViewer.isExpandable(TreeViewer.java:537)
	at org.eclipse.jface.viewers.AbstractTreeViewer.isExpandable(AbstractTreeViewer.java:2137)
	at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus(AbstractTreeViewer.java:2821)
	at org.eclipse.jface.viewers.TreeViewer.updatePlus(TreeViewer.java:785)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:841)
	at org.eclipse.jface.viewers.AbstractTreeViewer.lambda$0(AbstractTreeViewer.java:817)
	at org.eclipse.jface.viewers.AbstractTreeViewer$$Lambda$217/1256732367.run(Unknown Source)
	at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:70)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:792)
	at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:595)
	at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:763)
	at org.eclipse.jface.viewers.AbstractTreeViewer.setExpandedState(AbstractTreeViewer.java:2459)
	at org.eclipse.ui.navigator.CommonNavigator.handleDoubleClick(CommonNavigator.java:561)
	at org.eclipse.ui.navigator.CommonNavigator$4$1.run(CommonNavigator.java:534)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.navigator.CommonNavigator$4.doubleClick(CommonNavigator.java:531)
	at org.eclipse.jface.viewers.StructuredViewer$1.run(StructuredViewer.java:831)
	at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42)
	at org.eclipse.ui.internal.JFaceUtil.lambda$0(JFaceUtil.java:44)
	at org.eclipse.ui.internal.JFaceUtil$$Lambda$8/953683301.run(Unknown Source)
	at org.eclipse.jface.util.SafeRunnable.run(SafeRunnable.java:173)
	at org.eclipse.jface.viewers.StructuredViewer.fireDoubleClick(StructuredViewer.java:828)
	at org.eclipse.jface.viewers.AbstractTreeViewer.handleDoubleSelect(AbstractTreeViewer.java:1459)
	at org.eclipse.ui.navigator.CommonViewer.handleDoubleSelect(CommonViewer.java:445)
	at org.eclipse.jface.viewers.StructuredViewer$4.widgetDefaultSelected(StructuredViewer.java:1258)
	at org.eclipse.jface.util.OpenStrategy.fireDefaultSelectionEvent(OpenStrategy.java:249)
	at org.eclipse.jface.util.OpenStrategy.access$0(OpenStrategy.java:247)
	at org.eclipse.jface.util.OpenStrategy$1.handleEvent(OpenStrategy.java:306)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:86)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:4428)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1079)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4238)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:3817)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine$5.run(PartRenderingEngine.java:1150)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.e4.ui.internal.workbench.swt.PartRenderingEngine.run(PartRenderingEngine.java:1039)
	at org.eclipse.e4.ui.internal.workbench.E4Workbench.createAndRunUI(E4Workbench.java:153)
	at org.eclipse.ui.internal.Workbench.lambda$3(Workbench.java:680)
	at org.eclipse.ui.internal.Workbench$$Lambda$14/126147004.run(Unknown Source)
	at org.eclipse.core.databinding.observable.Realm.runWithDefault(Realm.java:336)
	at org.eclipse.ui.internal.Workbench.createAndRunWorkbench(Workbench.java:594)
	at org.eclipse.ui.PlatformUI.createAndRunWorkbench(PlatformUI.java:148)
	at org.eclipse.ui.internal.ide.application.IDEApplication.start(IDEApplication.java:151)
	at org.eclipse.equinox.internal.app.EclipseAppHandle.run(EclipseAppHandle.java:196)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:134)
	at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:104)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:388)
	at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:243)
	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:653)
	at org.eclipse.equinox.launcher.Main.basicRun(Main.java:590)
	at org.eclipse.equinox.launcher.Main.run(Main.java:1499)
Comment 1 Eclipse Genie CLA 2018-04-05 04:50:23 EDT
New Gerrit change created: https://git.eclipse.org/r/120761
Comment 2 Eclipse Genie CLA 2018-04-25 07:02:58 EDT
Gerrit change https://git.eclipse.org/r/120761 was merged to [master].
Commit: http://git.eclipse.org/c/egit/egit.git/commit/?id=c134baf64aea3b7b4484a6350615f0607be176a1