Scheduler: Optimize by adding a proper reschedule function

This commit is contained in:
wheremyfoodat
2025-10-12 02:26:12 +03:00
parent fd90f9a4d0
commit 0b8d8af9c7
5 changed files with 48 additions and 11 deletions

View File

@@ -738,8 +738,7 @@ void Kernel::addWakeupEvent(u64 tick) {
nextScheduledWakeupTick = tick;
auto& scheduler = cpu.getScheduler();
scheduler.removeEvent(Scheduler::EventType::ThreadWakeup);
scheduler.addEvent(Scheduler::EventType::ThreadWakeup, tick);
scheduler.rescheduleEvent(Scheduler::EventType::ThreadWakeup, tick);
}
}

View File

@@ -52,9 +52,7 @@ void Kernel::pollTimers() {
}
}
void Kernel::cancelTimer(Timer* timer) {
timer->running = false;
}
void Kernel::cancelTimer(Timer* timer) { timer->running = false; }
void Kernel::signalTimer(Handle timerHandle, Timer* timer) {
timer->fired = true;
@@ -115,8 +113,7 @@ void Kernel::svcSetTimer() {
Scheduler& scheduler = cpu.getScheduler();
// Signal an event to poll timers as soon as possible
scheduler.removeEvent(Scheduler::EventType::UpdateTimers);
scheduler.addEvent(Scheduler::EventType::UpdateTimers, cpu.getTicks() + 1);
scheduler.rescheduleEvent(Scheduler::EventType::UpdateTimers, cpu.getTicks() + 1);
// If the initial delay is 0 then instantly signal the timer
if (initial == 0) {

View File

@@ -19,8 +19,7 @@ void CirclePadPro::receivePayload(Payload payload) {
// Convert to cycles
period = Scheduler::nsToCycles(periodNs);
scheduler.removeEvent(Scheduler::EventType::UpdateIR);
scheduler.addEvent(Scheduler::EventType::UpdateIR, scheduler.currentTimestamp + period);
scheduler.rescheduleEvent(Scheduler::EventType::UpdateIR, scheduler.currentTimestamp + period);
break;
}

View File

@@ -447,8 +447,7 @@ void Y2RService::startConversion(u32 messagePointer) {
// Remove any potential pending Y2R event and schedule a new one
Scheduler& scheduler = kernel.getScheduler();
scheduler.removeEvent(Scheduler::EventType::SignalY2R);
scheduler.addEvent(Scheduler::EventType::SignalY2R, scheduler.currentTimestamp + delayTicks);
scheduler.rescheduleEvent(Scheduler::EventType::SignalY2R, scheduler.currentTimestamp + delayTicks);
}
void Y2RService::isFinishedSendingYUV(u32 messagePointer) {