From c4783953004ce5a8426e8eff94ac653a28c358b1 Mon Sep 17 00:00:00 2001 From: Maksim Denisov Date: Mon, 8 Jul 2024 14:07:12 +0200 Subject: Capture in TreeReaders by pointer to avoid temporaries --- src/buildtool/execution_api/local/local_action.cpp | 2 +- src/buildtool/execution_api/local/local_api.hpp | 6 +++--- src/buildtool/execution_api/local/local_cas_reader.hpp | 5 ++++- src/buildtool/execution_api/remote/bazel/bazel_network.cpp | 2 +- src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp | 7 ++++--- src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp | 6 ++++-- 6 files changed, 17 insertions(+), 11 deletions(-) (limited to 'src') diff --git a/src/buildtool/execution_api/local/local_action.cpp b/src/buildtool/execution_api/local/local_action.cpp index 94d98d6b..955e6724 100644 --- a/src/buildtool/execution_api/local/local_action.cpp +++ b/src/buildtool/execution_api/local/local_action.cpp @@ -291,7 +291,7 @@ auto LocalAction::StageInputs( if (FileSystemManager::IsRelativePath(exec_path)) { return false; } - auto reader = TreeReader{storage_.CAS()}; + auto reader = TreeReader{&storage_.CAS()}; auto result = reader.RecursivelyReadTreeLeafs( root_digest_, exec_path, /*include_trees=*/true); if (not result) { diff --git a/src/buildtool/execution_api/local/local_api.hpp b/src/buildtool/execution_api/local/local_api.hpp index 6f43dd44..bfa1d6c6 100644 --- a/src/buildtool/execution_api/local/local_api.hpp +++ b/src/buildtool/execution_api/local/local_api.hpp @@ -95,7 +95,7 @@ class LocalApi final : public IExecutionApi { auto const& info = artifacts_info[i]; if (IsTreeObject(info.type)) { // read object infos from sub tree and call retrieve recursively - auto reader = TreeReader{storage_.CAS()}; + auto reader = TreeReader{&storage_.CAS()}; auto const result = reader.RecursivelyReadTreeLeafs( info.digest, output_paths[i]); if (not result) { @@ -149,7 +149,7 @@ class LocalApi final : public IExecutionApi { std::vector const& artifacts_info, std::vector const& fds, bool raw_tree) const noexcept -> bool final { - auto dumper = StreamDumper{storage_.CAS()}; + auto dumper = StreamDumper{&storage_.CAS()}; return CommonRetrieveToFds( artifacts_info, fds, @@ -202,7 +202,7 @@ class LocalApi final : public IExecutionApi { auto const& info = missing_artifacts_info->back_map[dgst]; // Recursively process trees. if (IsTreeObject(info.type)) { - auto reader = TreeReader{storage_.CAS()}; + auto reader = TreeReader{&storage_.CAS()}; auto const& result = reader.ReadDirectTreeEntries( info.digest, std::filesystem::path{}); if (not result or not RetrieveToCas(result->infos, api)) { diff --git a/src/buildtool/execution_api/local/local_cas_reader.hpp b/src/buildtool/execution_api/local/local_cas_reader.hpp index 9618dbc4..64a1a51e 100644 --- a/src/buildtool/execution_api/local/local_cas_reader.hpp +++ b/src/buildtool/execution_api/local/local_cas_reader.hpp @@ -20,6 +20,7 @@ #include #include +#include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/bazel_types.hpp" @@ -30,7 +31,9 @@ class LocalCasReader final { public: using DumpCallback = std::function; - explicit LocalCasReader(LocalCAS const& cas) noexcept : cas_(cas) {} + explicit LocalCasReader( + gsl::not_null const*> const& cas) noexcept + : cas_(*cas) {} [[nodiscard]] auto ReadDirectory(ArtifactDigest const& digest) const noexcept -> std::optional; diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp index 6094888d..34ae6af4 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network.cpp @@ -136,7 +136,7 @@ auto BazelNetwork::ExecuteBazelActionSync( } auto BazelNetwork::CreateReader() const noexcept -> BazelNetworkReader { - return BazelNetworkReader{instance_name_, *cas_}; + return BazelNetworkReader{instance_name_, cas_.get()}; } auto BazelNetwork::GetCachedActionResult( diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp index d945fdb3..9f4c34c8 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.cpp @@ -24,9 +24,10 @@ #include "src/buildtool/logging/logger.hpp" #include "src/utils/cpp/path.hpp" -BazelNetworkReader::BazelNetworkReader(std::string instance_name, - BazelCasClient const& cas) noexcept - : instance_name_{std::move(instance_name)}, cas_(cas) {} +BazelNetworkReader::BazelNetworkReader( + std::string instance_name, + gsl::not_null const& cas) noexcept + : instance_name_{std::move(instance_name)}, cas_(*cas) {} BazelNetworkReader::BazelNetworkReader( BazelNetworkReader&& other, diff --git a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp index 9f1fbef2..2955fa57 100644 --- a/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp +++ b/src/buildtool/execution_api/remote/bazel/bazel_network_reader.hpp @@ -24,6 +24,7 @@ #include #include +#include "gsl/gsl" #include "src/buildtool/common/artifact.hpp" #include "src/buildtool/common/artifact_digest.hpp" #include "src/buildtool/common/bazel_types.hpp" @@ -38,8 +39,9 @@ class BazelNetworkReader final { public: using DumpCallback = std::function; - BazelNetworkReader(std::string instance_name, - BazelCasClient const& cas) noexcept; + explicit BazelNetworkReader( + std::string instance_name, + gsl::not_null const& cas) noexcept; BazelNetworkReader( BazelNetworkReader&& other, -- cgit v1.2.3