Fix a failure to detect action conflicts if the action conflict came about via a changed aspect that didn't change any configured targets.
Realized that that failure also indicated we weren't properly accounting for aspects in our metrics. Made our metrics count them, and added in some additional fields that allow people to track the old thing if they care, or (more likely) to ease the transition from old to new: I saw 50% increases for some metrics when aspect data was added in.
Also realized that we were storing a set of configured target keys during analysis for no good reason, and deleted that to save memory. The only casualty is the targets_loaded field, which was bogus anyway. unknown commit added it without anyone seeming to realize that it was not counting "loaded" targets, but rather "analyzed labels", which is not a particularly useful metric.
RELNOTES[INC]: In the build event stream, BuildMetrics.TargetMetrics.targets_loaded is no longer populated. Its value was always mostly meaningless. BuildMetrics.TargetMetrics.targets_configured and BuildMetrics.ActionSummary.actions_created now include configured aspect data.
PiperOrigin-RevId: 357959578
diff --git a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
index f5df8ce..239ae1e 100644
--- a/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
+++ b/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
@@ -14,8 +14,6 @@
package com.google.devtools.build.lib.analysis;
-import static java.util.stream.Collectors.toSet;
-
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Preconditions;
import com.google.common.base.Supplier;
@@ -37,6 +35,7 @@
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
import com.google.devtools.build.lib.actions.PackageRoots;
+import com.google.devtools.build.lib.actions.TotalAndConfiguredTargetOnlyMetric;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.config.BuildConfigurationCollection;
import com.google.devtools.build.lib.analysis.config.BuildOptions;
@@ -86,7 +85,6 @@
import com.google.devtools.build.lib.skyframe.TargetPatternPhaseValue;
import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.RegexFilter;
-import com.google.devtools.build.skyframe.SkyKey;
import com.google.devtools.build.skyframe.WalkableGraph;
import java.util.ArrayList;
import java.util.Collection;
@@ -172,23 +170,13 @@
this.skyframeBuildView = skyframeExecutor.getSkyframeBuildView();
}
- /**
- * Returns two numbers: number of analyzed and number of loaded targets.
- *
- * <p>The first number: configured targets freshly evaluated in the last analysis run.
- *
- * <p>The second number: targets (not configured targets) loaded in the last analysis run.
- */
- public Pair<Integer, Integer> getTargetsConfiguredAndLoaded() {
- ImmutableSet<SkyKey> keys = skyframeBuildView.getEvaluatedTargetKeys();
- int targetsConfigured = keys.size();
- int targetsLoaded =
- keys.stream().map(key -> ((ConfiguredTargetKey) key).getLabel()).collect(toSet()).size();
- return Pair.of(targetsConfigured, targetsLoaded);
+ /** Returns the number of analyzed targets/aspects. */
+ public TotalAndConfiguredTargetOnlyMetric getEvaluatedCounts() {
+ return skyframeBuildView.getEvaluatedCounts();
}
- public int getActionsConstructed() {
- return skyframeBuildView.getEvaluatedActionCount();
+ public TotalAndConfiguredTargetOnlyMetric getEvaluatedActionsCounts() {
+ return skyframeBuildView.getEvaluatedActionCounts();
}
public PackageManagerStatistics getAndClearPkgManagerStatistics() {
@@ -430,7 +418,7 @@
viewOptions.strictConflictChecks);
setArtifactRoots(skyframeAnalysisResult.getPackageRoots());
} finally {
- skyframeBuildView.clearInvalidatedConfiguredTargets();
+ skyframeBuildView.clearInvalidatedActionLookupKeys();
}
TopLevelConstraintSemantics topLevelConstraintSemantics =