aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--src/main/java/com/google/devtools/build/lib/BUILD2
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventstream/BuildEventId.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/buildeventstream/proto/build_event_stream.proto15
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/LegacyLoadingPhaseRunner.java10
-rw-r--r--src/main/java/com/google/devtools/build/lib/pkgcache/TargetParsingCompleteEvent.java61
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SkyframeExecutor.java10
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());
}