|
@@ -27,15 +27,16 @@ object_manager::impl::query_info(name_type obj_name) {
|
|
|
auto &st = iter->second;
|
|
auto &st = iter->second;
|
|
|
return obj_info{
|
|
return obj_info{
|
|
|
.type = st.type, .pl_ptr = st.ptr,
|
|
.type = st.type, .pl_ptr = st.ptr,
|
|
|
- .sig = &st.sig, .last_save_ts = st.last_save_ts};
|
|
|
|
|
|
|
+ .sig = &st.sig, .last_save_ts = st.stats_timer.last_ts()};
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
object_manager::obj_stats
|
|
object_manager::obj_stats
|
|
|
object_manager::impl::query_obj_stats(name_type obj_name) {
|
|
object_manager::impl::query_obj_stats(name_type obj_name) {
|
|
|
auto obj_st = query_st(obj_name);
|
|
auto obj_st = query_st(obj_name);
|
|
|
- auto ret = obj_stats();
|
|
|
|
|
- ret.save_interval = ba::rolling_mean(obj_st->interval_acc) * 1e3f; // ms
|
|
|
|
|
- ret.save_frequency = 1e3f / ret.save_interval; // Hz
|
|
|
|
|
|
|
+ auto info = obj_st->stats_timer.query();
|
|
|
|
|
+ auto ret = obj_stats{
|
|
|
|
|
+ .save_interval = info.interval,
|
|
|
|
|
+ .save_frequency = info.frequency};
|
|
|
return ret;
|
|
return ret;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -57,14 +58,7 @@ void object_manager::impl::notify_signal(name_type obj_name) {
|
|
|
});
|
|
});
|
|
|
obj_st->is_pending = true;
|
|
obj_st->is_pending = true;
|
|
|
}
|
|
}
|
|
|
-
|
|
|
|
|
- // stats
|
|
|
|
|
- if (obj_st->last_save_ts != 0) {
|
|
|
|
|
- assert(cur_ts > obj_st->last_save_ts);
|
|
|
|
|
- auto interval = (cur_ts - obj_st->last_save_ts) / 1e6f;
|
|
|
|
|
- obj_st->interval_acc(interval);
|
|
|
|
|
- }
|
|
|
|
|
- obj_st->last_save_ts = cur_ts;
|
|
|
|
|
|
|
+ obj_st->stats_timer.record(cur_ts);
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
io_context *object_manager::impl::switch_ctx() const {
|
|
io_context *object_manager::impl::switch_ctx() const {
|