TIMER: Allow recording of elapsed time when asynch events arrive while idling

As discussed in #578
This commit is contained in:
Mark Pizzolato 2018-06-14 12:40:22 -07:00
parent d39864669a
commit 6b7798781d
2 changed files with 2 additions and 5 deletions

2
scp.c
View file

@ -10417,7 +10417,7 @@ do {
uptr->next = NULL; /* hygiene */
uptr->time = 0;
if (sim_clock_queue != QUEUE_LIST_END)
sim_interval = sim_clock_queue->time;
sim_interval += sim_clock_queue->time;
else
sim_interval = noqueue_time = NOQUEUE_WAIT;
AIO_EVENT_BEGIN(uptr);

View file

@ -1557,10 +1557,7 @@ act_ms = sim_idle_ms_sleep (w_ms); /* wait */
rtc_clock_time_idled[tmr] += act_ms;
act_cyc = act_ms * sim_idle_cyc_ms;
act_cyc += (sim_idle_cyc_ms * sim_idle_rate_ms) / 2; /* account for half an interval's worth of cycles */
if (sim_interval > act_cyc)
sim_interval = sim_interval - act_cyc; /* count down sim_interval */
else
sim_interval = 0; /* or fire immediately */
sim_interval = sim_interval - act_cyc; /* count down sim_interval to reflect idle period */
if (sim_clock_queue == QUEUE_LIST_END)
sim_debug (DBG_IDL, &sim_timer_dev, "slept for %d ms - pending event in %d instructions\n", act_ms, sim_interval);
else