17#ifndef HARDWARE_INTERFACE__TYPES__STATISTICS_TYPES_HPP_
18#define HARDWARE_INTERFACE__TYPES__STATISTICS_TYPES_HPP_
23#include "libstatistics_collector/moving_average_statistics/moving_average.hpp"
24#include "libstatistics_collector/moving_average_statistics/types.hpp"
25#if !defined(_WIN32) && !defined(__APPLE__)
26#include "realtime_tools/mutex.hpp"
27#define DEFAULT_MUTEX realtime_tools::prio_inherit_mutex
29#define DEFAULT_MUTEX std::mutex
40 using MovingAverageStatisticsCollector =
41 libstatistics_collector::moving_average_statistics::MovingAverageStatistics;
42 using StatisticData = libstatistics_collector::moving_average_statistics::StatisticData;
48 reset_statistics_sample_count_ = std::numeric_limits<unsigned int>::max();
55 void update_statistics(
const std::shared_ptr<MovingAverageStatisticsCollector> & statistics)
57 std::unique_lock<DEFAULT_MUTEX> lock(mutex_);
58 if (statistics->GetCount() > 0)
60 statistics_data.average = statistics->Average();
61 statistics_data.min = statistics->Min();
62 statistics_data.max = statistics->Max();
63 statistics_data.standard_deviation = statistics->StandardDeviation();
64 statistics_data.sample_count = statistics->GetCount();
65 statistics_data = statistics->GetStatistics();
67 if (statistics->GetCount() >= reset_statistics_sample_count_)
79 std::unique_lock<DEFAULT_MUTEX> lock(mutex_);
80 reset_statistics_sample_count_ = reset_sample_count;
85 statistics_data.average = std::numeric_limits<double>::quiet_NaN();
86 statistics_data.min = std::numeric_limits<double>::quiet_NaN();
87 statistics_data.max = std::numeric_limits<double>::quiet_NaN();
88 statistics_data.standard_deviation = std::numeric_limits<double>::quiet_NaN();
89 statistics_data.sample_count = 0;
98 std::unique_lock<DEFAULT_MUTEX> lock(mutex_);
99 return statistics_data;
104 StatisticData statistics_data;
106 unsigned int reset_statistics_sample_count_ = std::numeric_limits<unsigned int>::max();
108 mutable DEFAULT_MUTEX mutex_;
118struct HardwareComponentStatisticsCollector
120 HardwareComponentStatisticsCollector()
122 execution_time = std::make_shared<MovingAverageStatisticsCollector>();
123 periodicity = std::make_shared<MovingAverageStatisticsCollector>();
126 using MovingAverageStatisticsCollector =
127 libstatistics_collector::moving_average_statistics::MovingAverageStatistics;
133 void reset_statistics()
135 execution_time->Reset();
136 periodicity->Reset();
140 std::shared_ptr<MovingAverageStatisticsCollector> execution_time =
nullptr;
142 std::shared_ptr<MovingAverageStatisticsCollector> periodicity =
nullptr;
Data structure to store the statistics of a moving average. The data is protected by a mutex and the ...
Definition statistics_types.hpp:39
const StatisticData & get_statistics() const
Get the statistics data.
Definition statistics_types.hpp:96
void set_reset_statistics_sample_count(unsigned int reset_sample_count)
Set the number of samples to reset the statistics.
Definition statistics_types.hpp:77
void update_statistics(const std::shared_ptr< MovingAverageStatisticsCollector > &statistics)
Update the statistics data with the new statistics data.
Definition statistics_types.hpp:55
Definition actuator.hpp:22