diff options
author | 2018-02-22 04:25:09 -0800 | |
---|---|---|
committer | 2018-02-22 04:27:06 -0800 | |
commit | 1d8ad1a1394926dcc8a2edd43ea554656e907c5a (patch) | |
tree | 871ddeb18a0e8f50103d28ae3b263a506721f998 /src/main/java/com/google/devtools/build/lib/runtime | |
parent | daf78cc149c135514e557485007fffb058bd94f2 (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.java | 33 |
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; |