Skip to main content
aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndrey Loskutov2017-04-03 16:20:14 +0000
committerStefan Xenos2017-04-04 16:45:06 +0000
commite232b72c7a6cb40ac8b5afb084b7767f2892e6ea (patch)
tree4d12ca11062fd0b5fb98d2725fc245cf36d63282 /org.eclipse.jdt.core
parentf77df400e3009bbbdecb497b75bcd116844d089e (diff)
downloadeclipse.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')
-rw-r--r--org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/PatternSearchJob.java5
-rw-r--r--org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexManager.java4
-rw-r--r--org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/indexing/IndexRequest.java4
-rw-r--r--org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/IJob.java10
-rw-r--r--org.eclipse.jdt.core/search/org/eclipse/jdt/internal/core/search/processing/JobManager.java6
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
}

Back to the top