| // Copyright 2022 The Bazel Authors. All rights reserved. |
| // |
| // Licensed under the Apache License, Version 2.0 (the "License"); |
| // you may not use this file except in compliance with the License. |
| // You may obtain a copy of the License at |
| // |
| // http://www.apache.org/licenses/LICENSE-2.0 |
| // |
| // Unless required by applicable law or agreed to in writing, software |
| // distributed under the License is distributed on an "AS IS" BASIS, |
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| // See the License for the specific language governing permissions and |
| // limitations under the License. |
| // |
| // Protos that represent a complete graph of all executed spawns, actions that |
| // don't have spawns, and their performance metrics. Targets are composed of |
| // actions, and actions are composed of 0 or more spawns. |
| |
| syntax = "proto3"; |
| |
| package execution_graph; |
| |
| // option cc_api_version = 2; |
| // option java_api_version = 2; |
| option java_package = "com.google.devtools.build.lib.actions"; |
| |
| // Node is one entry in the executed graph. |
| message Node { |
| // All nodes should have a description so human debuggers could see what was |
| // going on in this step. This should be ActionAnalysisMetadata.prettyPrint(). |
| string description = 1; |
| |
| // The index is a unique (within a single build) but arbitrary identifier for |
| // this node. The same node will likely have different indexes across builds. |
| // For performance reasons, the set of all indexes in a build should be dense. |
| int32 index = 2; |
| |
| // The target name. The field is not set if a spawn or action is shared |
| // between multiple targets or if it doesn't belong to any target. Note that a |
| // target can trigger several spawns, that can run in parallel or in sequence. |
| string target_label = 3; |
| |
| // The spawn or action mnemonic. For example, Javac, GoLink, TestRunner, etc. |
| string mnemonic = 4; |
| |
| Metrics metrics = 5; |
| |
| // A list of node indexes corresponding to direct dependencies of this |
| // node. |
| repeated int32 dependent_index = 6; |
| |
| // The name of the spawn runner that ran the spawn, if applicable. |
| string runner = 7; |
| |
| // Details about the runner. |
| string runner_subtype = 8; |
| |
| // A node index that this is a retry of. For example, the second attempt of |
| // a flaky test would point to the first attempt, and the third attempt would |
| // point to the second. |
| optional int32 retry_of = 9; |
| } |
| |
| // Metrics contains all the timing metrics about a Node. |
| message Metrics { |
| // The time when the node started, as milliseconds from the Unix epoch. |
| int64 start_timestamp_millis = 1 |
| ; |
| |
| // How long did this node last. This should be the sum of all the parts |
| // below, but is included separately to identify issues when that's not true. |
| int32 duration_millis = 2; |
| |
| int32 parse_millis = 3; |
| int32 fetch_millis = 4; |
| int32 network_millis = 5; |
| int32 upload_millis = 6; |
| int32 process_millis = 7; |
| int32 setup_millis = 8; |
| int32 process_outputs_millis = 9; |
| int32 queue_millis = 10; |
| |
| // Total time spent on failed attempts. |
| int32 retry_millis = 11; |
| |
| // Mapping from error code to the time spent on attempts that failed with |
| // that error. |
| map<int32, int32> retry_millis_by_error = 12; |
| |
| // Time spent where we don't have more detailed information. This should be |
| // just duration_millis minus all the other parts, but it is kept separately |
| // to identify bugs in the code that produces the timing info. |
| int32 other_millis = 13; |
| } |