aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/main/java/com/google/devtools/build/lib/runtime
diff options
context:
space:
mode:
authorGravatar twerth <twerth@google.com>2018-02-22 04:25:09 -0800
committerGravatar Copybara-Service <copybara-piper@google.com>2018-02-22 04:27:06 -0800
commit1d8ad1a1394926dcc8a2edd43ea554656e907c5a (patch)
tree871ddeb18a0e8f50103d28ae3b263a506721f998 /src/main/java/com/google/devtools/build/lib/runtime
parentdaf78cc149c135514e557485007fffb058bd94f2 (diff)
Add option to dump the action graph.
Note that this dumps the current state in skyframe (which may contain more nodes than you're interested in): - bazel build --nobuild //interesting:targets - bazel dump --action_graph=/path/to/file - printproto --proto2 --raw_protocol_buffer --message=action_graph.ActionGraphContainer --multiline --proto=third_party/bazel/src/main/protobuf/action_graph.proto /path/to/file We'll add filtering options in a later CL. RELNOTES[NEW]: Add option to dump the action graph to a file: 'bazel dump --action_graph=/path/to/file'. PiperOrigin-RevId: 186597930
Diffstat (limited to 'src/main/java/com/google/devtools/build/lib/runtime')
-rw-r--r--src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java
index 87cddd7d3b..4fb164b2ef 100644
--- a/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java
+++ b/src/main/java/com/google/devtools/build/lib/runtime/commands/DumpCommand.java
@@ -16,6 +16,7 @@ package com.google.devtools.build.lib.runtime.commands;
import static java.util.stream.Collectors.toList;
+import com.google.devtools.build.lib.actions.ActionGraphProtos.ActionGraphContainer;
import com.google.devtools.build.lib.events.Event;
import com.google.devtools.build.lib.events.ExtendedEventHandler;
import com.google.devtools.build.lib.packages.Attribute;
@@ -40,6 +41,7 @@ import com.google.devtools.common.options.OptionEffectTag;
import com.google.devtools.common.options.OptionsBase;
import com.google.devtools.common.options.OptionsParser;
import com.google.devtools.common.options.OptionsProvider;
+import java.io.FileOutputStream;
import java.io.IOException;
import java.io.PrintStream;
import java.util.ArrayList;
@@ -102,6 +104,16 @@ public class DumpCommand implements BlazeCommand {
public boolean dumpActionCache;
@Option(
+ name = "action_graph",
+ defaultValue = "null",
+ category = "verbosity",
+ documentationCategory = OptionDocumentationCategory.OUTPUT_SELECTION,
+ effectTags = {OptionEffectTag.BAZEL_MONITORING},
+ help = "Dump action graph to the specified path."
+ )
+ public String dumpActionGraph;
+
+ @Option(
name = "rule_classes",
defaultValue = "false",
category = "verbosity",
@@ -175,6 +187,7 @@ public class DumpCommand implements BlazeCommand {
dumpOptions.dumpPackages
|| dumpOptions.dumpVfs
|| dumpOptions.dumpActionCache
+ || dumpOptions.dumpActionGraph != null
|| dumpOptions.dumpRuleClasses
|| dumpOptions.dumpRules
|| dumpOptions.skylarkMemory != null
@@ -217,6 +230,16 @@ public class DumpCommand implements BlazeCommand {
out.println();
}
+ if (dumpOptions.dumpActionGraph != null) {
+ try {
+ success &= dumpActionGraph(env.getSkyframeExecutor(), dumpOptions.dumpActionGraph, out);
+ } catch (IOException e) {
+ env.getReporter()
+ .error(
+ null, "Could not dump action graph to '" + dumpOptions.dumpActionGraph + "'", e);
+ }
+ }
+
if (dumpOptions.dumpRuleClasses) {
dumpRuleClasses(runtime, out);
out.println();
@@ -260,6 +283,16 @@ public class DumpCommand implements BlazeCommand {
return true;
}
+ private boolean dumpActionGraph(SkyframeExecutor executor, String path, PrintStream out)
+ throws IOException {
+ out.println("Dumping action graph to '" + path + "'");
+ ActionGraphContainer actionGraphContainer = executor.getActionGraphContainer();
+ FileOutputStream protoOutputStream = new FileOutputStream(path);
+ actionGraphContainer.writeTo(protoOutputStream);
+ protoOutputStream.close();
+ return true;
+ }
+
private boolean dumpSkyframe(SkyframeExecutor executor, boolean summarize, PrintStream out) {
executor.dump(summarize, out);
return true;