RTC Toolkit 4.0.1
Loading...
Searching...
No Matches
durationMonitor.hpp
Go to the documentation of this file.
1
12#ifndef RTCTK_COMPONENTFRAMEWORK_DURATIONMONITOR_HPP
13#define RTCTK_COMPONENTFRAMEWORK_DURATIONMONITOR_HPP
14
15#include <boost/accumulators/accumulators.hpp>
16#include <boost/accumulators/statistics/count.hpp>
17#include <boost/accumulators/statistics/max.hpp>
18#include <boost/accumulators/statistics/mean.hpp>
19#include <boost/accumulators/statistics/min.hpp>
20#include <boost/accumulators/statistics/stats.hpp>
22
23#include <chrono>
24#include <string>
25
27namespace ba = boost::accumulators;
28
36template <typename ClockType = std::chrono::steady_clock>
38public:
47 std::string const& desc,
48 std::string const& prefix = "")
49 : m_start_time(ClockType::now()) {
50 std::string path;
51 if (prefix == "") {
52 path = "duration_estimate";
53 } else {
54 path = prefix + "/duration_estimate";
55 }
56
57 m_pc_duration_min_reg = metrics.AddCounter(
58 &m_pc_duration_min, CounterMetricInfo(path + "/min", desc + ", min [us]"));
59
60 m_pc_duration_mean_reg = metrics.AddCounter(
61 &m_pc_duration_mean, CounterMetricInfo(path + "/mean", desc + ", mean [us]"));
62
63 m_pc_duration_max_reg = metrics.AddCounter(
64 &m_pc_duration_max, CounterMetricInfo(path + "/max", desc + ", max [us]"));
65 }
66
75 inline void Tick(std::chrono::duration<double, std::micro> elapsed) noexcept {
76 using namespace std::chrono_literals;
77
78 auto now_time = ClockType::now();
79 typename ClockType::duration elapsed_time = now_time - m_start_time;
80 if (elapsed_time > 10s and ba::count(m_accumulator) > 0) {
81 m_start_time = now_time;
82
83 m_pc_duration_min.Store(ba::min(m_accumulator));
84 m_pc_duration_max.Store(ba::max(m_accumulator));
85 m_pc_duration_mean.Store(ba::mean(m_accumulator));
86
87 m_accumulator = {};
88 }
89
90 m_accumulator(elapsed.count());
91 }
92
93 struct Result {
94 int64_t min; // [us]
95 int64_t mean; // [us]
96 int64_t max; // [us]
97 };
98
109 Result GetValue() const {
110 Result res;
111 res.min = m_pc_duration_min.Load();
112 res.mean = m_pc_duration_mean.Load();
113 res.max = m_pc_duration_max.Load();
114 return res;
115 }
121 void Reset() {
122 m_accumulator = {};
123 m_pc_duration_min.Store(0);
124 m_pc_duration_mean.Store(0);
125 m_pc_duration_max.Store(0);
126 }
127
128private:
129 ba::accumulator_set<double,
130 ba::stats<ba::tag::mean, ba::tag::min, ba::tag::max, ba::tag::count>>
131 m_accumulator;
132
133 typename ClockType::time_point m_start_time;
134
135 perfc::CounterI64 m_pc_duration_min;
136 perfc::ScopedRegistration m_pc_duration_min_reg;
137
138 perfc::CounterI64 m_pc_duration_max;
139 perfc::ScopedRegistration m_pc_duration_max_reg;
140
141 perfc::CounterI64 m_pc_duration_mean;
142 perfc::ScopedRegistration m_pc_duration_mean_reg;
143};
144
145} // namespace rtctk::componentFramework
146
147#endif // RTCTK_COMPONENTFRAMEWORK_DURATIONMONITOR_HPP
Component metrics interface.
Definition: componentMetricsIf.hpp:184
virtual perfc::ScopedRegistration AddCounter(CounterVariant counter, CounterMetricInfo info)=0
Add a counter to be included in component metrics, identified by its address, together with info to t...
Defines auxiliary information associated with each counter registered with ComponentMetricsIf.
Definition: componentMetricsIf.hpp:46
Monitors min, mean and max duration and publishes them to OLDB.
Definition: durationMonitor.hpp:37
void Reset()
Method to reset the monitor.
Definition: durationMonitor.hpp:121
DurationMonitor(ComponentMetricsIf &metrics, std::string const &desc, std::string const &prefix="")
Construct instance.
Definition: durationMonitor.hpp:46
Result GetValue() const
Method to get the measured durations in microseconds.
Definition: durationMonitor.hpp:109
void Tick(std::chrono::duration< double, std::micro > elapsed) noexcept
Method to be called repeatedly from within the hot loop that should be measured.
Definition: durationMonitor.hpp:75
Header file for ComponentMetricsIf.
Definition: commandReplier.cpp:22
Definition: durationMonitor.hpp:93
int64_t max
Definition: durationMonitor.hpp:96
int64_t min
Definition: durationMonitor.hpp:94
int64_t mean
Definition: durationMonitor.hpp:95