diff options
author | 2018-07-25 05:43:01 -0700 | |
---|---|---|
committer | 2018-07-25 05:44:36 -0700 | |
commit | 8fd1afd9ce02b5c6b058064c11e92bc0e3cd3145 (patch) | |
tree | 6baab73a22e98b5a47369f55b753c1e0822e67f9 /src/main/java/com/google/devtools/build/skyframe | |
parent | bca1912853086b8e9a28a85a1b144ec0dc9717cc (diff) |
Skip invalidation entirely if the diff is empty
PiperOrigin-RevId: 205980620
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe')
-rw-r--r-- | src/main/java/com/google/devtools/build/skyframe/Differencer.java | 4 | ||||
-rw-r--r-- | src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java | 20 |
2 files changed, 15 insertions, 9 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/Differencer.java b/src/main/java/com/google/devtools/build/skyframe/Differencer.java index ddcb34fe0d..35b42a3358 100644 --- a/src/main/java/com/google/devtools/build/skyframe/Differencer.java +++ b/src/main/java/com/google/devtools/build/skyframe/Differencer.java @@ -30,6 +30,10 @@ public interface Differencer { * Represents a set of changed values. */ interface Diff { + default boolean isEmpty() { + return changedKeysWithoutNewValues().isEmpty() && changedKeysWithNewValues().isEmpty(); + } + /** * Returns the value keys whose values have changed, but for which we don't have the new values. */ diff --git a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java index a1f6461e50..ba3812689c 100644 --- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java +++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java @@ -166,15 +166,17 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { // It clears the internal data structures after getDiff is called and will not return // diffs for historical versions. This makes the following code sensitive to interrupts. // Ideally we would simply not update lastGraphVersion if an interrupt occurs. - Diff diff = differencer.getDiff(new DelegatingWalkableGraph(graph), lastGraphVersion, - version); - valuesToInject.putAll(diff.changedKeysWithNewValues()); - invalidate(diff.changedKeysWithoutNewValues()); - pruneInjectedValues(valuesToInject); - invalidate(valuesToInject.keySet()); - - performInvalidation(); - injectValues(intVersion); + Diff diff = + differencer.getDiff(new DelegatingWalkableGraph(graph), lastGraphVersion, version); + if (!diff.isEmpty() || !valuesToInject.isEmpty() || !valuesToDelete.isEmpty()) { + valuesToInject.putAll(diff.changedKeysWithNewValues()); + invalidate(diff.changedKeysWithoutNewValues()); + pruneInjectedValues(valuesToInject); + invalidate(valuesToInject.keySet()); + + performInvalidation(); + injectValues(intVersion); + } ParallelEvaluator evaluator = new ParallelEvaluator( |