Bug 575271 - Minute-long UI freeze when searching in thousands of files
Summary: Minute-long UI freeze when searching in thousands of files
Status: NEW
Alias: None
Product: Platform
Classification: Eclipse Project
Component: Search (show other bugs)
Version: 4.21   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: Platform-Search-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2021-08-06 04:46 EDT by Simeon Andreev CLA
Modified: 2021-08-06 05:19 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 Simeon Andreev CLA 2021-08-06 04:46:19 EDT
Similar to bug 575242, but with an increased file count (100 000).

To reproduce, create a Java project and generate some text files in it. E.g. with (adjust path to folder accordingly):


        public static void main(String[] args) throws IOException {
                Path folder = Paths.get("...");
                if (!Files.deleteIfExists(folder)) {
                	Files.createDirectory(folder);
                }
                int n = 100_000;
                String baseContent = "text here";
                for (int i = 0; i < n; ++i) {
                        System.out.println("Writing file " + i);
                        StringBuilder content = new StringBuilder();
                        int k = 1;
                        if (i == 1001) {
                        	k = 1000;
                        }
                        for (int j = 0; j < k; ++j) {
                        	content.append(baseContent);
                        	content.append(" n");
                        	content.append(i);
                        	content.append(System.lineSeparator());
                        }
                        String fileName = "file" + i + ".txt";
                        Path file = folder.resolve(fileName);
                        try {
                                Files.write(file, content.toString().getBytes());
                        } catch (IOException e) {
                                System.err.println("Failed to write file: " + fileName);
                                e.printStackTrace();
                        }
                }
        }

Search in workspace for string "text here" in all files. Observe that UI is frozen (e.g. for 10+ min on a HP Z640 workstation):

"main" #1 prio=6 os_prio=0 cpu=43454.15ms elapsed=108.45s tid=0x00007ffff0017800 nid=0xa312 runnable  [0x00007ffff7fca000]
   java.lang.Thread.State: RUNNABLE
        at org.eclipse.swt.internal.gtk.GTK.gtk_tree_store_append(Native Method)
        at org.eclipse.swt.widgets.Tree.createItem(Tree.java:992)
        at org.eclipse.swt.widgets.TreeItem.<init>(TreeItem.java:168)
        at org.eclipse.swt.widgets.TreeItem.<init>(TreeItem.java:128)
        at org.eclipse.jface.viewers.TreeViewer.createNewRowPart(TreeViewer.java:769)
        at org.eclipse.jface.viewers.TreeViewer.newItem(TreeViewer.java:276)
        at org.eclipse.jface.viewers.AbstractTreeViewer.updatePlus(AbstractTreeViewer.java:2920)
        at org.eclipse.jface.viewers.TreeViewer.updatePlus(TreeViewer.java:794)
        at org.eclipse.jface.viewers.AbstractTreeViewer.createTreeItem(AbstractTreeViewer.java:854)
        at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:831)
        at org.eclipse.jface.viewers.TreeViewer.createChildren(TreeViewer.java:604)
        at org.eclipse.jface.viewers.AbstractTreeViewer.createChildren(AbstractTreeViewer.java:779)
        at org.eclipse.jface.viewers.AbstractTreeViewer.setExpandedState(AbstractTreeViewer.java:2526)                                                                             
        at org.eclipse.search2.internal.ui.basic.views.TreeViewerNavigator.getChildren(TreeViewerNavigator.java:140)                                                               
        at org.eclipse.search2.internal.ui.basic.views.TreeViewerNavigator.getFirstChildWithMatches(TreeViewerNavigator.java:129)                                                  
        at org.eclipse.search2.internal.ui.basic.views.TreeViewerNavigator.getFirstChildWithMatches(TreeViewerNavigator.java:136)                                                  
        at org.eclipse.search2.internal.ui.basic.views.TreeViewerNavigator.getNextItemForward(TreeViewerNavigator.java:106)
        at org.eclipse.search2.internal.ui.basic.views.TreeViewerNavigator.navigateNext(TreeViewerNavigator.java:41)
        at org.eclipse.search.ui.text.AbstractTextSearchViewPage.navigateNext(AbstractTextSearchViewPage.java:989)
        at org.eclipse.search.ui.text.AbstractTextSearchViewPage$UpdateUIJob.runInUIThread(AbstractTextSearchViewPage.java:162)
        at org.eclipse.ui.progress.UIJob.lambda$0(UIJob.java:95)
        at org.eclipse.ui.progress.UIJob$$Lambda$715/0x00000008409b2040.run(Unknown Source)
        at org.eclipse.swt.widgets.RunnableLock.run(RunnableLock.java:40)
        at org.eclipse.swt.widgets.Synchronizer.runAsyncMessages(Synchronizer.java:185)
        - locked <0x00000000dc4851b8> (a org.eclipse.swt.widgets.RunnableLock)
        at org.eclipse.swt.widgets.Display.runAsyncMessages(Display.java:5115)
        at org.eclipse.swt.widgets.Display.readAndDispatch(Display.java:4601)
        at org.eclipse.jface.operation.ModalContext$ModalContextThread.block(ModalContext.java:166)
        at org.eclipse.jface.operation.ModalContext.run(ModalContext.java:368)
        at org.eclipse.jface.dialogs.ProgressMonitorDialog.run(ProgressMonitorDialog.java:468)
        at org.eclipse.ui.internal.progress.ProgressMonitorJobsDialog.run(ProgressMonitorJobsDialog.java:228)
        at org.eclipse.ui.internal.progress.ProgressManager.lambda$26(ProgressManager.java:821)
        at org.eclipse.ui.internal.progress.ProgressManager$$Lambda$832/0x0000000840b65840.run(Unknown Source)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
        at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:854)
        at org.eclipse.ui.internal.progress.ProgressManager.busyCursorWhile(ProgressManager.java:830)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.checkInitialConditions(RefactoringWizardOpenOperation.java:222)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.lambda$0(RefactoringWizardOpenOperation.java:173)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation$$Lambda$831/0x0000000840b67040.run(Unknown Source)
        at org.eclipse.swt.custom.BusyIndicator.showWhile(BusyIndicator.java:74)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:209)
        at org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation.run(RefactoringWizardOpenOperation.java:126)
        at org.eclipse.search.internal.ui.text.ReplaceAction.run(ReplaceAction.java:65)
        at org.eclipse.search.internal.ui.text.TextSearchPage.lambda$0(TextSearchPage.java:302)
        at org.eclipse.search.internal.ui.text.TextSearchPage$$Lambda$1156/0x0000000840defc40.run(Unknown Source)