Skip to content

Commit

Permalink
added more scheduler events
Browse files Browse the repository at this point in the history
  • Loading branch information
cnvogelg committed Jan 25, 2025
1 parent 48006a7 commit 91982d2
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 11 deletions.
25 changes: 14 additions & 11 deletions amitools/vamos/schedule/scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ class Type(IntEnum):
WAITING_TASK = 1
ADD_TASK = 2
REMOVE_TASK = 3
WAKE_UP_TASK = 4
READY_TASK = 5

type: Type
task: TaskBase
Expand Down Expand Up @@ -123,6 +125,8 @@ def schedule(self):
if old_task.get_state() == TaskState.TS_RUN:
old_task.set_state(TaskState.TS_READY)
self.ready_tasks.append(old_task)
# report
self._report_event(SchedulerEvent.Type.READY_TASK, old_task)

old_task.save_ctx()

Expand Down Expand Up @@ -163,19 +167,15 @@ def _find_run_task(self):
def _make_current(self, task):
self.cur_task = task
# report via event
if self.event_hook:
event = SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task)
self.event_hook(event)
self._report_event(SchedulerEvent.Type.ACTIVE_TASK, task)

def wait_task(self, task):
"""set the given task into wait state"""
log_schedule.debug("wait_task: task %s", task.name)
self.waiting_tasks.append(task)
task.set_state(TaskState.TS_WAIT)
# report via event
if self.event_hook:
event = SchedulerEvent(SchedulerEvent.Type.WAITING_TASK, task)
self.event_hook(event)
self._report_event(SchedulerEvent.Type.WAITING_TASK, task)
self.reschedule()

def wake_up_task(self, task):
Expand All @@ -185,6 +185,8 @@ def wake_up_task(self, task):
# add to front
self.ready_tasks.insert(0, task)
task.set_state(TaskState.TS_READY)
# report via event
self._report_event(SchedulerEvent.Type.WAKE_UP_TASK, task)
# directly reschedule
self.reschedule()

Expand All @@ -199,9 +201,7 @@ def add_task(self, task):
task.config(self, self.config.slice_cycles)
log_schedule.info("add_task: %s", task.name)
# report via event
if self.event_hook:
event = SchedulerEvent(SchedulerEvent.Type.ADD_TASK, task)
self.event_hook(event)
self._report_event(SchedulerEvent.Type.ADD_TASK, task)
return True

def rem_task(self, task):
Expand All @@ -225,10 +225,13 @@ def rem_task(self, task):
task.set_state(TaskState.TS_REMOVED)
log_schedule.info("rem_task: %s", task.name)
# report via event
self._report_event(SchedulerEvent.Type.REMOVE_TASK, task)
return True

def _report_event(self, event, task):
if self.event_hook:
event = SchedulerEvent(SchedulerEvent.Type.REMOVE_TASK, task)
event = SchedulerEvent(event, task)
self.event_hook(event)
return True

def reschedule(self):
"""callback from tasks to reschedule"""
Expand Down
9 changes: 9 additions & 0 deletions test/unit/schedule_scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -259,6 +259,7 @@ def trap2(op, pc):
SchedulerEvent(SchedulerEvent.Type.ADD_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ADD_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.READY_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.REMOVE_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
Expand Down Expand Up @@ -385,6 +386,8 @@ def trap2(op, pc):
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.WAITING_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.WAKE_UP_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.READY_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.REMOVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
Expand Down Expand Up @@ -534,7 +537,9 @@ def task2_run(task):
SchedulerEvent(SchedulerEvent.Type.ADD_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ADD_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.READY_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.READY_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.REMOVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
Expand Down Expand Up @@ -582,7 +587,9 @@ def task2_run(task):
SchedulerEvent(SchedulerEvent.Type.ADD_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ADD_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.READY_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.READY_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.REMOVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
Expand Down Expand Up @@ -628,6 +635,8 @@ def task2_run(task):
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.WAITING_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.WAKE_UP_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.READY_TASK, task2),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.REMOVE_TASK, task1),
SchedulerEvent(SchedulerEvent.Type.ACTIVE_TASK, task2),
Expand Down

0 comments on commit 91982d2

Please sign in to comment.