diff options
author | Andrey Loskutov | 2017-04-03 16:20:14 +0000 |
---|---|---|
committer | Stefan Xenos | 2017-04-04 16:45:06 +0000 |
commit | e232b72c7a6cb40ac8b5afb084b7767f2892e6ea (patch) | |
tree | 4d12ca11062fd0b5fb98d2725fc245cf36d63282 /org.eclipse.jdt.core | |
parent | f77df400e3009bbbdecb497b75bcd116844d089e (diff) | |
download | eclipse.jdt.core-e232b72c7a6cb40ac8b5afb084b7767f2892e6ea.tar.gz eclipse.jdt.core-e232b72c7a6cb40ac8b5afb084b7767f2892e6ea.tar.xz eclipse.jdt.core-e232b72c7a6cb40ac8b5afb084b7767f2892e6ea.zip |
Bug 514653 - JobManager sleep time is longer then indexing itself
Only sleep after submitting a job if job indicates that this is really
needed. Also reduce wait time from 50 to 10 ms, which seem to be more
appropriate with today's hardware.
The main part of the speedup is coming from the IndexRequest instances
scheduled via IndexManager.scheduleDocumentIndexing(...), which do NOT
require an implicit wait now because they are doing only IO read and
in-memory index write operations.
Change-Id: I8b52405accdb643dd494a73979accd41b8d9f5b7
Signed-off-by: Andrey Loskutov <loskutov@gmx.de>
Diffstat (limited to 'org.eclipse.jdt.core')
5 files changed, 27 insertions, 2 deletions
diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java index 567c568396..e4098a1900 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java @@ -90,6 +90,11 @@ public Index[] getIndexes(IProgressMonitor progressMonitor) { this.areIndexesReady = indexes.length == length; return indexes; } + +@Override +public boolean waitNeeded() { + return true; +} public String getJobFamily() { return ""; //$NON-NLS-1$ } diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java index 31455cf9cf..b0b61866bd 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java @@ -1044,6 +1044,10 @@ public void scheduleDocumentIndexing(final SearchDocument searchDocument, IPath public String toString() { return "indexing " + searchDocument.getPath(); //$NON-NLS-1$ } + @Override + public boolean waitNeeded() { + return false; + } }); } diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexRequest.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexRequest.java index d919fe5f7c..13471831c3 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexRequest.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexRequest.java @@ -42,4 +42,8 @@ public abstract class IndexRequest implements IJob { protected Integer updatedIndexState() { return IndexManager.UPDATING_STATE; } + @Override + public boolean waitNeeded() { + return true; + } } diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/IJob.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/IJob.java index db444bf3eb..46b9f0b6b2 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/IJob.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/IJob.java @@ -45,4 +45,14 @@ public interface IJob { * Returns this job's family */ public String getJobFamily(); + + /** + * Answers if we need some sleep after index write operations. Default implementation returns {@code false}. + * + * @return true if the job manager should sleep a bit after this job is done to avoid IO tasks overloading OS (which + * could cause UI freezes etc). + */ + public default boolean waitNeeded() { + return false; + } } diff --git a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java index 7c07d0f47d..418eb89851 100644 --- a/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java +++ b/org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java @@ -400,8 +400,10 @@ public abstract class JobManager implements Runnable { if (VERBOSE) Util.verbose("FINISHED background job - " + job); //$NON-NLS-1$ moveToNextJob(); - if (this.awaitingClients == 0) - Thread.sleep(50); + if (this.awaitingClients == 0 && job.waitNeeded()) { + Util.verbose("WAITING after job - " + job); //$NON-NLS-1$ + Thread.sleep(10); + } } } catch (InterruptedException e) { // background indexing was interrupted } |