86 #include "pgm_controller.h"
90 using namespace std::chrono;
91 using namespace r_code;
95 uint32 TimeJob::job_count_ = 0;
97 TimeJob::TimeJob(Timestamp target_time) :
_Object(), target_time_(target_time) {
99 job_id_ = ++job_count_;
102 bool TimeJob::is_alive()
const {
107 void TimeJob::report(microseconds lag)
const {
109 std::cout <<
"> late generic: " << lag.count() <<
" us behind." << std::endl;
114 UpdateJob::UpdateJob(Group *g, Timestamp ijt) : TimeJob(ijt) {
119 bool UpdateJob::update(Timestamp &next_target) {
121 #ifdef WITH_DETAIL_OID
122 OUTPUT_LINE((TraceLevel)0, Utils::RelativeTime(Now()) <<
" UpdateJob::TimeJob " << get_job_id() <<
123 ": group_" << group_->get_oid() <<
"->update()");
125 group_->update(target_time_);
129 void UpdateJob::report(int64 lag)
const {
131 std::cout <<
"> late update: " << lag <<
" us behind." << std::endl;
136 SignalingJob::SignalingJob(View *v, Timestamp ijt) : TimeJob(ijt) {
141 bool SignalingJob::is_alive()
const {
143 return view_->controller_->is_alive();
148 AntiPGMSignalingJob::AntiPGMSignalingJob(View *v, Timestamp ijt) : SignalingJob(v, ijt) {
151 bool AntiPGMSignalingJob::update(Timestamp &next_target) {
153 #ifdef WITH_DETAIL_OID
154 OUTPUT_LINE((TraceLevel)0, Utils::RelativeTime(Now()) <<
" AntiPGMSignalingJob::TimeJob " << get_job_id() <<
155 ": controller(" << view_->controller_->get_detail_oid() <<
")->signal_anti_pgm()");
158 ((AntiPGMController *)view_->controller_)->signal_anti_pgm();
162 void AntiPGMSignalingJob::report(int64 lag)
const {
164 std::cout <<
"> late |pgm signaling: " << lag <<
" us behind." << std::endl;
169 InputLessPGMSignalingJob::InputLessPGMSignalingJob(View *v, Timestamp ijt) : SignalingJob(v, ijt) {
172 bool InputLessPGMSignalingJob::update(Timestamp &next_target) {
174 #ifdef WITH_DETAIL_OID
175 OUTPUT_LINE((TraceLevel)0, Utils::RelativeTime(Now()) <<
" InputLessPGMSignalingJob::TimeJob " << get_job_id() <<
176 ": controller(" << view_->controller_->get_detail_oid() <<
")->signal_input_less_pgm()");
179 ((InputLessPGMController *)view_->controller_)->signal_input_less_pgm();
183 void InputLessPGMSignalingJob::report(int64 lag)
const {
185 std::cout <<
"> late input-less pgm signaling: " << lag <<
" us behind." << std::endl;
193 is_from_io_device_ = is_from_io_device;
196 bool InjectionJob::update(Timestamp &next_target) {
198 #ifdef WITH_DETAIL_OID
199 OUTPUT_LINE((TraceLevel)0, Utils::RelativeTime(Now()) <<
" InjectionJob::TimeJob " << get_job_id() <<
200 ": inject(View(fact(" << view_->object_->get_detail_oid() <<
")))");
202 _Mem::Get()->inject(view_);
203 if (is_from_io_device_)
205 OUTPUT_LINE(IO_DEVICE_INJ_EJT, Utils::RelativeTime(Now()) <<
" I/O device inject " <<
206 view_->object_->get_oid() <<
", ijt " << Utils::RelativeTime(view_->get_ijt()));
210 void InjectionJob::report(int64 lag)
const {
212 std::cout <<
"> late injection: " << lag <<
" us behind." << std::endl;
217 EInjectionJob::EInjectionJob(View *v, Timestamp ijt) : TimeJob(ijt) {
222 bool EInjectionJob::update(Timestamp &next_target) {
224 #ifdef WITH_DETAIL_OID
225 OUTPUT_LINE((TraceLevel)0, Utils::RelativeTime(Now()) <<
" EInjectionJob::TimeJob " << get_job_id() <<
226 ": inject_existing_object(View(fact(" << view_->object_->get_detail_oid() <<
")))");
228 _Mem::Get()->inject_existing_object(view_, view_->object_, view_->get_host());
232 void EInjectionJob::report(int64 lag)
const {
234 std::cout <<
"> late injection: " << lag <<
" us behind." << std::endl;
239 SaliencyPropagationJob::SaliencyPropagationJob(
Code *o, float32 sln_change, float32 source_sln_thr, Timestamp ijt) : TimeJob(ijt), sln_change_(sln_change), source_sln_thr_(source_sln_thr) {
244 bool SaliencyPropagationJob::update(Timestamp &next_target) {
246 #ifdef WITH_DETAIL_OID
247 OUTPUT_LINE((TraceLevel)0, Utils::RelativeTime(Now()) <<
" SaliencyPropagationJob::TimeJob " << get_job_id() <<
248 ": propagate_sln(fact(" << object_->get_detail_oid() <<
"))");
250 if (!object_->is_invalidated())
251 _Mem::Get()->propagate_sln(object_, sln_change_, source_sln_thr_);
255 void SaliencyPropagationJob::report(int64 lag)
const {
257 std::cout <<
"> late sln propagation: " << lag <<
" us behind." << std::endl;
262 ShutdownTimeCore::ShutdownTimeCore() : TimeJob(Timestamp(seconds(0))) {
265 bool ShutdownTimeCore::update(Timestamp &next_target) {
272 PerfSamplingJob::PerfSamplingJob(Timestamp start, microseconds period) : TimeJob(start), period_(period) {
275 bool PerfSamplingJob::update(Timestamp &next_target) {
277 #ifdef WITH_DETAIL_OID
278 OUTPUT_LINE((TraceLevel)0, Utils::RelativeTime(Now()) <<
" PerfSamplingJob::TimeJob " << get_job_id() <<
279 ": inject_perf_stats()");
281 _Mem::Get()->inject_perf_stats();
282 target_time_ += period_;
283 next_target = target_time_;
287 bool PerfSamplingJob::is_alive()
const {