From 5cd44bd929e0cc5820f5164b84d0ad3397e86038 Mon Sep 17 00:00:00 2001 From: alandefreitas Date: Fri, 22 Nov 2024 13:12:37 -0300 Subject: [PATCH] refactor: time report supports minutes --- src/lib/Support/Chrono.hpp | 38 ++++++++++++++++++++++++++++------- src/lib/Support/Generator.cpp | 3 ++- 2 files changed, 33 insertions(+), 8 deletions(-) diff --git a/src/lib/Support/Chrono.hpp b/src/lib/Support/Chrono.hpp index 1434ecdcd..2b2f432f1 100644 --- a/src/lib/Support/Chrono.hpp +++ b/src/lib/Support/Chrono.hpp @@ -20,22 +20,46 @@ namespace clang { namespace mrdocs { +/** Formats a duration into a human-readable string. + + This function takes a `std::chrono::duration` object and formats it into a + string that represents the duration in a human-readable format. The format + includes hours, minutes, seconds, and milliseconds as appropriate. + + @param delta The duration to format. + @return A string representing the formatted duration. + */ template std::string format_duration( std::chrono::duration delta) { - auto delta_ms = std::chrono::duration_cast< - std::chrono::milliseconds>(delta).count(); - if (delta_ms < 1000) + auto delta_ms = std::chrono::duration_cast(delta); + if (delta < std::chrono::seconds(1)) { - return fmt::format("{} ms", delta_ms); + return fmt::format("{}ms", delta_ms.count()); } - else + + auto delta_s = std::chrono::duration_cast(delta); + if (delta < std::chrono::minutes(1)) { - double const delta_s = static_cast(delta_ms) / 1000.0; - return fmt::format("{:.02f} s", delta_s); + delta_ms -= delta_s; + return fmt::format("{}s {}ms", delta_s.count(), delta_ms.count()); } + + auto delta_min = std::chrono::duration_cast(delta); + if (delta < std::chrono::hours(1)) + { + delta_ms -= delta_s; + delta_s -= delta_min; + return fmt::format("{}min {}s {}ms", delta_min.count(), delta_s.count(), delta_ms.count()); + } + + auto delta_h = std::chrono::duration_cast(delta); + delta_ms -= delta_s; + delta_s -= delta_min; + delta_min -= delta_h; + return fmt::format("{}h {}min {}s {}ms", delta_h.count(), delta_min.count(), delta_s.count(), delta_ms.count()); } } // mrdocs diff --git a/src/lib/Support/Generator.cpp b/src/lib/Support/Generator.cpp index c7e37b383..abbbcc725 100644 --- a/src/lib/Support/Generator.cpp +++ b/src/lib/Support/Generator.cpp @@ -67,7 +67,8 @@ build(Corpus const& corpus) const corpus.config->configDir)); MRDOCS_TRY(build(absOutput, corpus)); report::info( - "Generated documentation in {}", + "Generated {} documentation in {}", + this->displayName(), format_duration(clock_type::now() - start_time)); return {}; }