Bug 552776 - UI freeze of multiple seconds during DeletePathsOperation
Summary: UI freeze of multiple seconds during DeletePathsOperation
Status: RESOLVED FIXED
Alias: None
Product: EGit
Classification: Technology
Component: UI (show other bugs)
Version: unspecified   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: 5.6   Edit
Assignee: Project Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2019-11-07 02:43 EST by Lars Vogel CLA
Modified: 2019-11-08 03:39 EST (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 Lars Vogel CLA 2019-11-07 02:43:14 EST
See stack below, using   Git integration for Eclipse	5.5.0.201909110433-r	org.eclipse.egit.feature.group	Eclipse EGit

Stack Trace
	at org.eclipse.core.internal.dtree.AbstractDataTreeNode.indexOfChild(AbstractDataTreeNode.java:465)
	at org.eclipse.core.internal.dtree.AbstractDataTreeNode.childAtOrNull(AbstractDataTreeNode.java:254)
	at org.eclipse.core.internal.dtree.DeltaDataTree.lookup(DeltaDataTree.java:685)
	at org.eclipse.core.internal.watson.ElementTree.includes(ElementTree.java:533)
	at org.eclipse.core.internal.resources.Workspace.getResourceInfo(Workspace.java:1751)
	at org.eclipse.core.internal.resources.Container.getChildren(Container.java:147)
	at org.eclipse.core.internal.resources.WorkspaceRoot.getProjects(WorkspaceRoot.java:174)
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.resourceForLocation(FileSystemResourceManager.java:304)
	at org.eclipse.core.internal.localstore.FileSystemResourceManager.fileForLocation(FileSystemResourceManager.java:487)
	at org.eclipse.core.internal.resources.WorkspaceRoot.getFileForLocation(WorkspaceRoot.java:115)
	at org.eclipse.egit.core.internal.util.ResourceUtil.getFileForLocation(ResourceUtil.java:128)
	at org.eclipse.egit.core.internal.util.ResourceUtil.getResourceForLocation(ResourceUtil.java:103)
	at org.eclipse.egit.core.op.DeletePathsOperation.deletePaths(DeletePathsOperation.java:87)
	at org.eclipse.egit.core.op.DeletePathsOperation.access$0(DeletePathsOperation.java:77)
	at org.eclipse.egit.core.op.DeletePathsOperation$1.run(DeletePathsOperation.java:65)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2291)
	at org.eclipse.core.internal.resources.Workspace.run(Workspace.java:2316)
	at org.eclipse.egit.core.op.DeletePathsOperation.execute(DeletePathsOperation.java:68)
	at org.eclipse.egit.ui.internal.operations.DeletePathsOperationUI.runNonWorkspaceAction(DeletePathsOperationUI.java:93)
	at org.eclipse.egit.ui.internal.operations.DeletePathsOperationUI.run(DeletePathsOperationUI.java:62)
	at org.eclipse.egit.ui.internal.staging.StagingView$DeleteAction.run(StagingView.java:3162)
	at org.eclipse.jface.action.Action.runWithEvent(Action.java:474)
	at org.eclipse.jface.action.ActionContributionItem.handleWidgetSelection(ActionContributionItem.java:579)
	at org.eclipse.jface.action.ActionContributionItem.lambda$4(ActionContributionItem.java:413)
	at org.eclipse.jface.action.ActionContributionItem$$Lambda$351/0x000000080174f440.handleEvent(Unknown Source)
	at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:89)
	at org.eclipse.swt.widgets.Display.sendEvent(Display.java:5667)
	at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1423)
	at org.eclipse.swt.widgets.Display.runDeferredEvents(Display.java:4926)
	at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4420)
	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$124/0x00000008013d8c40.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 java.base@12.0.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base@12.0.1/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base@12.0.1/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base@12.0.1/java.lang.reflect.Method.invoke(Method.java:567)
	at app//org.eclipse.equinox.launcher.Main.invokeFramework(Main.java:657)
	at app//org.eclipse.equinox.launcher.Main.basicRun(Main.java:594)
	at app//org.eclipse.equinox.launcher.Main.run(Main.java:1465)
	at app//org.eclipse.equinox.launcher.Main.main(Main.java:1438)
Comment 1 Thomas Wolf CLA 2019-11-07 03:33:16 EST
@Lars: in general it would be helpful to know what exactly was done in the UI when the UI freeze was reported. In this case it's obvious when I look at the code, but that's not always the case.

How many items had you selected in the staging view?

Two things to be done here:

1. Quick fix: run the deletion in a background workspace job via
   JobUtil.scheduleUserWorkspaceJob(). Downside: will lock the workspace even
   if all files are outside the workspace.

2. Full solution: determine first in StagingView the set of resources and the
   set of non-workspace files, similar to ResetAction. Factor out common code.
   If only non-workspace files, run the deletion in a normal job without
   WorkspaceOperation. Requires refactorings in DeletePathsOperationUI and
   related classes. Also (but unrelated to this particular stack trace),
   ResetAction should probably reset in a background job.
Comment 2 Lars Vogel CLA 2019-11-07 03:58:47 EST
(In reply to Thomas Wolf from comment #1)
> @Lars: in general it would be helpful to know what exactly was done in the
> UI when the UI freeze was reported. In this case it's obvious when I look at
> the code, but that's not always the case.

I try to do this. 

In this case, I noticed later another longer freeze and checked the log and discovered the Git freeze. And as I know that you actively improving the things and in most cases can map stack traces to functionality so I reported it.... 
 
> How many items had you selected in the staging view?

~ 3000
Comment 3 Eclipse Genie CLA 2019-11-07 11:31:45 EST
New Gerrit change created: https://git.eclipse.org/r/152269
Comment 4 Eclipse Genie CLA 2019-11-08 03:33:15 EST
Gerrit change https://git.eclipse.org/r/152269 was merged to [master].
Commit: http://git.eclipse.org/c/egit/egit.git/commit/?id=64bc32a1af050e2d5ef8e25359bd638aa94cc4b6
Comment 5 Lars Vogel CLA 2019-11-08 03:39:42 EST
Thanks you, Thomas.