Optimize timer processing

Around 25% faster timer processing
This commit is contained in:
Adrien Moulin
2022-08-09 18:13:21 +02:00
parent 2a6a061556
commit 4c4ac5438a
2 changed files with 34 additions and 51 deletions

View File

@@ -198,30 +198,12 @@ extern pc_timer_t * timer_head;
extern int timer_inited;
static __inline void
timer_remove_head_inline(void)
{
pc_timer_t *timer;
if (timer_inited && timer_head) {
timer = timer_head;
timer_head = timer->next;
if (timer_head) {
timer_head->prev = NULL;
timer->next->prev = NULL;
}
timer->next = timer->prev = NULL;
timer->flags &= ~TIMER_ENABLED;
}
}
static __inline void
timer_process_inline(void)
{
pc_timer_t *timer;
if (!timer_inited || !timer_head)
if (!timer_head)
return;
while(1) {
@@ -230,7 +212,12 @@ timer_process_inline(void)
if (!TIMER_LESS_THAN_VAL(timer, (uint32_t)tsc))
break;
timer_remove_head_inline();
timer_head = timer->next;
if (timer_head)
timer_head->prev = NULL;
timer->next = timer->prev = NULL;
timer->flags &= ~TIMER_ENABLED;
if (timer->flags & TIMER_SPLIT)
timer_advance_ex(timer, 0); /* We're splitting a > 1 s period into multiple <= 1 s periods. */