diff options
author | Eric Fellheimer <felly@google.com> | 2015-08-06 20:23:55 +0000 |
---|---|---|
committer | David Chen <dzc@google.com> | 2015-08-06 22:21:09 +0000 |
commit | 9c1e12ff38f255f0ad71288a788e486e659d7288 (patch) | |
tree | 424be0a41619bceacdac03baf062e9a3f81ac47a /src/main/java/com/google/devtools/build/lib/analysis/BuildView.java | |
parent | 850412f47a49fef8f9fec3c24f52b8ab9b007137 (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.java | 32 |
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); } |