From 40c7cba8dae4b121bd39e8e0efe5515130f75483 Mon Sep 17 00:00:00 2001 From: Raphael Grimm <raphael.grimm@kit.edu> Date: Thu, 3 May 2018 11:58:26 +0200 Subject: [PATCH] Change the RobotUnit to use IceUtil::Time instead of std::chrono --- .../Devices/RTThreadTimingsSensorDevice.h | 35 ++++++++---------- .../RobotUnitModules/RobotUnitModuleBase.h | 16 --------- .../RobotUnitModules/RobotUnitModuleBase.ipp | 13 ------- .../RobotUnitModuleControlThread.cpp | 12 +++---- .../RobotUnitModuleDevices.cpp | 4 +-- .../RobotUnitModulePublisher.cpp | 8 ++--- .../RobotUnitModulePublisher.h | 2 +- .../RobotUnitModules/RobotUnitModuleUnits.cpp | 4 +-- .../SensorValues/SensorValueRTThreadTimings.h | 36 +++++++++---------- 9 files changed, 48 insertions(+), 82 deletions(-) diff --git a/source/RobotAPI/components/units/RobotUnit/Devices/RTThreadTimingsSensorDevice.h b/source/RobotAPI/components/units/RobotUnit/Devices/RTThreadTimingsSensorDevice.h index b7b0778f6..971935730 100644 --- a/source/RobotAPI/components/units/RobotUnit/Devices/RTThreadTimingsSensorDevice.h +++ b/source/RobotAPI/components/units/RobotUnit/Devices/RTThreadTimingsSensorDevice.h @@ -90,40 +90,35 @@ namespace armarx void rtMarkRtLoopStart() override { - std::chrono::microseconds now = MicroNow(); + const IceUtil::Time now = TimeUtil::GetTime(true); value.rtLoopRoundTripTime = now - rtLoopStart; rtLoopStart = now; } void rtMarkRtLoopPreSleep() override { - value.rtLoopDuration = MicroNow() - rtLoopStart; + value.rtLoopDuration = TimeUtil::GetTime(true) - rtLoopStart; } void rtMarkRtBusSendReceiveStart() override { - std::chrono::microseconds now = MicroNow(); + const IceUtil::Time now = TimeUtil::GetTime(true); value.rtBusSendReceiveRoundTripTime = now - rtBusSendReceiveStart; rtBusSendReceiveStart = now; } void rtMarkRtBusSendReceiveEnd() override { - value.rtBusSendReceiveDuration = MicroNow() - rtBusSendReceiveStart; - } - - static std::chrono::microseconds MicroNow() - { - return std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); + value.rtBusSendReceiveDuration = TimeUtil::GetTime(true) - rtBusSendReceiveStart; } protected: #define make_markRT_X_Start_End(name) \ virtual void rtMarkRt##name##Start() override \ { \ - std::chrono::microseconds now = MicroNow(); \ + const IceUtil::Time now = TimeUtil::GetTime(true); \ value.rt##name##RoundTripTime = now - rt##name##Start; \ rt##name##Start=now; \ } \ virtual void rtMarkRt##name##End() override \ { \ - value.rt##name##Duration=MicroNow() - rt##name##Start; \ + value.rt##name##Duration=TimeUtil::GetTime(true) - rt##name##Start; \ } make_markRT_X_Start_End(SwitchControllerSetup) @@ -135,15 +130,15 @@ namespace armarx make_markRT_X_Start_End(ResetAllTargets) #undef make_markRT_X_Start_End protected: - std::chrono::microseconds rtSwitchControllerSetupStart; - std::chrono::microseconds rtRunNJointControllersStart; - std::chrono::microseconds rtHandleInvalidTargetsStart; - std::chrono::microseconds rtRunJointControllersStart; - std::chrono::microseconds rtBusSendReceiveStart; - std::chrono::microseconds rtReadSensorDeviceValuesStart; - std::chrono::microseconds rtUpdateSensorAndControlBufferStart; - std::chrono::microseconds rtResetAllTargetsStart; - std::chrono::microseconds rtLoopStart; + IceUtil::Time rtSwitchControllerSetupStart; + IceUtil::Time rtRunNJointControllersStart; + IceUtil::Time rtHandleInvalidTargetsStart; + IceUtil::Time rtRunJointControllersStart; + IceUtil::Time rtBusSendReceiveStart; + IceUtil::Time rtReadSensorDeviceValuesStart; + IceUtil::Time rtUpdateSensorAndControlBufferStart; + IceUtil::Time rtResetAllTargetsStart; + IceUtil::Time rtLoopStart; }; } diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h index 6bb56b528..f402596d7 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.h @@ -597,22 +597,6 @@ namespace armarx * @throw throws If called in the \ref ControlThread or on shutdown. */ GuardType getGuard() const; - /** - * @brief Returns the current Time - * @return The current Time - */ - static TimePointType Now(); - /** - * @brief Returns the microseconds since the given start timepoint. - * @param last Start timepoint - * @return The microseconds since the given start timepoint. - */ - static std::chrono::microseconds MicroToNow(TimePointType last); - /** - * @brief Returns the microseconds since epoch. - * @return The microseconds since epoch. - */ - static std::chrono::microseconds MicroNow(); // //////////////////////////////////////////////////////////////////////////////////////// // // ///////////////////////////////////////// Data ///////////////////////////////////////// // // //////////////////////////////////////////////////////////////////////////////////////// // diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.ipp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.ipp index 7f8a977b0..4980c7fb7 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.ipp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleBase.ipp @@ -28,19 +28,6 @@ namespace armarx { namespace RobotUnitModule { - inline ModuleBase::TimePointType ModuleBase::Now() - { - return ClockType::now(); - } - inline std::chrono::microseconds ModuleBase::MicroToNow(ModuleBase::TimePointType last) - { - return std::chrono::duration_cast<std::chrono::microseconds>(Now() - last); - } - inline std::chrono::microseconds ModuleBase::MicroNow() - { - return std::chrono::duration_cast<std::chrono::microseconds>(std::chrono::high_resolution_clock::now().time_since_epoch()); - } - inline RobotUnitState ModuleBase::getRobotUnitState() const { return state; diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp index 08816b35a..079f15c44 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleControlThread.cpp @@ -322,16 +322,16 @@ namespace armarx { if (nJointCtrl) { - auto start = MicroNow(); + auto start = TimeUtil::GetTime(true); nJointCtrl->rtSwapBufferAndRun(sensorValuesTimestamp, timeSinceLastIteration); - auto duration = MicroNow() - start; - if (duration.count() > 500) + auto duration = TimeUtil::GetTime(true) - start; + if (duration.toMicroSeconds() > 500) { - ARMARX_ERROR << deactivateSpam(5) << "The NJointController " << nJointCtrl->getClassName() << " took " << duration.count() << " µs to run!"; + ARMARX_ERROR << deactivateSpam(5) << "The NJointController " << nJointCtrl->getClassName() << " took " << duration.toMicroSeconds() << " µs to run!"; } - else if (duration.count() > 50) + else if (duration.toMicroSeconds() > 50) { - ARMARX_WARNING << deactivateSpam(5) << "The NJointController " << nJointCtrl->getClassName() << " took " << duration.count() << " µs to run!"; + ARMARX_WARNING << deactivateSpam(5) << "The NJointController " << nJointCtrl->getClassName() << " took " << duration.toMicroSeconds() << " µs to run!"; } } } diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp index 87bc3b2aa..93d5d8280 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleDevices.cpp @@ -153,7 +153,7 @@ namespace armarx { status.controlTargetValues[targ->getControlMode()] = targ->toVariants(_module<ControlThreadDataBuffer>().getSensorAndControlBuffer().sensorValuesTimestamp); } - status.timestampUSec = MicroNow().count(); + status.timestampUSec = TimeUtil::GetTime(true).toMicroSeconds(); throwIfDevicesNotReady(__FUNCTION__); return status; } @@ -221,7 +221,7 @@ namespace armarx SensorDeviceStatus status; status.deviceName = sensorDevice->getDeviceName(); status.sensorValue = _module<ControlThreadDataBuffer>().getSensorAndControlBuffer().sensors.at(idx)->toVariants(_module<ControlThreadDataBuffer>().getSensorAndControlBuffer().sensorValuesTimestamp); - status.timestampUSec = MicroNow().count(); + status.timestampUSec = TimeUtil::GetTime(true).toMicroSeconds(); throwIfDevicesNotReady(__FUNCTION__); return status; } diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp index b6aa80e65..8e0176897 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.cpp @@ -244,7 +244,7 @@ namespace armarx ARMARX_CHECK_EXPRESSION(requestedJointControllers.at(ctrlidx)); status.requestedControlMode = requestedJointControllers.at(ctrlidx)->getControlMode(); status.controlTargetValues = std::move(variants); - status.timestampUSec = MicroNow().count(); + status.timestampUSec = TimeUtil::GetTime(true).toMicroSeconds(); listenerPrx->controlDeviceStatusChanged(status); } if (robotUnitObserver->getState() >= eManagedIceObjectStarted) @@ -285,7 +285,7 @@ namespace armarx } status.sensorValue = std::move(variants); - status.timestampUSec = MicroNow().count(); + status.timestampUSec = TimeUtil::GetTime(true).toMicroSeconds(); listenerPrx->sensorDeviceStatusChanged(status); } } @@ -493,7 +493,7 @@ namespace armarx if (publishToObserver) { - timingMap["LastPublishLoop"] = new TimedVariant {TimestampVariant{lastPublishLoop.count()}, timestamp}; + timingMap["LastPublishLoop"] = new TimedVariant {TimestampVariant{lastPublishLoop}, timestamp}; if (robotUnitObserver->getState() >= eManagedIceObjectStarted) { robotUnitObserver->offerOrUpdateDataFieldsFlatCopy(robotUnitObserver->additionalChannel, additionalMap); @@ -517,7 +517,7 @@ namespace armarx } } ++publishIterationCount; - lastPublishLoop = MicroToNow(begPublish); + lastPublishLoop = TimeUtil::GetTime(true) - begPublish; } } } diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.h b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.h index c59dcd9a5..bac3769ac 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.h +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModulePublisher.h @@ -280,7 +280,7 @@ namespace armarx std::atomic<std::uint64_t> debugObserverSkipIterations; /// @brief The time required by the last iteration of \ref publish - std::chrono::microseconds lastPublishLoop; + IceUtil::Time lastPublishLoop; /// @brief The used RobotUnitObserver RobotUnitObserverPtr robotUnitObserver; diff --git a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp index d2ac94760..cb344901d 100644 --- a/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp +++ b/source/RobotAPI/components/units/RobotUnit/RobotUnitModules/RobotUnitModuleUnits.cpp @@ -130,7 +130,7 @@ namespace armarx void Units::initializeDefaultUnits() { - auto beg = MicroNow(); + auto beg = TimeUtil::GetTime(true); { auto guard = getGuard(); throwIfStateIsNot(RobotUnitState::InitializingUnits, __FUNCTION__); @@ -148,7 +148,7 @@ namespace armarx initializeTcpControllerUnit(); ARMARX_DEBUG << "TcpControllerUnit initialized"; } - ARMARX_INFO << "initializing default units...done! " << (MicroNow() - beg).count() << " us"; + ARMARX_INFO << "initializing default units...done! " << (TimeUtil::GetTime(true) - beg).toMicroSeconds() << " us"; } diff --git a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueRTThreadTimings.h b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueRTThreadTimings.h index 7c1ff7bae..0c2816773 100644 --- a/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueRTThreadTimings.h +++ b/source/RobotAPI/components/units/RobotUnit/SensorValues/SensorValueRTThreadTimings.h @@ -34,32 +34,32 @@ namespace armarx public: DETAIL_SensorValueBase_DEFAULT_METHOD_IMPLEMENTATION - std::chrono::microseconds rtSwitchControllerSetupDuration; - std::chrono::microseconds rtSwitchControllerSetupRoundTripTime; + IceUtil::Time rtSwitchControllerSetupDuration; + IceUtil::Time rtSwitchControllerSetupRoundTripTime; - std::chrono::microseconds rtRunNJointControllersDuration; - std::chrono::microseconds rtRunNJointControllersRoundTripTime; + IceUtil::Time rtRunNJointControllersDuration; + IceUtil::Time rtRunNJointControllersRoundTripTime; - std::chrono::microseconds rtHandleInvalidTargetsDuration; - std::chrono::microseconds rtHandleInvalidTargetsRoundTripTime; + IceUtil::Time rtHandleInvalidTargetsDuration; + IceUtil::Time rtHandleInvalidTargetsRoundTripTime; - std::chrono::microseconds rtRunJointControllersDuration; - std::chrono::microseconds rtRunJointControllersRoundTripTime; + IceUtil::Time rtRunJointControllersDuration; + IceUtil::Time rtRunJointControllersRoundTripTime; - std::chrono::microseconds rtBusSendReceiveDuration; - std::chrono::microseconds rtBusSendReceiveRoundTripTime; + IceUtil::Time rtBusSendReceiveDuration; + IceUtil::Time rtBusSendReceiveRoundTripTime; - std::chrono::microseconds rtReadSensorDeviceValuesDuration; - std::chrono::microseconds rtReadSensorDeviceValuesRoundTripTime; + IceUtil::Time rtReadSensorDeviceValuesDuration; + IceUtil::Time rtReadSensorDeviceValuesRoundTripTime; - std::chrono::microseconds rtUpdateSensorAndControlBufferDuration; - std::chrono::microseconds rtUpdateSensorAndControlBufferRoundTripTime; + IceUtil::Time rtUpdateSensorAndControlBufferDuration; + IceUtil::Time rtUpdateSensorAndControlBufferRoundTripTime; - std::chrono::microseconds rtResetAllTargetsDuration; - std::chrono::microseconds rtResetAllTargetsRoundTripTime; + IceUtil::Time rtResetAllTargetsDuration; + IceUtil::Time rtResetAllTargetsRoundTripTime; - std::chrono::microseconds rtLoopDuration; - std::chrono::microseconds rtLoopRoundTripTime; + IceUtil::Time rtLoopDuration; + IceUtil::Time rtLoopRoundTripTime; static SensorValueInfo<SensorValueRTThreadTimings> GetClassMemberInfo() { -- GitLab