From 35ae2c0272f7d75ca01dbb4baee9071869ffc01e Mon Sep 17 00:00:00 2001 From: Oliver Reiche Date: Mon, 13 Jun 2022 13:30:13 +0200 Subject: ResultMap: Keep track of targets to cache --- src/buildtool/build_engine/target_map/TARGETS | 3 ++- .../build_engine/target_map/result_map.hpp | 29 +++++++++++++++++++--- 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'src') diff --git a/src/buildtool/build_engine/target_map/TARGETS b/src/buildtool/build_engine/target_map/TARGETS index a4704623..d3c6e815 100644 --- a/src/buildtool/build_engine/target_map/TARGETS +++ b/src/buildtool/build_engine/target_map/TARGETS @@ -15,7 +15,8 @@ , "name": ["result_map"] , "hdrs": ["result_map.hpp"] , "deps": - [ ["src/buildtool/common", "tree"] + [ "target_cache" + , ["src/buildtool/common", "tree"] , ["src/buildtool/build_engine/analysed_target", "target"] , ["src/buildtool/build_engine/target_map", "configured_target"] , ["src/buildtool/build_engine/expression", "expression"] diff --git a/src/buildtool/build_engine/target_map/result_map.hpp b/src/buildtool/build_engine/target_map/result_map.hpp index 61d72bf2..173f59d9 100644 --- a/src/buildtool/build_engine/target_map/result_map.hpp +++ b/src/buildtool/build_engine/target_map/result_map.hpp @@ -14,6 +14,7 @@ #include "src/buildtool/build_engine/base_maps/entity_name.hpp" #include "src/buildtool/build_engine/expression/expression.hpp" #include "src/buildtool/build_engine/target_map/configured_target.hpp" +#include "src/buildtool/build_engine/target_map/target_cache.hpp" #include "src/buildtool/common/tree.hpp" #include "src/buildtool/logging/logger.hpp" #include "src/buildtool/multithreading/task.hpp" @@ -55,13 +56,17 @@ class ResultTargetMap { // element of the map after insertion. [[nodiscard]] auto Add(BuildMaps::Base::EntityName name, Configuration conf, - gsl::not_null result) - -> AnalysedTargetPtr { + gsl::not_null result, + std::optional target_cache_key = + std::nullopt) -> AnalysedTargetPtr { auto part = std::hash{}(name) % width_; std::unique_lock lock{m_[part]}; auto [entry, inserted] = targets_[part].emplace( ConfiguredTarget{std::move(name), std::move(conf)}, std::move(result)); + if (target_cache_key) { + cache_targets_[part].emplace(*target_cache_key, entry->second); + } if (inserted) { num_actions_[part] += entry->second->Actions().size(); num_blobs_[part] += entry->second->Blobs().size(); @@ -92,6 +97,18 @@ class ResultTargetMap { return targets; } + [[nodiscard]] auto CacheTargets() const noexcept + -> std::unordered_map { + return std::accumulate( + cache_targets_.begin(), + cache_targets_.end(), + std::unordered_map{}, + [](auto&& l, auto const& r) { + l.insert(r.begin(), r.end()); + return std::forward(l); + }); + } + template [[nodiscard]] auto ToResult() const -> ResultType { ResultType result{}; @@ -263,7 +280,10 @@ class ResultTargetMap { void Clear(gsl::not_null const& ts) { for (std::size_t i = 0; i < width_; ++i) { - ts->QueueTask([i, this]() { targets_[i].clear(); }); + ts->QueueTask([i, this]() { + targets_[i].clear(); + cache_targets_[i].clear(); + }); } } @@ -274,6 +294,9 @@ class ResultTargetMap { std::vector< std::unordered_map>> targets_{width_}; + std::vector< + std::unordered_map>> + cache_targets_{width_}; std::vector num_actions_{std::vector(width_)}; std::vector num_blobs_{std::vector(width_)}; std::vector num_trees_{std::vector(width_)}; -- cgit v1.2.3