diff options
Diffstat (limited to 'src/buildtool/build_engine')
10 files changed, 63 insertions, 25 deletions
diff --git a/src/buildtool/build_engine/target_map/TARGETS b/src/buildtool/build_engine/target_map/TARGETS index b753e503..38c261d5 100644 --- a/src/buildtool/build_engine/target_map/TARGETS +++ b/src/buildtool/build_engine/target_map/TARGETS @@ -45,6 +45,7 @@ , ["src/buildtool/build_engine/base_maps", "rule_map"] , ["src/buildtool/build_engine/base_maps", "source_map"] , ["src/buildtool/build_engine/base_maps", "targets_file_map"] + , ["src/buildtool/common", "common"] , ["src/buildtool/common", "config"] , ["src/buildtool/multithreading", "async_map_consumer"] , ["src/buildtool/storage", "storage"] @@ -97,6 +98,7 @@ [ "configured_target" , "result_map" , ["src/buildtool/build_engine/analysed_target", "target"] + , ["src/buildtool/common", "common"] , ["src/buildtool/common", "config"] , ["src/buildtool/multithreading", "async_map_consumer"] , ["@", "gsl", "", "gsl"] diff --git a/src/buildtool/build_engine/target_map/absent_target_map.cpp b/src/buildtool/build_engine/target_map/absent_target_map.cpp index 27eb9e86..f72dc697 100644 --- a/src/buildtool/build_engine/target_map/absent_target_map.cpp +++ b/src/buildtool/build_engine/target_map/absent_target_map.cpp @@ -23,13 +23,15 @@ auto BuildMaps::Target::CreateAbsentTargetMap( const gsl::not_null<ResultTargetMap*>& result_map, gsl::not_null<RepositoryConfig*> const& repo_config, + gsl::not_null<Statistics*> const& local_stats, std::size_t jobs) -> AbsentTargetMap { #ifndef BOOTSTRAP_BUILD_TOOL - auto target_reader = [result_map, repo_config](auto /*ts*/, - auto setter, - auto logger, - auto /*subcaller*/, - auto key) { + auto target_reader = [result_map, repo_config, local_stats]( + auto /*ts*/, + auto setter, + auto logger, + auto /*subcaller*/, + auto key) { // assumptions: // - target with absent targets file requested // - ServeApi correctly configured @@ -137,7 +139,7 @@ auto BuildMaps::Target::CreateAbsentTargetMap( info.ToString()); (*setter)(std::move(analysis_result)); - Statistics::Instance().IncrementExportsCachedCounter(); + local_stats->IncrementExportsCachedCounter(); return; } (*logger)(fmt::format("Reading target entry for key {} failed", diff --git a/src/buildtool/build_engine/target_map/absent_target_map.hpp b/src/buildtool/build_engine/target_map/absent_target_map.hpp index aa2b5b42..a00fc05d 100644 --- a/src/buildtool/build_engine/target_map/absent_target_map.hpp +++ b/src/buildtool/build_engine/target_map/absent_target_map.hpp @@ -19,6 +19,7 @@ #include "src/buildtool/build_engine/target_map/configured_target.hpp" #include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/common/repository_config.hpp" +#include "src/buildtool/common/statistics.hpp" #include "src/buildtool/multithreading/async_map_consumer.hpp" namespace BuildMaps::Target { @@ -26,6 +27,7 @@ using AbsentTargetMap = AsyncMapConsumer<ConfiguredTarget, AnalysedTargetPtr>; auto CreateAbsentTargetMap(const gsl::not_null<ResultTargetMap*>&, gsl::not_null<RepositoryConfig*> const& repo_config, + gsl::not_null<Statistics*> const& local_stats, std::size_t jobs = 0) -> AbsentTargetMap; } // namespace BuildMaps::Target diff --git a/src/buildtool/build_engine/target_map/built_in_rules.cpp b/src/buildtool/build_engine/target_map/built_in_rules.cpp index d28a6ed9..2c90cc9d 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.cpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.cpp @@ -340,6 +340,7 @@ void FileGenRule( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, [[maybe_unused]] const ActiveTargetCache& /*target_cache*/, + [[maybe_unused]] const gsl::not_null<Statistics*>& /*stats*/, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -359,6 +360,7 @@ void SymlinkRule( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, [[maybe_unused]] const ActiveTargetCache& /*target_cache*/, + [[maybe_unused]] const gsl::not_null<Statistics*>& /*stats*/, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -487,6 +489,7 @@ void TreeRule( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, [[maybe_unused]] const ActiveTargetCache& /*target_cache*/, + [[maybe_unused]] const gsl::not_null<Statistics*>& /*stats*/, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -736,6 +739,7 @@ void InstallRule( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, [[maybe_unused]] const ActiveTargetCache& /*target_cache*/, + [[maybe_unused]] const gsl::not_null<Statistics*>& /*stats*/, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -1322,6 +1326,7 @@ void GenericRule( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, [[maybe_unused]] const ActiveTargetCache& /*target_cache*/, + [[maybe_unused]] const gsl::not_null<Statistics*>& /*stats*/, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -1400,6 +1405,7 @@ void ConfigureRule( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, [[maybe_unused]] const ActiveTargetCache& /*target_cache*/, + [[maybe_unused]] const gsl::not_null<Statistics*>& /*stats*/, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -1541,6 +1547,7 @@ auto const kBuiltIns = std::unordered_map< const BuildMaps::Target::ConfiguredTarget&, const gsl::not_null<RepositoryConfig*>&, const ActiveTargetCache&, + const gsl::not_null<Statistics*>&, const BuildMaps::Target::TargetMap::SubCallerPtr&, const BuildMaps::Target::TargetMap::SetterPtr&, const BuildMaps::Target::TargetMap::LoggerPtr&, @@ -1572,6 +1579,7 @@ auto HandleBuiltin( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, const ActiveTargetCache& target_cache, + const gsl::not_null<Statistics*>& stats, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -1598,6 +1606,7 @@ auto HandleBuiltin( key, repo_config, target_cache, + stats, subcaller, setter, target_logger, diff --git a/src/buildtool/build_engine/target_map/built_in_rules.hpp b/src/buildtool/build_engine/target_map/built_in_rules.hpp index e3e2f220..1eb6e086 100644 --- a/src/buildtool/build_engine/target_map/built_in_rules.hpp +++ b/src/buildtool/build_engine/target_map/built_in_rules.hpp @@ -21,6 +21,7 @@ #include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/build_engine/target_map/target_map.hpp" #include "src/buildtool/common/repository_config.hpp" +#include "src/buildtool/common/statistics.hpp" #include "src/buildtool/storage/target_cache.hpp" namespace BuildMaps::Target { @@ -30,6 +31,7 @@ auto HandleBuiltin( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, const ActiveTargetCache& target_cache, + const gsl::not_null<Statistics*>& stats, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, diff --git a/src/buildtool/build_engine/target_map/export.cpp b/src/buildtool/build_engine/target_map/export.cpp index c9aed0e3..29085716 100644 --- a/src/buildtool/build_engine/target_map/export.cpp +++ b/src/buildtool/build_engine/target_map/export.cpp @@ -98,6 +98,7 @@ void ExportRule( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, const ActiveTargetCache& target_cache, + const gsl::not_null<Statistics*>& stats, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, @@ -134,7 +135,7 @@ void ExportRule( #endif // BOOTSTRAP_BUILD_TOOL if (not target_cache_value) { - Statistics::Instance().IncrementExportsUncachedCounter(); + stats->IncrementExportsUncachedCounter(); Logger::Log(LogLevel::Performance, "Export target {} registered for caching: {}", key.target.ToString(), @@ -176,7 +177,7 @@ void ExportRule( info.ToString()); (*setter)(std::move(analysis_result)); - Statistics::Instance().IncrementExportsCachedCounter(); + stats->IncrementExportsCachedCounter(); return; } (*logger)(fmt::format("Reading target entry for key {} failed", @@ -185,7 +186,7 @@ void ExportRule( } } else { - Statistics::Instance().IncrementExportsNotEligibleCounter(); + stats->IncrementExportsNotEligibleCounter(); Logger::Log(LogLevel::Performance, "Export target {} is not eligible for target caching", key.target.ToString()); diff --git a/src/buildtool/build_engine/target_map/export.hpp b/src/buildtool/build_engine/target_map/export.hpp index 7f470706..3f43796b 100644 --- a/src/buildtool/build_engine/target_map/export.hpp +++ b/src/buildtool/build_engine/target_map/export.hpp @@ -21,12 +21,14 @@ #include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/build_engine/target_map/target_map.hpp" #include "src/buildtool/common/repository_config.hpp" +#include "src/buildtool/common/statistics.hpp" #include "src/buildtool/storage/target_cache.hpp" void ExportRule(const nlohmann::json& desc_json, const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, const ActiveTargetCache& target_cache, + const gsl::not_null<Statistics*>& stats, const BuildMaps::Target::TargetMap::SubCallerPtr& subcaller, const BuildMaps::Target::TargetMap::SetterPtr& setter, const BuildMaps::Target::TargetMap::LoggerPtr& logger, diff --git a/src/buildtool/build_engine/target_map/result_map.hpp b/src/buildtool/build_engine/target_map/result_map.hpp index 6911bf02..dcc6577e 100644 --- a/src/buildtool/build_engine/target_map/result_map.hpp +++ b/src/buildtool/build_engine/target_map/result_map.hpp @@ -170,7 +170,9 @@ class ResultTargetMap { } template <bool kIncludeOrigins = false> - [[nodiscard]] auto ToResult() const -> ResultType<kIncludeOrigins> { + [[nodiscard]] auto ToResult(gsl::not_null<Statistics const*> const& stats, + gsl::not_null<Progress*> const& progress) const + -> ResultType<kIncludeOrigins> { ResultType<kIncludeOrigins> result{}; size_t na = 0; size_t nb = 0; @@ -184,7 +186,7 @@ class ResultTargetMap { result.blobs.reserve(nb); result.trees.reserve(nt); - auto& origin_map = Progress::Instance().OriginMap(); + auto& origin_map = progress->OriginMap(); origin_map.clear(); origin_map.reserve(na); for (const auto& target : targets_) { @@ -298,7 +300,7 @@ class ResultTargetMap { }); result.actions.erase(lastaction, result.actions.end()); - int trees_traversed = Statistics::Instance().TreesAnalysedCounter(); + int trees_traversed = stats->TreesAnalysedCounter(); if (trees_traversed > 0) { Logger::Log(LogLevel::Performance, "Analysed {} non-known source trees", @@ -314,8 +316,10 @@ class ResultTargetMap { } template <bool kIncludeOrigins = false> - [[nodiscard]] auto ToJson() const -> nlohmann::json { - auto const result = ToResult<kIncludeOrigins>(); + [[nodiscard]] auto ToJson(gsl::not_null<Statistics const*> const& stats, + gsl::not_null<Progress*> const& progress) const + -> nlohmann::json { + auto const result = ToResult<kIncludeOrigins>(stats, progress); auto actions = nlohmann::json::object(); auto trees = nlohmann::json::object(); std::for_each(result.actions.begin(), @@ -340,11 +344,15 @@ class ResultTargetMap { } template <bool kIncludeOrigins = true> - auto ToFile(std::string const& graph_file, int indent = 2) const -> void { + auto ToFile(std::string const& graph_file, + gsl::not_null<Statistics const*> const& stats, + gsl::not_null<Progress*> const& progress, + int indent = 2) const -> void { Logger::Log( LogLevel::Info, "Dumping action graph to file {}.", graph_file); std::ofstream os(graph_file); - os << std::setw(indent) << ToJson<kIncludeOrigins>() << std::endl; + os << std::setw(indent) << ToJson<kIncludeOrigins>(stats, progress) + << std::endl; } void Clear(gsl::not_null<TaskSystem*> const& ts) { diff --git a/src/buildtool/build_engine/target_map/target_map.cpp b/src/buildtool/build_engine/target_map/target_map.cpp index 4d28ac6a..aed6d93a 100644 --- a/src/buildtool/build_engine/target_map/target_map.cpp +++ b/src/buildtool/build_engine/target_map/target_map.cpp @@ -1238,6 +1238,7 @@ void withTargetsFile( const BuildMaps::Target::ConfiguredTarget& key, const gsl::not_null<RepositoryConfig*>& repo_config, const ActiveTargetCache& target_cache, + const gsl::not_null<Statistics*>& stats, const nlohmann::json& targets_file, const gsl::not_null<BuildMaps::Base::SourceTargetMap*>& source_target, const gsl::not_null<BuildMaps::Base::UserRuleMap*>& rule_map, @@ -1277,6 +1278,7 @@ void withTargetsFile( key, repo_config, target_cache, + stats, subcaller, setter, logger, @@ -1457,7 +1459,8 @@ void TreeTarget( const BuildMaps::Target::TargetMap::LoggerPtr& logger, const gsl::not_null<BuildMaps::Target::ResultTargetMap*>& result_map, const gsl::not_null<BuildMaps::Base::DirectoryEntriesMap*>& - directory_entries) { + directory_entries, + const gsl::not_null<Statistics*>& stats) { const auto& target = key.target.GetNamedTarget(); const auto dir_name = std::filesystem::path{target.module} / target.name; auto module_ = BuildMaps::Base::ModuleName{target.repository, dir_name}; @@ -1465,7 +1468,7 @@ void TreeTarget( directory_entries->ConsumeAfterKeysReady( ts, {module_}, - [setter, subcaller, target, key, result_map, logger, dir_name]( + [setter, subcaller, target, key, result_map, logger, dir_name, stats]( auto values) { // expected values.size() == 1 const auto& dir_entries = *values[0]; @@ -1495,7 +1498,7 @@ void TreeTarget( "Source tree reference for non-known tree {}", key.target.ToString()); }); - Statistics::Instance().IncrementTreesAnalysedCounter(); + stats->IncrementTreesAnalysedCounter(); using BuildMaps::Target::ConfiguredTarget; @@ -1660,6 +1663,7 @@ auto CreateTargetMap( const gsl::not_null<ResultTargetMap*>& result_map, const gsl::not_null<RepositoryConfig*>& repo_config, const ActiveTargetCache& target_cache, + const gsl::not_null<Statistics*>& stats, std::size_t jobs) -> TargetMap { auto target_reader = [source_target_map, targets_file_map, @@ -1668,11 +1672,12 @@ auto CreateTargetMap( absent_target_map, result_map, repo_config, - target_cache](auto ts, - auto setter, - auto logger, - auto subcaller, - auto key) { + target_cache, + stats](auto ts, + auto setter, + auto logger, + auto subcaller, + auto key) { if (key.target.IsAnonymousTarget()) { withTargetNode(key, repo_config, @@ -1700,7 +1705,8 @@ auto CreateTargetMap( setter, wrapped_logger, result_map, - directory_entries_map); + directory_entries_map, + stats); } else if (key.target.GetNamedTarget().reference_t == BuildMaps::Base::ReferenceType::kFile) { @@ -1808,6 +1814,7 @@ auto CreateTargetMap( [key, repo_config, target_cache, + stats, source_target_map, rule_map, ts, @@ -1818,6 +1825,7 @@ auto CreateTargetMap( withTargetsFile(key, repo_config, target_cache, + stats, *values[0], source_target_map, rule_map, diff --git a/src/buildtool/build_engine/target_map/target_map.hpp b/src/buildtool/build_engine/target_map/target_map.hpp index 2832eb35..eda27b77 100644 --- a/src/buildtool/build_engine/target_map/target_map.hpp +++ b/src/buildtool/build_engine/target_map/target_map.hpp @@ -28,6 +28,7 @@ #include "src/buildtool/build_engine/target_map/configured_target.hpp" #include "src/buildtool/build_engine/target_map/result_map.hpp" #include "src/buildtool/common/repository_config.hpp" +#include "src/buildtool/common/statistics.hpp" #include "src/buildtool/multithreading/async_map_consumer.hpp" #include "src/buildtool/storage/target_cache.hpp" @@ -44,6 +45,7 @@ auto CreateTargetMap( const gsl::not_null<ResultTargetMap*>&, const gsl::not_null<RepositoryConfig*>&, const ActiveTargetCache&, + const gsl::not_null<Statistics*>& stats, std::size_t jobs = 0) -> TargetMap; // use explicit cast to std::function to allow template deduction when used |