diff options
author | janakr <janakr@google.com> | 2018-08-14 21:38:51 -0700 |
---|---|---|
committer | Copybara-Service <copybara-piper@google.com> | 2018-08-14 21:40:26 -0700 |
commit | 7574d84e61086b5835a2b2cc003ca72fcfcf4fe4 (patch) | |
tree | c1fdc7992d6ffe9168112e5474917b0cb854a7c7 /src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java | |
parent | 8dece49bed76b5f372ff5d3a3f25a32b2a9c1f52 (diff) |
Filter out events from analysis when constructing execution-phase values in Skyframe.
This avoids some unnecessary iteration over already-emitted events that can show up in profiles, and allows us to store execution-phase values a bit more compactly, since we don't need to carry around wrapper objects and nested sets everywhere.
This crucially depends on the fact that we can't build a target in the execution phase without first having analyzed it in a separate Skyframe call. Skyframe normally propagates all events/posts up the graph because it must be able to emit them if a user requests a node that only transitively depends on the node that emitted an event. However, because we do analysis in a separate Skyframe call, any warnings/posts associated with the analysis nodes will be emitted then, and we don't need to propagate them into execution.
PiperOrigin-RevId: 208767078
Diffstat (limited to 'src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java')
-rw-r--r-- | src/main/java/com/google/devtools/build/skyframe/SkyFunctionEnvironment.java | 18 |
1 files changed, 14 insertions, 4 deletions
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)); } |