10 auto& cpu_sched = GetCurrentCpuSched();
12 bool need_preempt =
false;
18 cpu_sched.local_tick++;
20 auto* current = GetCurrentTask();
23 while (!cpu_sched.sleeping_tasks.empty()) {
24 auto* task = cpu_sched.sleeping_tasks.top();
27 if (task->sched_info.wake_tick > cpu_sched.local_tick) {
33 cpu_sched.sleeping_tasks.pop();
38 cpu_sched.schedulers[
static_cast<uint8_t
>(task->policy)].get();
40 scheduler->Enqueue(task);
47 current->sched_info.total_runtime++;
50 if (current->sched_info.time_slice_remaining > 0) {
51 current->sched_info.time_slice_remaining--;
56 cpu_sched.schedulers[
static_cast<uint8_t
>(current->policy)].get();
60 need_preempt = scheduler->OnTick(current);
64 if (!need_preempt && current->sched_info.time_slice_remaining == 0) {
70 if (need_preempt && cpu_sched.scheduler_started) {