aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main
diff options
context:
space:
mode:
authorGravatar twerth <twerth@google.com>2018-03-05 07:41:37 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-03-05 07:43:50 -0800
commit88c3b85bbfa840200ec5d483dc791cefbb20f73a (patch)
tree236199b432753f20f9d5b53374bcb2142570dacf /src/main
parent3bcad502164dd169e5bb0af88f406dea86e24109 (diff)
Move action graph dump methods into the ActionGraphDump class.
RELNOTES: None PiperOrigin-RevId: 187865083
Diffstat (limited to 'src/main')
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/ActionGraphDump.java130
-rw-r--r--src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java140
2 files changed, 130 insertions, 140 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/ActionGraphDump.java b/src/main/java/com/google/devtools/build/lib/skyframe/ActionGraphDump.java
index 40400d108f..0539c03fde 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/ActionGraphDump.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/ActionGraphDump.java
@@ -13,7 +13,15 @@
// limitations under the License.
package com.google.devtools.build.lib.skyframe;
+import com.google.common.base.Preconditions;
+import com.google.common.collect.ImmutableMap;
+import com.google.common.collect.ImmutableSet;
+import com.google.common.collect.Iterables;
+import com.google.devtools.build.lib.actions.Action;
+import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
+import com.google.devtools.build.lib.actions.ActionExecutionMetadata;
import com.google.devtools.build.lib.actions.ActionKeyContext;
+import com.google.devtools.build.lib.actions.ActionOwner;
import com.google.devtools.build.lib.actions.Artifact;
import com.google.devtools.build.lib.analysis.AnalysisProtos;
import com.google.devtools.build.lib.analysis.AnalysisProtos.ActionGraphContainer;
@@ -22,13 +30,21 @@ import com.google.devtools.build.lib.analysis.AnalysisProtos.DepSetOfFiles;
import com.google.devtools.build.lib.analysis.AnalysisProtos.KeyValuePair;
import com.google.devtools.build.lib.analysis.AnalysisProtos.RuleClass;
import com.google.devtools.build.lib.analysis.AnalysisProtos.Target;
+import com.google.devtools.build.lib.analysis.ConfiguredTarget;
+import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
+import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
import com.google.devtools.build.lib.cmdline.Label;
+import com.google.devtools.build.lib.collect.nestedset.NestedSet;
+import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
import com.google.devtools.build.lib.collect.nestedset.NestedSetView;
+import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.packages.AspectDescriptor;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
+import java.util.Set;
/**
* Encapsulates necessary functionality to dump the current skyframe state of the action graph to
@@ -45,18 +61,27 @@ public class ActionGraphDump {
// can point to the same object.
private final Map<Object, String> knownNestedSets = new HashMap<>();
- private final ActionGraphContainer.Builder actionGraphBuilder;
+ private final ActionGraphContainer.Builder actionGraphBuilder = ActionGraphContainer.newBuilder();
private final ActionKeyContext actionKeyContext = new ActionKeyContext();
+ private final Set<String> actionGraphTargets;
- ActionGraphDump(ActionGraphContainer.Builder actionGraphBuilder) {
- this.actionGraphBuilder = actionGraphBuilder;
+ public ActionGraphDump(List<String> actionGraphTargets) {
+ this.actionGraphTargets = ImmutableSet.copyOf(actionGraphTargets);
}
public ActionKeyContext getActionKeyContext() {
return actionKeyContext;
}
- public String ruleClassStringToId(String ruleClassString) {
+ private boolean includeInActionGraph(String labelString) {
+ if (actionGraphTargets.size() == 1
+ && Iterables.getOnlyElement(actionGraphTargets).equals("...")) {
+ return true;
+ }
+ return actionGraphTargets.contains(labelString);
+ }
+
+ private String ruleClassStringToId(String ruleClassString) {
if (!knownRuleClassStrings.containsKey(ruleClassString)) {
String targetId = String.valueOf(knownRuleClassStrings.size());
knownRuleClassStrings.put(ruleClassString, targetId);
@@ -67,7 +92,7 @@ public class ActionGraphDump {
return knownRuleClassStrings.get(ruleClassString);
}
- public String targetToId(Label label, String ruleClassString) {
+ private String targetToId(Label label, String ruleClassString) {
if (!knownTargets.containsKey(label)) {
String targetId = String.valueOf(knownTargets.size());
knownTargets.put(label, targetId);
@@ -81,7 +106,7 @@ public class ActionGraphDump {
return knownTargets.get(label);
}
- public String configurationToId(BuildConfiguration buildConfiguration) {
+ private String configurationToId(BuildConfiguration buildConfiguration) {
if (!knownConfigurations.containsKey(buildConfiguration)) {
String configurationId = String.valueOf(knownConfigurations.size());
knownConfigurations.put(buildConfiguration, configurationId);
@@ -96,7 +121,7 @@ public class ActionGraphDump {
return knownConfigurations.get(buildConfiguration);
}
- public String artifactToId(Artifact artifact) {
+ private String artifactToId(Artifact artifact) {
if (!knownArtifacts.containsKey(artifact)) {
String artifactId = String.valueOf(knownArtifacts.size());
knownArtifacts.put(artifact, artifactId);
@@ -111,7 +136,7 @@ public class ActionGraphDump {
return knownArtifacts.get(artifact);
}
- public String depSetToId(NestedSetView<Artifact> nestedSetView) {
+ private String depSetToId(NestedSetView<Artifact> nestedSetView) {
if (!knownNestedSets.containsKey(nestedSetView.identifier())) {
String nestedSetId = String.valueOf(knownNestedSets.size());
knownNestedSets.put(nestedSetView.identifier(), nestedSetId);
@@ -127,7 +152,7 @@ public class ActionGraphDump {
return knownNestedSets.get(nestedSetView.identifier());
}
- public String aspectDescriptorToId(AspectDescriptor aspectDescriptor) {
+ private String aspectDescriptorToId(AspectDescriptor aspectDescriptor) {
if (!knownAspectDescriptors.containsKey(aspectDescriptor)) {
String aspectDescriptorId = String.valueOf(knownAspectDescriptors.size());
knownAspectDescriptors.put(aspectDescriptor, aspectDescriptorId);
@@ -145,4 +170,91 @@ public class ActionGraphDump {
}
return knownAspectDescriptors.get(aspectDescriptor);
}
+
+ private void dumpSingleAction(ConfiguredTarget configuredTarget, ActionAnalysisMetadata action) {
+ Preconditions.checkState(configuredTarget instanceof RuleConfiguredTarget);
+ Label label = configuredTarget.getLabel();
+ String ruleClassString = ((RuleConfiguredTarget) configuredTarget).getRuleClassString();
+ AnalysisProtos.Action.Builder actionBuilder =
+ AnalysisProtos.Action.newBuilder()
+ .setMnemonic(action.getMnemonic())
+ .setTargetId(targetToId(label, ruleClassString));
+
+ if (action instanceof ActionExecutionMetadata) {
+ ActionExecutionMetadata actionExecutionMetadata = (ActionExecutionMetadata) action;
+ actionBuilder
+ .setActionKey(actionExecutionMetadata.getKey(getActionKeyContext()))
+ .setDiscoversInputs(actionExecutionMetadata.discoversInputs());
+ }
+
+ // store environment
+ if (action instanceof SpawnAction) {
+ SpawnAction spawnAction = (SpawnAction) action;
+ // TODO(twerth): This handles the fixed environemnt. We probably want to output the inherited
+ // environment as well.
+ ImmutableMap<String, String> fixedEnvironment = spawnAction.getEnvironment();
+ for (Entry<String, String> environmentVariable : fixedEnvironment.entrySet()) {
+ AnalysisProtos.KeyValuePair.Builder keyValuePairBuilder =
+ AnalysisProtos.KeyValuePair.newBuilder();
+ keyValuePairBuilder
+ .setKey(environmentVariable.getKey())
+ .setValue(environmentVariable.getValue());
+ actionBuilder.addEnvironmentVariables(keyValuePairBuilder.build());
+ }
+ }
+
+ ActionOwner actionOwner = action.getOwner();
+ if (actionOwner != null) {
+ BuildConfiguration buildConfiguration = (BuildConfiguration) actionOwner.getConfiguration();
+ actionBuilder.setConfigurationId(configurationToId(buildConfiguration));
+
+ // store aspect
+ for (AspectDescriptor aspectDescriptor : actionOwner.getAspectDescriptors()) {
+ actionBuilder.addAspectDescriptorIds(aspectDescriptorToId(aspectDescriptor));
+ }
+ }
+
+ // store inputs
+ Iterable<Artifact> inputs = action.getInputs();
+ if (!(inputs instanceof NestedSet)) {
+ inputs = NestedSetBuilder.wrap(Order.STABLE_ORDER, inputs);
+ }
+ NestedSetView<Artifact> nestedSetView = new NestedSetView<>((NestedSet<Artifact>) inputs);
+ if (nestedSetView.directs().size() > 0 || nestedSetView.transitives().size() > 0) {
+ actionBuilder.addInputDepSetIds(depSetToId(nestedSetView));
+ }
+
+ // store outputs
+ for (Artifact artifact : action.getOutputs()) {
+ actionBuilder.addOutputIds(artifactToId(artifact));
+ }
+
+ actionGraphBuilder.addActions(actionBuilder.build());
+ }
+
+ public void dumpAspect(AspectValue aspectValue, ConfiguredTargetValue configuredTargetValue) {
+ ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
+ if (!includeInActionGraph(configuredTarget.getLabel().toString())) {
+ return;
+ }
+ for (int i = 0; i < aspectValue.getNumActions(); i++) {
+ Action action = aspectValue.getAction(i);
+ dumpSingleAction(configuredTarget, action);
+ }
+ }
+
+ public void dumpConfiguredTarget(ConfiguredTargetValue configuredTargetValue) {
+ ConfiguredTarget configuredTarget = configuredTargetValue.getConfiguredTarget();
+ if (!includeInActionGraph(configuredTarget.getLabel().toString())) {
+ return;
+ }
+ List<ActionAnalysisMetadata> actions = configuredTargetValue.getActions();
+ for (ActionAnalysisMetadata action : actions) {
+ dumpSingleAction(configuredTarget, action);
+ }
+ }
+
+ public ActionGraphContainer build() {
+ return actionGraphBuilder.build();
+ }
}
diff --git a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
index 4b7cfe3d6b..48827ed498 100644
--- a/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
+++ b/src/main/java/com/google/devtools/build/lib/skyframe/SequencedSkyframeExecutor.java
@@ -27,35 +27,21 @@ import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.google.common.collect.Range;
import com.google.common.collect.Sets;
-import com.google.devtools.build.lib.actions.Action;
-import com.google.devtools.build.lib.actions.ActionAnalysisMetadata;
-import com.google.devtools.build.lib.actions.ActionExecutionMetadata;
import com.google.devtools.build.lib.actions.ActionKeyContext;
-import com.google.devtools.build.lib.actions.ActionOwner;
-import com.google.devtools.build.lib.actions.Artifact;
-import com.google.devtools.build.lib.analysis.AnalysisProtos;
import com.google.devtools.build.lib.analysis.AnalysisProtos.ActionGraphContainer;
import com.google.devtools.build.lib.analysis.BlazeDirectories;
import com.google.devtools.build.lib.analysis.BuildView;
import com.google.devtools.build.lib.analysis.ConfiguredTarget;
import com.google.devtools.build.lib.analysis.WorkspaceStatusAction.Factory;
-import com.google.devtools.build.lib.analysis.actions.SpawnAction;
import com.google.devtools.build.lib.analysis.buildinfo.BuildInfoFactory;
-import com.google.devtools.build.lib.analysis.config.BuildConfiguration;
import com.google.devtools.build.lib.analysis.configuredtargets.RuleConfiguredTarget;
import com.google.devtools.build.lib.buildtool.BuildRequestOptions;
-import com.google.devtools.build.lib.cmdline.Label;
import com.google.devtools.build.lib.cmdline.PackageIdentifier;
-import com.google.devtools.build.lib.collect.nestedset.NestedSet;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetBuilder;
-import com.google.devtools.build.lib.collect.nestedset.NestedSetView;
-import com.google.devtools.build.lib.collect.nestedset.Order;
import com.google.devtools.build.lib.concurrent.Uninterruptibles;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.EventHandler;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.packages.AspectClass;
-import com.google.devtools.build.lib.packages.AspectDescriptor;
import com.google.devtools.build.lib.packages.BuildFileName;
import com.google.devtools.build.lib.packages.NoSuchPackageException;
import com.google.devtools.build.lib.packages.NoSuchTargetException;
@@ -111,7 +97,6 @@ import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Set;
import java.util.UUID;
import java.util.concurrent.Callable;
@@ -776,18 +761,9 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
return new ArrayList<>(ruleStats.values());
}
- private static boolean includeInActionGraph(String labelString, List<String> actionGraphTargets) {
- if (actionGraphTargets.size() == 1
- && Iterables.getOnlyElement(actionGraphTargets).equals("...")) {
- return true;
- }
- return actionGraphTargets.contains(labelString);
- }
-
@Override
public ActionGraphContainer getActionGraphContainer(List<String> actionGraphTargets) {
- ActionGraphContainer.Builder actionGraphBuilder = ActionGraphContainer.newBuilder();
- ActionGraphDump actionGraphDump = new ActionGraphDump(actionGraphBuilder);
+ ActionGraphDump actionGraphDump = new ActionGraphDump(actionGraphTargets);
for (Map.Entry<SkyKey, ? extends NodeEntry> skyKeyAndNodeEntry :
memoizingEvaluator.getGraphMap().entrySet()) {
NodeEntry entry = skyKeyAndNodeEntry.getValue();
@@ -795,121 +771,23 @@ public final class SequencedSkyframeExecutor extends SkyframeExecutor {
SkyFunctionName functionName = key.functionName();
try {
if (functionName.equals(SkyFunctions.CONFIGURED_TARGET)) {
- dumpConfiguredTarget(actionGraphBuilder, actionGraphDump, entry, actionGraphTargets);
+ actionGraphDump.dumpConfiguredTarget((ConfiguredTargetValue) entry.getValue());
} else if (functionName.equals(SkyFunctions.ASPECT)) {
- dumpAspect(actionGraphBuilder, actionGraphDump, entry, actionGraphTargets);
+ AspectValue aspectValue = (AspectValue) entry.getValue();
+ AspectKey aspectKey = aspectValue.getKey();
+ ConfiguredTargetValue configuredTargetValue =
+ (ConfiguredTargetValue)
+ memoizingEvaluator.getExistingValue(aspectKey.getBaseConfiguredTargetKey());
+ actionGraphDump.dumpAspect(aspectValue, configuredTargetValue);
}
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
throw new IllegalStateException("No interruption in sequenced evaluation", e);
}
}
- return actionGraphBuilder.build();
- }
-
- private void dumpAspect(
- ActionGraphContainer.Builder actionGraphBuilder,
- ActionGraphDump actionGraphDump,
- NodeEntry entry,
- List<String> actionGraphTargets)
- throws InterruptedException {
- AspectValue aspectValue = (AspectValue) entry.getValue();
- AspectKey aspectKey = aspectValue.getKey();
- ConfiguredTargetValue value =
- (ConfiguredTargetValue)
- memoizingEvaluator.getExistingValue(aspectKey.getBaseConfiguredTargetKey());
- ConfiguredTarget configuredTarget = value.getConfiguredTarget();
- if (!includeInActionGraph(configuredTarget.getLabel().toString(), actionGraphTargets)) {
- return;
- }
- for (int i = 0; i < aspectValue.getNumActions(); i++) {
- Action action = aspectValue.getAction(i);
- dumpSingleAction(actionGraphDump, actionGraphBuilder, configuredTarget, action);
- }
- }
-
- private void dumpConfiguredTarget(
- ActionGraphContainer.Builder actionGraphBuilder,
- ActionGraphDump actionGraphDump,
- NodeEntry entry,
- List<String> actionGraphTargets)
- throws InterruptedException {
- ConfiguredTargetValue ctValue = (ConfiguredTargetValue) entry.getValue();
- ConfiguredTarget configuredTarget = ctValue.getConfiguredTarget();
- if (!includeInActionGraph(configuredTarget.getLabel().toString(), actionGraphTargets)) {
- return;
- }
- List<ActionAnalysisMetadata> actions = ctValue.getActions();
- for (ActionAnalysisMetadata action : actions) {
- dumpSingleAction(actionGraphDump, actionGraphBuilder, configuredTarget, action);
- }
+ return actionGraphDump.build();
}
- private void dumpSingleAction(
- ActionGraphDump actionGraphDump,
- ActionGraphContainer.Builder actionGraphBuilder,
- ConfiguredTarget configuredTarget,
- ActionAnalysisMetadata action) {
- Preconditions.checkState(configuredTarget instanceof RuleConfiguredTarget);
- Label label = configuredTarget.getLabel();
- String ruleClassString = ((RuleConfiguredTarget) configuredTarget).getRuleClassString();
- AnalysisProtos.Action.Builder actionBuilder =
- AnalysisProtos.Action.newBuilder()
- .setMnemonic(action.getMnemonic())
- .setTargetId(actionGraphDump.targetToId(label, ruleClassString));
-
- if (action instanceof ActionExecutionMetadata) {
- ActionExecutionMetadata actionExecutionMetadata = (ActionExecutionMetadata) action;
- actionBuilder
- .setActionKey(actionExecutionMetadata.getKey(actionGraphDump.getActionKeyContext()))
- .setDiscoversInputs(actionExecutionMetadata.discoversInputs());
- }
-
- // store environment
- if (action instanceof SpawnAction) {
- SpawnAction spawnAction = (SpawnAction) action;
- // TODO(twerth): This handles the fixed environemnt. We probably want to output the inherited
- // environment as well.
- ImmutableMap<String, String> fixedEnvironment = spawnAction.getEnvironment();
- for (Entry<String, String> environmentVariable : fixedEnvironment.entrySet()) {
- AnalysisProtos.KeyValuePair.Builder keyValuePairBuilder =
- AnalysisProtos.KeyValuePair.newBuilder();
- keyValuePairBuilder
- .setKey(environmentVariable.getKey())
- .setValue(environmentVariable.getValue());
- actionBuilder.addEnvironmentVariables(keyValuePairBuilder.build());
- }
- }
-
- ActionOwner actionOwner = action.getOwner();
- if (actionOwner != null) {
- BuildConfiguration buildConfiguration = (BuildConfiguration) actionOwner.getConfiguration();
- actionBuilder.setConfigurationId(actionGraphDump.configurationToId(buildConfiguration));
-
- // store aspect
- for (AspectDescriptor aspectDescriptor : actionOwner.getAspectDescriptors()) {
- actionBuilder.addAspectDescriptorIds(
- actionGraphDump.aspectDescriptorToId(aspectDescriptor));
- }
- }
-
- // store inputs
- Iterable<Artifact> inputs = action.getInputs();
- if (!(inputs instanceof NestedSet)) {
- inputs = NestedSetBuilder.wrap(Order.STABLE_ORDER, inputs);
- }
- NestedSetView<Artifact> nestedSetView = new NestedSetView<>((NestedSet<Artifact>) inputs);
- if (nestedSetView.directs().size() > 0 || nestedSetView.transitives().size() > 0) {
- actionBuilder.addInputDepSetIds(actionGraphDump.depSetToId(nestedSetView));
- }
-
- // store outputs
- for (Artifact artifact : action.getOutputs()) {
- actionBuilder.addOutputIds(actionGraphDump.artifactToId(artifact));
- }
-
- actionGraphBuilder.addActions(actionBuilder.build());
- }
/**
* In addition to calling the superclass method, deletes all ConfiguredTarget values from the