From 5fae72fa842f2df805ccfcdee302debfee7a7b03 Mon Sep 17 00:00:00 2001 From: Sascha Roloff Date: Thu, 23 Feb 2023 14:54:54 +0100 Subject: Progress reporting: Extract generic logic from just progress class --- src/buildtool/progress_reporting/progress.hpp | 49 ++++++--------------------- 1 file changed, 10 insertions(+), 39 deletions(-) (limited to 'src/buildtool/progress_reporting/progress.hpp') diff --git a/src/buildtool/progress_reporting/progress.hpp b/src/buildtool/progress_reporting/progress.hpp index 1e18a5ec..43cdc7cc 100644 --- a/src/buildtool/progress_reporting/progress.hpp +++ b/src/buildtool/progress_reporting/progress.hpp @@ -15,15 +15,14 @@ #ifndef INCLUDED_SRC_BUILDTOOL_PROGRESS_REPORTING_PROGRESS_HPP #define INCLUDED_SRC_BUILDTOOL_PROGRESS_REPORTING_PROGRESS_HPP -#include -#include +#include #include #include #include #include #include "src/buildtool/build_engine/target_map/configured_target.hpp" -#include "src/buildtool/logging/logger.hpp" +#include "src/buildtool/progress_reporting/task_tracker.hpp" class Progress { public: @@ -32,39 +31,13 @@ class Progress { return instance; } - void Start(const std::string& id) noexcept { - std::unique_lock lock(m_); - ++prio_; - try { - running_.emplace(id, prio_); - } catch (...) { - Logger::Log(LogLevel::Warning, - "Internal error in progress tracking; progress reports " - "might be incorrect."); - } - } - void Stop(const std::string& id) noexcept { - std::unique_lock lock(m_); - running_.erase(id); - } - - auto Sample() -> std::string { - std::unique_lock lock(m_); - std::string result; - uint64_t started = prio_ + 1; - for (auto const& it : running_) { - if (it.second < started) { - result = it.first; - started = it.second; - } - } - return result; + [[nodiscard]] auto TaskTracker() noexcept -> TaskTracker& { + return task_tracker_; } - // Return a reference to the origin map. It is the responsibility - // of the caller to ensure that access only happens in a - // single-threaded context. - auto OriginMap() -> std::unordered_map< + // Return a reference to the origin map. It is the responsibility of the + // caller to ensure that access only happens in a single-threaded context. + [[nodiscard]] auto OriginMap() noexcept -> std::unordered_map< std::string, std::vector< std::pair>>& { @@ -72,14 +45,12 @@ class Progress { } private: - uint64_t prio_{}; - std::mutex m_{}; - std::unordered_map running_{}; + ::TaskTracker task_tracker_{}; std::unordered_map< std::string, std::vector< std::pair>> - origin_map_; + origin_map_{}; }; -#endif +#endif // INCLUDED_SRC_BUILDTOOL_PROGRESS_REPORTING_PROGRESS_HPP -- cgit v1.2.3