@@ -37,8 +37,8 @@ class real_time_timer::impl
37
37
if (newHash != configHashValue_) {
38
38
start (currentTime);
39
39
const auto sampling_period = config_->sampling_period_to_monitor .load ();
40
- if (sampling_period > 0 ) {
41
- sampling_period_to_monitor_ = std::chrono::milliseconds ( sampling_period) ;
40
+ if (sampling_period. count () > 0 ) {
41
+ sampling_period_to_monitor_ = sampling_period;
42
42
} else {
43
43
sampling_period_to_monitor_ = std::nullopt;
44
44
}
@@ -78,46 +78,37 @@ class real_time_timer::impl
78
78
size_t configHashValue_;
79
79
std::shared_ptr<real_time_metrics> metrics_;
80
80
std::optional<std::chrono::milliseconds> sampling_period_to_monitor_ = std::nullopt;
81
- const volatile bool tick_period_match_ = std::is_same<cosim::time_point::period, Time::time_point::period>::value;
82
81
82
+ template <typename Rep, typename Period>
83
83
void update_rolling_average_real_time_factor (
84
- Time::time_point& currentTime,
85
- time_point& currentSimulationTime,
86
- const cosim:: duration& elapsedRealTime)
84
+ const Time::time_point& currentTime,
85
+ const time_point& currentSimulationTime,
86
+ const std::chrono:: duration<Rep, Period> & elapsedRealTime)
87
87
{
88
88
const auto elapsedSimTime = currentSimulationTime - rtSimulationStartTime_;
89
- if (tick_period_match_) {
90
- metrics_->rolling_average_real_time_factor = elapsedSimTime.count () / (1.0 * elapsedRealTime.count ());
91
- } else {
92
- metrics_->rolling_average_real_time_factor =
93
- std::chrono::duration_cast<cosim::duration>(elapsedSimTime).count () / (1.0 * std::chrono::duration_cast<cosim::duration>(elapsedRealTime).count ());
94
- }
89
+
90
+ metrics_->rolling_average_real_time_factor =
91
+ std::chrono::duration_cast<cosim::duration>(elapsedSimTime).count () / (1.0 * std::chrono::duration_cast<cosim::duration>(elapsedRealTime).count ());
95
92
rtStartTime_ = currentTime;
96
93
rtSimulationStartTime_ = currentSimulationTime;
97
94
rtCounter_ = 0L ;
98
95
}
99
96
100
97
void update_real_time_factor (Time::time_point currentTime, time_point currentSimulationTime)
101
98
{
102
- const auto relativeSimTime = currentSimulationTime - simulationStartTime_;
103
- const auto relativeRealTime = currentTime - startTime_;
104
-
105
- if (tick_period_match_) {
106
- metrics_->total_average_real_time_factor = relativeSimTime.count () / (1.0 * relativeRealTime.count ());
107
- } else {
108
- metrics_->total_average_real_time_factor =
109
- std::chrono::duration_cast<cosim::duration>(relativeSimTime).count () / (1.0 * std::chrono::duration_cast<cosim::duration>(relativeRealTime).count ());
110
- }
99
+ const auto relativeSimTime = std::chrono::duration_cast<cosim::duration>(currentSimulationTime - simulationStartTime_);
100
+ const auto relativeRealTime = std::chrono::duration_cast<cosim::duration>(currentTime - startTime_);
101
+ metrics_->total_average_real_time_factor = relativeSimTime.count () / (1.0 * relativeRealTime.count ());
111
102
112
103
if (sampling_period_to_monitor_.has_value ()) {
113
104
const auto elapsedRealTime = currentTime - rtStartTime_;
114
105
115
106
if (elapsedRealTime > sampling_period_to_monitor_.value ()) {
107
+ const auto elapsedSimTime = currentSimulationTime - rtSimulationStartTime_;
116
108
update_rolling_average_real_time_factor (currentTime, currentSimulationTime, elapsedRealTime);
117
109
}
118
110
} else if (rtCounter_ >= config_->steps_to_monitor .load ()) {
119
111
const auto elapsedRealTime = currentTime - rtStartTime_;
120
-
121
112
update_rolling_average_real_time_factor (currentTime, currentSimulationTime, elapsedRealTime);
122
113
}
123
114
rtCounter_++;
0 commit comments