aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
diff options
context:
space:
mode:
authorGravatar Janak Ramakrishnan <janakr@google.com>2016-08-25 23:49:45 +0000
committerGravatar John Cater <jcater@google.com>2016-08-26 18:39:32 +0000
commit1ac4568f25f93548927db9080308b0d2e736f7a3 (patch)
tree32ab67af11de8ff304d23d7a4dc9d71eeeda9a51 /src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
parentaa9107b4fd1a8b8193428617bab4c694f24124a1 (diff)
Allow cycle detector to be injected into ParallelEvaluator, so that callers can use different cycle detection algorithms if they wish.
-- MOS_MIGRATED_REVID=131347160
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java')
-rw-r--r--src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java41
1 files changed, 27 insertions, 14 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
index dbfd56760e..f364a71f4b 100644
--- a/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
+++ b/src/main/java/com/google/devtools/build/skyframe/ParallelEvaluatorContext.java
@@ -36,6 +36,12 @@ import javax.annotation.Nullable;
* <p>Also used during cycle detection.
*/
class ParallelEvaluatorContext {
+ enum EnqueueParentBehavior {
+ ENQUEUE,
+ SIGNAL,
+ NO_ACTION
+ }
+
private final QueryableGraph graph;
private final Version graphVersion;
private final ImmutableMap<SkyFunctionName, ? extends SkyFunction> skyFunctions;
@@ -133,27 +139,34 @@ class ParallelEvaluatorContext {
* cycles).
*/
void signalValuesAndEnqueueIfReady(
- SkyKey skyKey, Iterable<SkyKey> keys, Version version, boolean enqueueParents)
+ SkyKey skyKey, Iterable<SkyKey> keys, Version version, EnqueueParentBehavior enqueueParents)
throws InterruptedException {
// No fields of the entry are needed here, since we're just enqueuing for evaluation, but more
// importantly, these hints are not respected for not-done nodes. If they are, we may need to
// alter this hint.
Map<SkyKey, ? extends NodeEntry> batch = graph.getBatch(skyKey, Reason.SIGNAL_DEP, keys);
- if (enqueueParents) {
- for (SkyKey key : keys) {
- NodeEntry entry = Preconditions.checkNotNull(batch.get(key), key);
- if (entry.signalDep(version)) {
- getVisitor().enqueueEvaluation(key);
+ switch (enqueueParents) {
+ case ENQUEUE:
+ for (SkyKey key : keys) {
+ NodeEntry entry = Preconditions.checkNotNull(batch.get(key), key);
+ if (entry.signalDep(version)) {
+ getVisitor().enqueueEvaluation(key);
+ }
}
- }
- } else {
- for (SkyKey key : keys) {
- NodeEntry entry = Preconditions.checkNotNull(batch.get(key), key);
- if (!entry.isDone()) {
- // In cycles, we can have parents that are already done.
- entry.signalDep(version);
+ return;
+ case SIGNAL:
+ for (SkyKey key : keys) {
+ NodeEntry entry = Preconditions.checkNotNull(batch.get(key), key);
+ if (!entry.isDone()) {
+ // In cycles, we can have parents that are already done.
+ entry.signalDep(version);
+ }
}
- }
+ return;
+ case NO_ACTION:
+ return;
+ default:
+ throw new IllegalStateException(enqueueParents + ", " + skyKey);
}
}