diff --git a/repos/os/src/init/state_reporter.h b/repos/os/src/init/state_reporter.h index 4739ab9c35..cf6bf528d1 100644 --- a/repos/os/src/init/state_reporter.h +++ b/repos/os/src/init/state_reporter.h @@ -52,10 +52,14 @@ class Init::State_reporter : public Report_update_trigger Version _version; Constructible _timer; + Constructible _timer_periodic; Signal_handler _timer_handler { _env.ep(), *this, &State_reporter::_handle_timer }; + Signal_handler _timer_periodic_handler { + _env.ep(), *this, &State_reporter::_handle_timer }; + bool _scheduled = false; void _handle_timer() @@ -134,6 +138,18 @@ class Init::State_reporter : public Report_update_trigger if (trigger_update) trigger_report_update(); + + if (_report_detail->child_ram() || _report_detail->child_caps()) { + if (!_timer_periodic.constructed()) { + _timer_periodic.construct(_env); + _timer_periodic->sigh(_timer_periodic_handler); + } + _timer_periodic->trigger_periodic(1000*1000); + } else { + if (_timer_periodic.constructed()) { + _timer_periodic.destruct(); + } + } } void trigger_report_update() override