From acf5664cbd981f203b61277e9e2375903dea1046 Mon Sep 17 00:00:00 2001
From: Dominik Baack <dominik.baack@tu-dortmund.de>
Date: Thu, 17 Sep 2020 17:09:14 +0200
Subject: [PATCH] Added more functionality to ExecTime

---
 Processes/DevTools/Analytics/ExecTime.cc | 44 ++++++++++++++++++++++--
 Processes/DevTools/Analytics/ExecTime.h  | 20 +++++++----
 2 files changed, 56 insertions(+), 8 deletions(-)

diff --git a/Processes/DevTools/Analytics/ExecTime.cc b/Processes/DevTools/Analytics/ExecTime.cc
index 792e69ebc..18c31b5a1 100644
--- a/Processes/DevTools/Analytics/ExecTime.cc
+++ b/Processes/DevTools/Analytics/ExecTime.cc
@@ -15,10 +15,50 @@ namespace corsika::process {
   namespace devtools {
 
     template <class T>
-    void ExecTime<T>::start() {}
+    void ExecTime<T>::start() {
+      fStart = std::chrono::steady_clock::now();
+    }
 
     template <class T>
-    void ExecTime<T>::stop() {}
+    void ExecTime<T>::stop() {
+      auto end = std::chrono::steady_clock::now();
+      std::chrono::microseconds timeDiv =
+          std::chrono::duration_cast<std::chrono::microseconds>(end - start);
+
+      fElapsedSum += timeDiv;
+      fN++;
+
+      if (fMax < timeDiv) fMax = timeDiv;
+
+      if (timeDiv < fMin) fMin = timeDiv;
+
+      auto delta = timeDiv - fMean;
+      fMean += delta / fN;
+
+      auto delta2 = timeDiv - fMean;
+
+      fMean2 += delta * delta2;
+    }
+
+    template <typename T>
+    double ExecTime<T>::mean() {
+      return fMean;
+    }
+
+    template <typename T>
+    double ExecTime<T>::var() {
+      return fMean2 / count;
+    }
+
+    template <typename T>
+    double ExecTime<T>::min() {
+      return fMin;
+    }
+
+    template <typename T>
+    double ExecTime<T>::max() {
+      return fMax;
+    }
 
   } // namespace devtools
 } // namespace corsika::process
\ No newline at end of file
diff --git a/Processes/DevTools/Analytics/ExecTime.h b/Processes/DevTools/Analytics/ExecTime.h
index 033e7cc82..aef2c588d 100644
--- a/Processes/DevTools/Analytics/ExecTime.h
+++ b/Processes/DevTools/Analytics/ExecTime.h
@@ -108,22 +108,30 @@ namespace corsika::process {
               std::is_base_of<BoundaryCrossingProcess<typename T::_TDerived>, T>::value>,
           public ExecTime_Continuous<
               T, std::is_base_of<ContinuousProcess<typename T::_TDerived>, T>::value>,
-          public ExecTime_Decay<T,
-                         std::is_base_of<DecayProcess<typename T::_TDerived>, T>::value>,
+          public ExecTime_Decay<
+              T, std::is_base_of<DecayProcess<typename T::_TDerived>, T>::value>,
           public ExecTime_Interaction<
               T, std::is_base_of<InteractionProcess<typename T::_TDerived>, T>::value>,
           public ExecTime_Secondaries<
               T, std::is_base_of<SecondariesProcess<typename T::_TDerived>, T>::value> {
     private:
+      std::chrono::microseconds fStart;
+      std::chrono::microseconds fElapsedSum;
+      std::chrono::microseconds fMean;
+      std::chrono::microseconds fMean2;
+      std::chrono::microseconds fMin;
+      std::chrono::microseconds fMax;
+      long long fN;
+
       void start();
       void stop();
 
     protected:
     public:
-      float mean();
-      float min();
-      float max();
-      float var();
+      double mean();
+      double min();
+      double max();
+      double var();
 
       /*
                   // Stack
-- 
GitLab