diff options
author | Oliver Reiche <oliver.reiche@huawei.com> | 2022-06-13 13:30:13 +0200 |
---|---|---|
committer | Oliver Reiche <oliver.reiche@huawei.com> | 2022-06-13 15:55:41 +0200 |
commit | 35ae2c0272f7d75ca01dbb4baee9071869ffc01e (patch) | |
tree | 7e77219db7217b69aa071c19d160f833b2810b5c | |
parent | 8206d7cfa6aad9a48628da417c03efd77e78df1e (diff) | |
download | justbuild-35ae2c0272f7d75ca01dbb4baee9071869ffc01e.tar.gz |
ResultMap: Keep track of targets to cache
-rw-r--r-- | src/buildtool/build_engine/target_map/TARGETS | 3 | ||||
-rw-r--r-- | src/buildtool/build_engine/target_map/result_map.hpp | 29 |
2 files changed, 28 insertions, 4 deletions
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<AnalysedTargetPtr> result) - -> AnalysedTargetPtr { + gsl::not_null<AnalysedTargetPtr> result, + std::optional<TargetCache::Key> target_cache_key = + std::nullopt) -> AnalysedTargetPtr { auto part = std::hash<BuildMaps::Base::EntityName>{}(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<TargetCache::Key, AnalysedTargetPtr> { + return std::accumulate( + cache_targets_.begin(), + cache_targets_.end(), + std::unordered_map<TargetCache::Key, AnalysedTargetPtr>{}, + [](auto&& l, auto const& r) { + l.insert(r.begin(), r.end()); + return std::forward<decltype(l)>(l); + }); + } + template <bool kIncludeOrigins = false> [[nodiscard]] auto ToResult() const -> ResultType<kIncludeOrigins> { ResultType<kIncludeOrigins> result{}; @@ -263,7 +280,10 @@ class ResultTargetMap { void Clear(gsl::not_null<TaskSystem*> 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<ConfiguredTarget, gsl::not_null<AnalysedTargetPtr>>> targets_{width_}; + std::vector< + std::unordered_map<TargetCache::Key, gsl::not_null<AnalysedTargetPtr>>> + cache_targets_{width_}; std::vector<std::size_t> num_actions_{std::vector<std::size_t>(width_)}; std::vector<std::size_t> num_blobs_{std::vector<std::size_t>(width_)}; std::vector<std::size_t> num_trees_{std::vector<std::size_t>(width_)}; |