From 1114f1e2590e72a9cf3ba696f2b55000a9df1f4a Mon Sep 17 00:00:00 2001
From: Stephane Del Pino <stephane.delpino44@gmail.com>
Date: Tue, 10 Oct 2023 23:20:40 +0200
Subject: [PATCH] Improve execution stats display

---
 src/utils/ExecutionStatManager.cpp | 67 ++++++++++++++++++------------
 src/utils/ExecutionStatManager.hpp |  2 +
 2 files changed, 42 insertions(+), 27 deletions(-)

diff --git a/src/utils/ExecutionStatManager.cpp b/src/utils/ExecutionStatManager.cpp
index 8fbd32e2c..6918d4d7a 100644
--- a/src/utils/ExecutionStatManager.cpp
+++ b/src/utils/ExecutionStatManager.cpp
@@ -10,6 +10,39 @@
 
 ExecutionStatManager* ExecutionStatManager::m_instance = nullptr;
 
+std::string
+ExecutionStatManager::_prettyPrintTime(double time_in_seconds) const
+{
+  std::ostringstream os;
+  size_t seconds    = std::floor(time_in_seconds);
+  const size_t days = seconds / (24 * 3600);
+  seconds -= days * (24 * 3600);
+  const size_t hours = seconds / 3600;
+  seconds -= hours * 3600;
+  const size_t minutes = seconds / 60;
+  seconds -= minutes * 60;
+  os << rang::style::bold;
+  bool print = false;
+  if (days > 0) {
+    print = true;
+    os << days << "d" << ' ';
+  }
+  if (print or (hours > 0)) {
+    print = true;
+    os << std::setw(2) << std::setfill('0') << hours << "h";
+  }
+  if (print or (minutes > 0)) {
+    print = true;
+    os << std::setw(2) << std::setfill('0') << minutes << "mn";
+  }
+  if (print) {
+    os << rang::style::bold << std::setw(2) << std::setfill('0') << seconds << "s";
+  }
+  os << rang::style::reset;
+
+  return os.str();
+}
+
 void
 ExecutionStatManager::_printMaxResidentMemory() const
 {
@@ -69,8 +102,12 @@ ExecutionStatManager::_printMaxResidentMemory() const
 void
 ExecutionStatManager::_printElapseTime() const
 {
-  std::cout << "Execution: " << rang::style::bold << m_instance->m_elapse_time.seconds() << 's' << rang::style::reset
-            << '\n';
+  const double elapse_time = m_instance->m_elapse_time.seconds();
+  std::cout << "Execution: " << rang::style::bold << m_instance->m_elapse_time.seconds() << 's' << rang::style::reset;
+  if (elapse_time > 60) {
+    std::cout << " [" << rang::style::bold << this->_prettyPrintTime(elapse_time) << rang::style::reset << ']';
+  }
+  std::cout << '\n';
 }
 
 void
@@ -87,31 +124,7 @@ ExecutionStatManager::_printTotalCPUTime() const
   std::cout << " (" << parallel::allReduceSum(Kokkos::DefaultHostExecutionSpace::concurrency()) << " threads over "
             << parallel::size() << " processes)";
   if (total_cpu_time > 60) {
-    size_t seconds    = std::floor(total_cpu_time);
-    const size_t days = seconds / (24 * 3600);
-    seconds -= days * (24 * 3600);
-    const size_t hours = seconds / 3600;
-    seconds -= hours * 3600;
-    const size_t minutes = seconds / 60;
-    seconds -= minutes * 60;
-    std::cout << " " << rang::style::bold;
-    bool print = false;
-    if (days > 0) {
-      print = true;
-      std::cout << days << "d" << ' ';
-    }
-    if (print or (hours > 0)) {
-      print = true;
-      std::cout << std::setw(2) << std::setfill('0') << hours << "h";
-    }
-    if (print or (minutes > 0)) {
-      print = true;
-      std::cout << std::setw(2) << std::setfill('0') << minutes << "mn";
-    }
-    if (print) {
-      std::cout << rang::style::bold << std::setw(2) << std::setfill('0') << seconds << "s";
-    }
-    std::cout << rang::style::reset;
+    std::cout << " [" << _prettyPrintTime(total_cpu_time) << ']';
   }
   std::cout << '\n';
 }
diff --git a/src/utils/ExecutionStatManager.hpp b/src/utils/ExecutionStatManager.hpp
index 476b31a84..6f7c33356 100644
--- a/src/utils/ExecutionStatManager.hpp
+++ b/src/utils/ExecutionStatManager.hpp
@@ -12,6 +12,8 @@ class ExecutionStatManager
   Timer m_elapse_time;
   bool m_do_print = true;
 
+  std::string _prettyPrintTime(double seconds) const;
+
   void _printMaxResidentMemory() const;
   void _printElapseTime() const;
   void _printTotalCPUTime() const;
-- 
GitLab