diff options
author | 2016-10-10 11:25:52 +0000 | |
---|---|---|
committer | 2016-10-10 13:35:22 +0000 | |
commit | 66ae95a2e6043a3b01817de6810a094a2ed78e14 (patch) | |
tree | e166f934c435e22754cb45db423da4db680d5de0 /src/main/java/com | |
parent | 9c1090bcd88f187e8849a08fa7cd42246a9b5095 (diff) |
Post the expansion of a target pattern on the event stream
...by making TargetParsingCompleteEvent an instance of BuildEvent. The main
value of this event on the event stream is that it is now know which actual
targets to expect.
--
Change-Id: I50b16f825d742d28e719692489de701d16195efa
Reviewed-on: https://bazel-review.googlesource.com/#/c/6278
MOS_MIGRATED_REVID=135661452
Diffstat (limited to 'src/main/java/com')
6 files changed, 91 insertions, 17 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/BUILD b/src/main/java/com/google/devtools/build/lib/BUILD index 4f3f63b8b0..e9fef91231 100644 --- a/src/main/java/com/google/devtools/build/lib/BUILD +++ b/src/main/java/com/google/devtools/build/lib/BUILD @@ -410,6 +410,7 @@ java_library( "//src/main/java/com/google/devtools/build/lib/cmdline", ], deps = [ + ":buildeventstream", ":collect", ":concurrent", ":events", @@ -418,6 +419,7 @@ java_library( ":transitive-info-provider", ":util", ":vfs", + "//src/main/java/com/google/devtools/build/lib/buildeventstream/proto:build_event_stream_java_proto", "//src/main/java/com/google/devtools/build/lib/cmdline", "//src/main/java/com/google/devtools/common/options", "//src/main/protobuf:build_java_proto", diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java index 6415241f02..8262cd4b8b 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java @@ -14,6 +14,7 @@ package com.google.devtools.build.lib.buildeventstream; +import com.google.devtools.build.lib.cmdline.Label; import com.google.protobuf.TextFormat; import java.io.Serializable; import java.util.List; @@ -90,4 +91,13 @@ public final class BuildEventId implements Serializable { return new BuildEventId( BuildEventStreamProtos.BuildEventId.newBuilder().setPattern(patternId).build()); } + + public static BuildEventId targetCompleted(Label target) { + BuildEventStreamProtos.BuildEventId.TargetCompletedId targetId = + BuildEventStreamProtos.BuildEventId.TargetCompletedId.newBuilder() + .setLabel(target.toString()) + .build(); + return new BuildEventId( + BuildEventStreamProtos.BuildEventId.newBuilder().setTargetCompleted(targetId).build()); + } } diff --git a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto index 74e20ce55e..5d3ca56f6c 100644 --- a/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto +++ b/src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto @@ -55,11 +55,18 @@ message BuildEventId { repeated string pattern = 1; } + // Identifier of an event indicating that a target was built completely; this + // does not include running the test if the target is a test target. + message TargetCompletedId { + string label = 1; + } + oneof id { UnknownBuildEventId unknown = 1; ProgressId progress = 2; BuildStartedId started = 3; PatternExpandedId pattern = 4; + TargetCompletedId target_completed = 5; } } @@ -123,6 +130,13 @@ message BuildStarted { string workspace_directory = 7; } +// Payload of the event indicating the expansion of a target pattern. +// The main information is in the chaining part: the id will contain the +// target pattern that was expanded and the children id will contain the +// target or target pattern it was expanded to. +message PatternExpanded { +} + // Message describing a build event. Events will have an identifier that // is unique within a given build invocation; they also announce follow-up // events as children. More details, which are specific to the kind of event @@ -135,5 +149,6 @@ message BuildEvent { Progress progress = 3; Aborted aborted = 4; BuildStarted started = 5; + PatternExpanded expanded = 6; }; } diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java b/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java index 6d7fc3f251..388e4b84f8 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java @@ -174,9 +174,13 @@ public final class LegacyLoadingPhaseRunner extends LoadingPhaseRunner { } } - eventBus.post(new TargetParsingCompleteEvent(targets.getTargets(), - filteredTargets, testFilteredTargets, - timer.stop().elapsed(TimeUnit.MILLISECONDS))); + eventBus.post( + new TargetParsingCompleteEvent( + targets.getTargets(), + filteredTargets, + testFilteredTargets, + timer.stop().elapsed(TimeUnit.MILLISECONDS), + targetPatterns)); if (targets.hasError()) { eventHandler.handle(Event.warn("Target pattern parsing failed. Continuing anyway")); diff --git a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java index 56aff59aee..8e0022a46a 100644 --- a/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java +++ b/src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java @@ -15,18 +15,23 @@ package com.google.devtools.build.lib.pkgcache; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Function; +import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterables; +import com.google.devtools.build.lib.buildeventstream.BuildEvent; +import com.google.devtools.build.lib.buildeventstream.BuildEventId; +import com.google.devtools.build.lib.buildeventstream.BuildEventStreamProtos; +import com.google.devtools.build.lib.buildeventstream.GenericBuildEvent; import com.google.devtools.build.lib.cmdline.Label; import com.google.devtools.build.lib.packages.Target; - +import com.google.devtools.build.lib.packages.TargetUtils; import java.util.Collection; +import java.util.List; -/** - * This event is fired just after target pattern evaluation is completed. - */ -public class TargetParsingCompleteEvent { +/** This event is fired just after target pattern evaluation is completed. */ +public class TargetParsingCompleteEvent implements BuildEvent { + private final ImmutableList<String> originalTargetPattern; private final ImmutableSet<Target> targets; private final ImmutableSet<Target> filteredTargets; private final ImmutableSet<Target> testFilteredTargets; @@ -34,21 +39,30 @@ public class TargetParsingCompleteEvent { /** * Construct the event. - * @param targets The targets that were parsed from the - * command-line pattern. + * + * @param targets The targets that were parsed from the command-line pattern. */ - public TargetParsingCompleteEvent(Collection<Target> targets, - Collection<Target> filteredTargets, Collection<Target> testFilteredTargets, - long timeInMs) { + public TargetParsingCompleteEvent( + Collection<Target> targets, + Collection<Target> filteredTargets, + Collection<Target> testFilteredTargets, + long timeInMs, + List<String> originalTargetPattern) { this.timeInMs = timeInMs; this.targets = ImmutableSet.copyOf(targets); this.filteredTargets = ImmutableSet.copyOf(filteredTargets); this.testFilteredTargets = ImmutableSet.copyOf(testFilteredTargets); + this.originalTargetPattern = ImmutableList.copyOf(originalTargetPattern); } @VisibleForTesting public TargetParsingCompleteEvent(Collection<Target> targets) { - this(targets, ImmutableSet.<Target>of(), ImmutableSet.<Target>of(), 0); + this( + targets, + ImmutableSet.<Target>of(), + ImmutableSet.<Target>of(), + 0, + ImmutableList.<String>of()); } /** @@ -84,4 +98,29 @@ public class TargetParsingCompleteEvent { public long getTimeInMs() { return timeInMs; } + + @Override + public BuildEventId getEventId() { + return BuildEventId.targetPatternExpanded(originalTargetPattern); + } + + @Override + public Collection<BuildEventId> getChildrenEvents() { + ImmutableList.Builder childrenBuilder = ImmutableList.builder(); + for (Target target : targets) { + // Test suits won't produce a target-complete event, so do not anounce their + // completion as children. + if (!TargetUtils.isTestSuiteRule(target)) { + childrenBuilder.add(BuildEventId.targetCompleted(target.getLabel())); + } + } + return childrenBuilder.build(); + } + + @Override + public BuildEventStreamProtos.BuildEvent asStreamProto() { + return GenericBuildEvent.protoChaining(this) + .setExpanded(BuildEventStreamProtos.PatternExpanded.newBuilder().build()) + .build(); + } } diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java index 9d4d72d2c7..90f28ea14a 100644 --- a/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java +++ b/src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java @@ -1839,9 +1839,13 @@ public abstract class SkyframeExecutor implements WalkableGraphFactory { long time = timer.stop().elapsed(TimeUnit.MILLISECONDS); TargetPatternPhaseValue patternParsingValue = evalResult.get(key); - eventBus.post(new TargetParsingCompleteEvent(patternParsingValue.getOriginalTargets(), - patternParsingValue.getFilteredTargets(), patternParsingValue.getTestFilteredTargets(), - time)); + eventBus.post( + new TargetParsingCompleteEvent( + patternParsingValue.getOriginalTargets(), + patternParsingValue.getFilteredTargets(), + patternParsingValue.getTestFilteredTargets(), + time, + targetPatterns)); if (callback != null) { callback.notifyTargets(patternParsingValue.getTargets()); } |