TIMER: Allow recording of elapsed time when asynch events arrive while idling
As discussed in #578
This commit is contained in:
parent
d39864669a
commit
6b7798781d
2 changed files with 2 additions and 5 deletions
2
scp.c
2
scp.c
|
@ -10417,7 +10417,7 @@ do {
|
||||||
uptr->next = NULL; /* hygiene */
|
uptr->next = NULL; /* hygiene */
|
||||||
uptr->time = 0;
|
uptr->time = 0;
|
||||||
if (sim_clock_queue != QUEUE_LIST_END)
|
if (sim_clock_queue != QUEUE_LIST_END)
|
||||||
sim_interval = sim_clock_queue->time;
|
sim_interval += sim_clock_queue->time;
|
||||||
else
|
else
|
||||||
sim_interval = noqueue_time = NOQUEUE_WAIT;
|
sim_interval = noqueue_time = NOQUEUE_WAIT;
|
||||||
AIO_EVENT_BEGIN(uptr);
|
AIO_EVENT_BEGIN(uptr);
|
||||||
|
|
|
@ -1557,10 +1557,7 @@ act_ms = sim_idle_ms_sleep (w_ms); /* wait */
|
||||||
rtc_clock_time_idled[tmr] += act_ms;
|
rtc_clock_time_idled[tmr] += act_ms;
|
||||||
act_cyc = act_ms * sim_idle_cyc_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 */
|
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 to reflect idle period */
|
||||||
sim_interval = sim_interval - act_cyc; /* count down sim_interval */
|
|
||||||
else
|
|
||||||
sim_interval = 0; /* or fire immediately */
|
|
||||||
if (sim_clock_queue == QUEUE_LIST_END)
|
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);
|
sim_debug (DBG_IDL, &sim_timer_dev, "slept for %d ms - pending event in %d instructions\n", act_ms, sim_interval);
|
||||||
else
|
else
|
||||||
|
|
Loading…
Add table
Reference in a new issue