Skip to content

Commit 6ca9626

Browse files
committed
Add num tasks in scheduler
1 parent c8d25d9 commit 6ca9626

File tree

4 files changed

+32
-3
lines changed

4 files changed

+32
-3
lines changed

src/cfs.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -187,4 +187,8 @@ impl<T> BaseScheduler for CFScheduler<T> {
187187
false
188188
}
189189
}
190+
191+
fn num_tasks(&self) -> usize {
192+
self.ready_queue.len()
193+
}
190194
}

src/fifo.rs

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,15 @@ impl<T> Deref for FifoTask<T> {
5656
/// It internally uses a linked list as the ready queue.
5757
pub struct FifoScheduler<T> {
5858
ready_queue: List<Arc<FifoTask<T>>>,
59+
num_tasks: usize,
5960
}
6061

6162
impl<T> FifoScheduler<T> {
6263
/// Creates a new empty [`FifoScheduler`].
6364
pub const fn new() -> Self {
6465
Self {
6566
ready_queue: List::new(),
67+
num_tasks: 0,
6668
}
6769
}
6870
/// get the name of scheduler
@@ -77,18 +79,30 @@ impl<T> BaseScheduler for FifoScheduler<T> {
7779
fn init(&mut self) {}
7880

7981
fn add_task(&mut self, task: Self::SchedItem) {
82+
self.num_tasks += 1;
8083
self.ready_queue.push_back(task);
8184
}
8285

8386
fn remove_task(&mut self, task: &Self::SchedItem) -> Option<Self::SchedItem> {
84-
unsafe { self.ready_queue.remove(task) }
87+
let res = unsafe { self.ready_queue.remove(task) };
88+
if res.is_some() {
89+
// Only decrement the number of tasks if the task is removed.
90+
self.num_tasks -= 1;
91+
}
92+
res
8593
}
8694

8795
fn pick_next_task(&mut self) -> Option<Self::SchedItem> {
88-
self.ready_queue.pop_front()
96+
let res = self.ready_queue.pop_front();
97+
if res.is_some() {
98+
// Only decrement the number of tasks if the task is picked.
99+
self.num_tasks -= 1;
100+
}
101+
res
89102
}
90103

91104
fn put_prev_task(&mut self, prev: Self::SchedItem, _preempt: bool) {
105+
self.num_tasks += 1;
92106
self.ready_queue.push_back(prev);
93107
}
94108

@@ -99,4 +113,8 @@ impl<T> BaseScheduler for FifoScheduler<T> {
99113
fn set_priority(&mut self, _task: &Self::SchedItem, _prio: isize) -> bool {
100114
false
101115
}
116+
117+
fn num_tasks(&self) -> usize {
118+
self.num_tasks
119+
}
102120
}

src/lib.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,9 @@ pub trait BaseScheduler {
6363
/// `current` is the current running task.
6464
fn task_tick(&mut self, current: &Self::SchedItem) -> bool;
6565

66-
/// set priority for a task
66+
/// Set priority for a task.
6767
fn set_priority(&mut self, task: &Self::SchedItem, prio: isize) -> bool;
68+
69+
/// Returns the number of tasks in the scheduler.
70+
fn num_tasks(&self) -> usize;
6871
}

src/round_robin.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -110,4 +110,8 @@ impl<T, const S: usize> BaseScheduler for RRScheduler<T, S> {
110110
fn set_priority(&mut self, _task: &Self::SchedItem, _prio: isize) -> bool {
111111
false
112112
}
113+
114+
fn num_tasks(&self) -> usize {
115+
self.ready_queue.len()
116+
}
113117
}

0 commit comments

Comments
 (0)