aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
diff options
context:
space:
mode:
authorGravatar Eric Fellheimer <felly@google.com>2015-08-06 20:23:55 +0000
committerGravatar David Chen <dzc@google.com>2015-08-06 22:21:09 +0000
commit9c1e12ff38f255f0ad71288a788e486e659d7288 (patch)
tree424be0a41619bceacdac03baf062e9a3f81ac47a /src/main/java/com/google/devtools/build/lib/analysis/BuildView.java
parent850412f47a49fef8f9fec3c24f52b8ab9b007137 (diff)
Rephrase the ActionGraph in terms of the WalkableGraph. This should be more efficient if we need to do many ActionGraph looups.
-- MOS_MIGRATED_REVID=100060090
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/analysis/BuildView.java')
-rw-r--r--src/main/java/com/google/devtools/build/lib/analysis/BuildView.java32
1 files changed, 27 insertions, 5 deletions
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 d15098690d..42fe145684 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
@@ -32,6 +32,7 @@ import com.google.devtools.build.lib.actions.Action;
import com.google.devtools.build.lib.actions.ActionGraph;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.actions.ArtifactFactory;
+import com.google.devtools.build.lib.actions.ArtifactOwner;
import com.google.devtools.build.lib.actions.PackageRootResolver;
import com.google.devtools.build.lib.actions.Root;
import com.google.devtools.build.lib.analysis.DependencyResolver.Dependency;
@@ -63,15 +64,18 @@ import com.google.devtools.build.lib.pkgcache.LoadingPhaseRunner.LoadingResult;
import com.google.devtools.build.lib.pkgcache.PackageManager;
import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory;
import com.google.devtools.build.lib.rules.test.CoverageReportActionFactory.CoverageReportActionsWrapper;
+import com.google.devtools.build.lib.skyframe.ActionLookupValue;
import com.google.devtools.build.lib.skyframe.ConfiguredTargetKey;
import com.google.devtools.build.lib.skyframe.CoverageReportValue;
import com.google.devtools.build.lib.skyframe.SkyframeBuildView;
import com.google.devtools.build.lib.skyframe.SkyframeExecutor;
import com.google.devtools.build.lib.syntax.EvalException;
import com.google.devtools.build.lib.syntax.Label;
+import com.google.devtools.build.lib.util.Pair;
import com.google.devtools.build.lib.util.RegexFilter;
import com.google.devtools.build.lib.vfs.Path;
import com.google.devtools.build.skyframe.SkyKey;
+import com.google.devtools.build.skyframe.WalkableGraph;
import com.google.devtools.common.options.Option;
import com.google.devtools.common.options.OptionsBase;
@@ -600,9 +604,12 @@ public class BuildView {
prepareToBuild(new SkyframePackageRootResolver(skyframeExecutor));
skyframeExecutor.injectWorkspaceStatusData();
Collection<ConfiguredTarget> configuredTargets;
+ WalkableGraph graph;
try {
- configuredTargets = skyframeBuildView.configureTargets(
- targetSpecs, eventBus, viewOptions.keepGoing);
+ Pair<Collection<ConfiguredTarget>, WalkableGraph> configuredTargetsResult =
+ skyframeBuildView.configureTargets(targetSpecs, eventBus, viewOptions.keepGoing);
+ configuredTargets = configuredTargetsResult.getFirst();
+ graph = configuredTargetsResult.getSecond();
} finally {
skyframeBuildView.clearInvalidatedConfiguredTargets();
}
@@ -618,14 +625,15 @@ public class BuildView {
}
AnalysisResult result = createResult(loadingResult, topLevelOptions,
- viewOptions, configuredTargets, analysisSuccessful);
+ viewOptions, configuredTargets, analysisSuccessful, graph);
LOG.info("Finished analysis");
return result;
}
private AnalysisResult createResult(LoadingResult loadingResult,
TopLevelArtifactContext topLevelOptions, BuildView.Options viewOptions,
- Collection<ConfiguredTarget> configuredTargets, boolean analysisSuccessful)
+ Collection<ConfiguredTarget> configuredTargets, boolean analysisSuccessful,
+ final WalkableGraph graph)
throws InterruptedException {
Collection<Target> testsToRun = loadingResult.getTestsToRun();
Collection<ConfiguredTarget> allTargetsToTest = null;
@@ -666,7 +674,21 @@ public class BuildView {
? null
: "execution phase succeeded, but not all targets were analyzed")
: "execution phase succeeded, but there were loading phase errors";
- return new AnalysisResult(configuredTargets, allTargetsToTest, error, getActionGraph(),
+
+ final ActionGraph actionGraph = new ActionGraph() {
+ @Nullable
+ @Override
+ public Action getGeneratingAction(Artifact artifact) {
+ ArtifactOwner artifactOwner = artifact.getArtifactOwner();
+ if (artifactOwner instanceof ActionLookupValue.ActionLookupKey) {
+ SkyKey key = ActionLookupValue.key((ActionLookupValue.ActionLookupKey) artifactOwner);
+ ActionLookupValue val = (ActionLookupValue) graph.getValue(key);
+ return val == null ? null : val.getGeneratingAction(artifact);
+ }
+ return null;
+ }
+ };
+ return new AnalysisResult(configuredTargets, allTargetsToTest, error, actionGraph,
artifactsToBuild, parallelTests, exclusiveTests, topLevelOptions);
}