diff options
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe')
5 files changed, 27 insertions, 6 deletions
diff --git a/src/main/java/com/google/devtools/build/skyframe/EventFilter.java b/src/main/java/com/google/devtools/build/skyframe/EventFilter.java index 0b859d24ff..3dc527ea34 100644 --- a/src/main/java/com/google/devtools/build/skyframe/EventFilter.java +++ b/src/main/java/com/google/devtools/build/skyframe/EventFilter.java @@ -14,6 +14,7 @@ package com.google.devtools.build.skyframe; import com.google.common.base.Predicate; +import com.google.common.base.Predicates; import com.google.devtools.build.lib.events.Event; /** Filters out events which should not be stored during evaluation in {@link ParallelEvaluator}. */ @@ -23,4 +24,8 @@ public interface EventFilter extends Predicate<Event> { * avoid doing unnecessary work when evaluating node entries. */ boolean storeEventsAndPosts(); + + default Predicate<SkyKey> depEdgeFilterForEventsAndPosts(SkyKey primaryKey) { + return Predicates.alwaysTrue(); + } } 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 e8f9a91648..42ab317df3 100644 --- a/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java +++ b/src/main/java/com/google/devtools/build/skyframe/InMemoryMemoizingEvaluator.java @@ -63,6 +63,7 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { private final InvalidationState deleterState = new DeletingInvalidationState(); private final Differencer differencer; private final GraphInconsistencyReceiver graphInconsistencyReceiver; + private final EventFilter eventFilter; // Keep edges in graph. Can be false to save memory, in which case incremental builds are // not possible. @@ -90,6 +91,7 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { differencer, progressReceiver, GraphInconsistencyReceiver.THROWING, + DEFAULT_STORED_EVENT_FILTER, new EmittedEventState(), true); } @@ -99,12 +101,14 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { Differencer differencer, @Nullable EvaluationProgressReceiver progressReceiver, GraphInconsistencyReceiver graphInconsistencyReceiver, + EventFilter eventFilter, EmittedEventState emittedEventState, boolean keepEdges) { this.skyFunctions = ImmutableMap.copyOf(skyFunctions); this.differencer = Preconditions.checkNotNull(differencer); this.progressReceiver = new DirtyTrackingProgressReceiver(progressReceiver); this.graphInconsistencyReceiver = Preconditions.checkNotNull(graphInconsistencyReceiver); + this.eventFilter = eventFilter; this.graph = new InMemoryGraphImpl(keepEdges); this.emittedEventState = emittedEventState; this.keepEdges = keepEdges; @@ -187,7 +191,7 @@ public final class InMemoryMemoizingEvaluator implements MemoizingEvaluator { skyFunctions, eventHandler, emittedEventState, - DEFAULT_STORED_EVENT_FILTER, + eventFilter, ErrorInfoManager.UseChildErrorInfoIfNecessary.INSTANCE, keepGoing, numThreads, diff --git a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java index cc0332af6f..73f39acc99 100644 --- a/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java +++ b/src/main/java/com/google/devtools/build/skyframe/MemoizingEvaluator.java @@ -166,6 +166,7 @@ public interface MemoizingEvaluator { Differencer differencer, EvaluationProgressReceiver progressReceiver, GraphInconsistencyReceiver graphInconsistencyReceiver, + EventFilter eventFilter, EmittedEventState emittedEventState, boolean keepEdges); } diff --git a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java index f879a18efd..fc808b024f 100644 --- a/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java +++ b/src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java @@ -266,7 +266,8 @@ class SkyFunctionEnvironment extends AbstractSkyFunctionEnvironment { NestedSet<TaggedEvents> buildAndReportEvents(NodeEntry entry, boolean expectDoneDeps) throws InterruptedException { - if (!evaluatorContext.getStoredEventFilter().storeEventsAndPosts()) { + EventFilter eventFilter = evaluatorContext.getStoredEventFilter(); + if (!eventFilter.storeEventsAndPosts()) { return NestedSetBuilder.emptySet(Order.STABLE_ORDER); } NestedSetBuilder<TaggedEvents> eventBuilder = NestedSetBuilder.stableOrder(); @@ -278,7 +279,11 @@ class SkyFunctionEnvironment extends AbstractSkyFunctionEnvironment { GroupedList<SkyKey> depKeys = entry.getTemporaryDirectDeps(); Collection<SkyValue> deps = getDepValuesForDoneNodeFromErrorOrDepsOrGraph( - depKeys.getAllElementsAsIterable(), expectDoneDeps, depKeys.numElements()); + Iterables.filter( + depKeys.getAllElementsAsIterable(), + eventFilter.depEdgeFilterForEventsAndPosts(skyKey)), + expectDoneDeps, + depKeys.numElements()); for (SkyValue value : deps) { eventBuilder.addTransitive(ValueWithMetadata.getEvents(value)); } @@ -289,7 +294,8 @@ class SkyFunctionEnvironment extends AbstractSkyFunctionEnvironment { NestedSet<Postable> buildAndReportPostables(NodeEntry entry, boolean expectDoneDeps) throws InterruptedException { - if (!evaluatorContext.getStoredEventFilter().storeEventsAndPosts()) { + EventFilter eventFilter = evaluatorContext.getStoredEventFilter(); + if (!eventFilter.storeEventsAndPosts()) { return NestedSetBuilder.emptySet(Order.STABLE_ORDER); } NestedSetBuilder<Postable> postBuilder = NestedSetBuilder.stableOrder(); @@ -298,7 +304,11 @@ class SkyFunctionEnvironment extends AbstractSkyFunctionEnvironment { GroupedList<SkyKey> depKeys = entry.getTemporaryDirectDeps(); Collection<SkyValue> deps = getDepValuesForDoneNodeFromErrorOrDepsOrGraph( - depKeys.getAllElementsAsIterable(), expectDoneDeps, depKeys.numElements()); + Iterables.filter( + depKeys.getAllElementsAsIterable(), + eventFilter.depEdgeFilterForEventsAndPosts(skyKey)), + expectDoneDeps, + depKeys.numElements()); for (SkyValue value : deps) { postBuilder.addTransitive(ValueWithMetadata.getPosts(value)); } diff --git a/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java b/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java index 8254f2eaf3..805029af93 100644 --- a/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java +++ b/src/main/java/com/google/devtools/build/skyframe/ValueWithMetadata.java @@ -279,7 +279,8 @@ public abstract class ValueWithMetadata implements SkyValue { return null; } - static NestedSet<TaggedEvents> getEvents(SkyValue value) { + @VisibleForTesting + public static NestedSet<TaggedEvents> getEvents(SkyValue value) { if (value instanceof ValueWithMetadata) { return ((ValueWithMetadata) value).getTransitiveEvents(); } |