|
|
@@ -25,7 +25,18 @@ object_manager::impl::query_info(name_type obj_name) {
|
|
|
auto iter = obj_pool.find(obj_name);
|
|
|
if (iter == obj_pool.end()) [[unlikely]] return {};
|
|
|
auto &st = iter->second;
|
|
|
- return obj_info{.type = st.type, .pl_ptr = st.ptr, .sig = &st.sig};
|
|
|
+ return obj_info{
|
|
|
+ .type = st.type, .pl_ptr = st.ptr,
|
|
|
+ .sig = &st.sig, .last_save_ts = st.last_save_ts};
|
|
|
+}
|
|
|
+
|
|
|
+object_manager::obj_stats
|
|
|
+object_manager::impl::query_obj_stats(name_type 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
|
|
|
+ return ret;
|
|
|
}
|
|
|
|
|
|
void object_manager::impl::create_placeholder(name_type obj_name, std::type_index obj_type,
|
|
|
@@ -37,6 +48,7 @@ void object_manager::impl::create_placeholder(name_type obj_name, std::type_inde
|
|
|
}
|
|
|
|
|
|
void object_manager::impl::notify_signal(name_type obj_name) {
|
|
|
+ auto cur_ts = current_timestamp();
|
|
|
auto obj_st = query_st(obj_name);
|
|
|
if (!obj_st->is_pending) {
|
|
|
post(*ctx, [=] {
|
|
|
@@ -45,6 +57,14 @@ void object_manager::impl::notify_signal(name_type obj_name) {
|
|
|
});
|
|
|
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;
|
|
|
}
|
|
|
|
|
|
io_context *object_manager::impl::switch_ctx() const {
|
|
|
@@ -69,6 +89,11 @@ object_manager::query_info(name_type obj_name) {
|
|
|
return pimpl->query_info(obj_name);
|
|
|
}
|
|
|
|
|
|
+object_manager::obj_stats
|
|
|
+object_manager::query_obj_stats(name_type obj_name) {
|
|
|
+ return pimpl->query_obj_stats(obj_name);
|
|
|
+}
|
|
|
+
|
|
|
io_context *object_manager::switch_ctx() {
|
|
|
return pimpl->switch_ctx();
|
|
|
}
|