summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/buildtool/execution_api/common/execution_response.hpp4
-rw-r--r--src/buildtool/execution_api/local/local_action.hpp1
-rw-r--r--src/buildtool/execution_api/local/local_response.hpp4
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp1
-rw-r--r--src/buildtool/execution_api/remote/bazel/bazel_response.hpp4
-rw-r--r--test/buildtool/execution_engine/executor/executor.test.cpp3
6 files changed, 17 insertions, 0 deletions
diff --git a/src/buildtool/execution_api/common/execution_response.hpp b/src/buildtool/execution_api/common/execution_response.hpp
index 6b313874..9899584f 100644
--- a/src/buildtool/execution_api/common/execution_response.hpp
+++ b/src/buildtool/execution_api/common/execution_response.hpp
@@ -58,6 +58,10 @@ class IExecutionResponse {
[[nodiscard]] virtual auto StdOut() noexcept -> std::string = 0;
+ // Duration of the actual action execution, in seconds. The value may
+ // be 0 if the action was taken from cache.
+ [[nodiscard]] virtual auto ExecutionDuration() noexcept -> double = 0;
+
[[nodiscard]] virtual auto ActionDigest() const noexcept
-> std::string const& = 0;
diff --git a/src/buildtool/execution_api/local/local_action.hpp b/src/buildtool/execution_api/local/local_action.hpp
index ea19632e..9667dbfb 100644
--- a/src/buildtool/execution_api/local/local_action.hpp
+++ b/src/buildtool/execution_api/local/local_action.hpp
@@ -49,6 +49,7 @@ class LocalAction final : public IExecutionAction {
struct Output {
bazel_re::ActionResult action;
bool is_cached{};
+ double duration{};
};
using OutputFileOrSymlink =
diff --git a/src/buildtool/execution_api/local/local_response.hpp b/src/buildtool/execution_api/local/local_response.hpp
index 60d37ae5..5c0dcd0a 100644
--- a/src/buildtool/execution_api/local/local_response.hpp
+++ b/src/buildtool/execution_api/local/local_response.hpp
@@ -77,6 +77,10 @@ class LocalResponse final : public IExecutionResponse {
}
auto IsCached() const noexcept -> bool final { return output_.is_cached; };
+ auto ExecutionDuration() noexcept -> double final {
+ return output_.duration;
+ }
+
auto ActionDigest() const noexcept -> std::string const& final {
return action_id_;
}
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp
index 1d4dcf4a..3b94e217 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_execution_client.hpp
@@ -41,6 +41,7 @@ class BazelExecutionClient {
struct ExecutionOutput {
bazel_re::ActionResult action_result;
bool cached_result{};
+ double duration{};
grpc::Status status{};
std::unordered_map<std::string, bazel_re::Digest> server_logs{};
std::string message{};
diff --git a/src/buildtool/execution_api/remote/bazel/bazel_response.hpp b/src/buildtool/execution_api/remote/bazel/bazel_response.hpp
index e51bd46a..b24763e0 100644
--- a/src/buildtool/execution_api/remote/bazel/bazel_response.hpp
+++ b/src/buildtool/execution_api/remote/bazel/bazel_response.hpp
@@ -59,6 +59,10 @@ class BazelResponse final : public IExecutionResponse {
return output_.cached_result;
};
+ auto ExecutionDuration() noexcept -> double final {
+ return output_.duration;
+ };
+
auto ActionDigest() const noexcept -> std::string const& final {
return action_id_;
}
diff --git a/test/buildtool/execution_engine/executor/executor.test.cpp b/test/buildtool/execution_engine/executor/executor.test.cpp
index b929412f..6f8bf6fd 100644
--- a/test/buildtool/execution_engine/executor/executor.test.cpp
+++ b/test/buildtool/execution_engine/executor/executor.test.cpp
@@ -104,6 +104,9 @@ class TestResponse : public IExecutionResponse {
[[nodiscard]] auto IsCached() const noexcept -> bool final {
return config_.response.cached;
}
+ [[nodiscard]] auto ExecutionDuration() noexcept -> double final {
+ return 0;
+ }
[[nodiscard]] auto HasStdErr() const noexcept -> bool final { return true; }
[[nodiscard]] auto HasStdOut() const noexcept -> bool final { return true; }
[[nodiscard]] auto StdErr() noexcept -> std::string final { return {}; }