From 0476ae48be49690ef188701d3a4624e12ad1ec5a Mon Sep 17 00:00:00 2001
From: Raphael <ufdrv@student.kit.edu>
Date: Thu, 15 Jun 2017 16:05:03 +0200
Subject: [PATCH] move and rename the time measurement macro (RobotUnit.cpp ->
 util.h) ( ARMARX_[VIRTUAL_]TIMER -> ARMARX_[VIRTUAL_]STOPWATCH )

---
 .../components/units/RobotUnit/RobotUnit.cpp  | 103 ++----------------
 .../components/units/RobotUnit/util.h         |  86 +++++++++++++++
 2 files changed, 95 insertions(+), 94 deletions(-)

diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp
index d67a5fecd..5749f4e02 100644
--- a/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp
+++ b/source/RobotAPI/components/units/RobotUnit/RobotUnit.cpp
@@ -38,91 +38,6 @@
 #include "Units/KinematicSubUnit.h"
 #include "Units/PlatformSubUnit.h"
 
-
-namespace armarx
-{
-    namespace detail
-    {
-        template<class TimeT = std::chrono::microseconds>
-        struct TimerTag
-        {
-            //assume it is std::chrono
-
-            using ClockT = std::chrono::high_resolution_clock;
-            const ClockT::time_point beg;
-
-            TimerTag() : beg {ClockT::now()} {}
-
-            TimeT stop()
-            {
-                return std::chrono::duration_cast<TimeT>(ClockT::now() - beg);
-            }
-        };
-
-        template<>
-        struct TimerTag<TimestampVariant> : TimerTag<>
-        {
-            TimestampVariant stop()
-            {
-                return {TimerTag<std::chrono::microseconds>::stop().count()};
-            }
-        };
-
-        template<>
-        struct TimerTag<IceUtil::Time> : TimerTag<>
-        {
-            TimestampVariant stop()
-            {
-                return IceUtil::Time::microSeconds(TimerTag<std::chrono::microseconds>::stop().count());
-            }
-        };
-
-        template <class Fun, class TimeT>
-        TimeT operator*(TimerTag<TimeT>&& t, Fun&& fn)
-        {
-            fn();
-            return t.stop();
-        }
-
-        //for virtual time
-
-        template<class TimeT = IceUtil::Time>
-        struct VirtualTimerTag;
-
-        template<>
-        struct VirtualTimerTag<TimestampVariant>
-        {
-            const IceUtil::Time beg;
-            VirtualTimerTag() : beg {TimeUtil::GetTime()} {}
-            TimestampVariant stop()
-            {
-                return {TimeUtil::GetTime() - beg};
-            }
-        };
-
-        template<>
-        struct VirtualTimerTag<IceUtil::Time>
-        {
-            const IceUtil::Time beg;
-            VirtualTimerTag() : beg {TimeUtil::GetTime()} {}
-            TimestampVariant stop()
-            {
-                return TimeUtil::GetTime() - beg;
-            }
-        };
-
-        template <class Fun, class TimeT>
-        TimeT operator*(VirtualTimerTag<TimeT>&& t, Fun&& fn)
-        {
-            fn();
-            return t.stop();
-        }
-    }
-}
-#define ARMARX_TIMER(...) ::armarx::detail::TimerTag<__VA_ARGS__>{} *[&]
-#define ARMARX_VIRTUAL_TIMER(...) ::armarx::detail::VirtualTimerTag<__VA_ARGS__>{} *[&]
-
-
 namespace std
 {
     std::string to_string(armarx::RobotUnitState s)
@@ -1226,7 +1141,7 @@ namespace armarx
             //update units
             debugObserverMap["publishTimings_UnitUpdate"] = new TimedVariant
             {
-                ARMARX_TIMER(TimestampVariant)
+                ARMARX_STOPWATCH(TimestampVariant)
                 {
                     ARMARX_DEBUG << deactivateSpam(spamdelay) << "updating units with new sensor values";
                     publishNewSensorDataTime = TimeUtil::GetTime();
@@ -1236,7 +1151,7 @@ namespace armarx
                         {
                             debugObserverMap["publishTimings_UnitUpdate_" + rsu->getName()] = new TimedVariant
                             {
-                                ARMARX_TIMER(TimestampVariant){rsu->update(sensorAndControlBuffer, activatedControllers);},
+                                ARMARX_STOPWATCH(TimestampVariant){rsu->update(sensorAndControlBuffer, activatedControllers);},
                                 timestamp
                             };
                         }
@@ -1248,7 +1163,7 @@ namespace armarx
 
             debugObserverMap["publishTimings_SensorUpdates"] = new TimedVariant
             {
-                ARMARX_TIMER(TimestampVariant)
+                ARMARX_STOPWATCH(TimestampVariant)
                 {
                     for (std::size_t sensidx = 0 ; sensidx < numSensorDevices; ++sensidx)
                     {
@@ -1288,7 +1203,7 @@ namespace armarx
         {
             debugObserverMap["publishTimings_ControlUpdates"] = new TimedVariant
             {
-                ARMARX_TIMER(TimestampVariant)
+                ARMARX_STOPWATCH(TimestampVariant)
                 {
                     for (std::size_t ctrlidx = 0 ; ctrlidx < numControlDevices; ++ctrlidx)
                     {
@@ -1329,14 +1244,14 @@ namespace armarx
         //call publish hook + publish LVL1Controller changes
         debugObserverMap["publishTimings_LVL1Updates"] = new TimedVariant
         {
-            ARMARX_TIMER(TimestampVariant)
+            ARMARX_STOPWATCH(TimestampVariant)
             {
                 for (const auto& pair : lvl1Controllers)
                 {
                     const LVL1ControllerPtr& lvl1 = pair.second;
                     debugObserverMap["publishTimings_LVL1Updates_" + lvl1->getInstanceName()] = new TimedVariant
                     {
-                        ARMARX_TIMER(TimestampVariant)
+                        ARMARX_STOPWATCH(TimestampVariant)
                         {
                             //run some hook for active (used for visu)
                             PublishLVL1Controller(lvl1, sensorAndControlBuffer, debugDrawerPrx, debugObserverBatchPrx);
@@ -1359,7 +1274,7 @@ namespace armarx
         //report new class names
         debugObserverMap["publishTimings_ClassNameUpdates"] = new TimedVariant
         {
-            ARMARX_TIMER(TimestampVariant)
+            ARMARX_STOPWATCH(TimestampVariant)
             {
                 const auto classNames = LVL1ControllerRegistry::getKeys();
                 if (lastReportedClasses.size() != classNames.size())
@@ -1376,14 +1291,14 @@ namespace armarx
             },
             timestamp
         };
-        debugObserverMap["publishTimings_RobotUnitListenerFlush"] = new TimedVariant {ARMARX_TIMER(TimestampVariant){listenerBatchPrx->ice_flushBatchRequests();}, timestamp};
+        debugObserverMap["publishTimings_RobotUnitListenerFlush"] = new TimedVariant {ARMARX_STOPWATCH(TimestampVariant){listenerBatchPrx->ice_flushBatchRequests();}, timestamp};
 
         if (publishDebugObserver)
         {
             debugObserverMap["publishTimings_LastDebugObserverFlush"] = new TimedVariant {TimestampVariant{lastDebugObserverFlush.count()}, timestamp};
             debugObserverMap["publishTimings_LastPublishLoop"] = new TimedVariant {TimestampVariant{lastPublishLoop.count()}, timestamp};
             debugObserverBatchPrx->setDebugChannel(getName(), debugObserverMap);
-            lastDebugObserverFlush = ARMARX_TIMER()
+            lastDebugObserverFlush = ARMARX_STOPWATCH()
             {
                 debugObserverBatchPrx->ice_flushBatchRequests();
             };
diff --git a/source/RobotAPI/components/units/RobotUnit/util.h b/source/RobotAPI/components/units/RobotUnit/util.h
index da93e8a7d..3e32ce7d4 100644
--- a/source/RobotAPI/components/units/RobotUnit/util.h
+++ b/source/RobotAPI/components/units/RobotUnit/util.h
@@ -23,6 +23,92 @@
 #ifndef _ARMARX_UNIT_RobotAPI_RobotUnit_util_H
 #define _ARMARX_UNIT_RobotAPI_RobotUnit_util_H
 
+#include <chrono>
+#include <ArmarXCore/core/time/TimeUtil.h>
+#include <ArmarXCore/observers/variant/TimestampVariant.h>
+namespace armarx
+{
+    namespace detail
+    {
+        template<class TimeT = std::chrono::microseconds>
+        struct TimerTag
+        {
+            //assume it is std::chrono
+
+            using ClockT = std::chrono::high_resolution_clock;
+            const ClockT::time_point beg;
+
+            TimerTag() : beg {ClockT::now()} {}
+
+            TimeT stop()
+            {
+                return std::chrono::duration_cast<TimeT>(ClockT::now() - beg);
+            }
+        };
+
+        template<>
+        struct TimerTag<TimestampVariant> : TimerTag<>
+        {
+            TimestampVariant stop()
+            {
+                return {TimerTag<std::chrono::microseconds>::stop().count()};
+            }
+        };
+
+        template<>
+        struct TimerTag<IceUtil::Time> : TimerTag<>
+        {
+            TimestampVariant stop()
+            {
+                return IceUtil::Time::microSeconds(TimerTag<std::chrono::microseconds>::stop().count());
+            }
+        };
+
+        template <class Fun, class TimeT>
+        TimeT operator*(TimerTag<TimeT>&& t, Fun&& fn)
+        {
+            fn();
+            return t.stop();
+        }
+
+        //for virtual time
+
+        template<class TimeT = IceUtil::Time>
+        struct VirtualTimerTag;
+
+        template<>
+        struct VirtualTimerTag<TimestampVariant>
+        {
+            const IceUtil::Time beg;
+            VirtualTimerTag() : beg {TimeUtil::GetTime()} {}
+            TimestampVariant stop()
+            {
+                return {TimeUtil::GetTime() - beg};
+            }
+        };
+
+        template<>
+        struct VirtualTimerTag<IceUtil::Time>
+        {
+            const IceUtil::Time beg;
+            VirtualTimerTag() : beg {TimeUtil::GetTime()} {}
+            TimestampVariant stop()
+            {
+                return TimeUtil::GetTime() - beg;
+            }
+        };
+
+        template <class Fun, class TimeT>
+        TimeT operator*(VirtualTimerTag<TimeT>&& t, Fun&& fn)
+        {
+            fn();
+            return t.stop();
+        }
+    }
+}
+#define ARMARX_STOPWATCH(...) ::armarx::detail::TimerTag<__VA_ARGS__>{} *[&]
+#define ARMARX_VIRTUAL_STOPWATCH(...) ::armarx::detail::VirtualTimerTag<__VA_ARGS__>{} *[&]
+
 #include <boost/units/detail/utility.hpp>
 #include <string>
 namespace armarx
-- 
GitLab