@@ -56,13 +56,15 @@ impl<T> Deref for FifoTask<T> {
56
56
/// It internally uses a linked list as the ready queue.
57
57
pub struct FifoScheduler < T > {
58
58
ready_queue : List < Arc < FifoTask < T > > > ,
59
+ num_tasks : usize ,
59
60
}
60
61
61
62
impl < T > FifoScheduler < T > {
62
63
/// Creates a new empty [`FifoScheduler`].
63
64
pub const fn new ( ) -> Self {
64
65
Self {
65
66
ready_queue : List :: new ( ) ,
67
+ num_tasks : 0 ,
66
68
}
67
69
}
68
70
/// get the name of scheduler
@@ -78,17 +80,21 @@ impl<T> BaseScheduler for FifoScheduler<T> {
78
80
79
81
fn add_task ( & mut self , task : Self :: SchedItem ) {
80
82
self . ready_queue . push_back ( task) ;
83
+ self . num_tasks += 1 ;
81
84
}
82
85
83
86
fn remove_task ( & mut self , task : & Self :: SchedItem ) -> Option < Self :: SchedItem > {
87
+ self . num_tasks -= 1 ;
84
88
unsafe { self . ready_queue . remove ( task) }
85
89
}
86
90
87
91
fn pick_next_task ( & mut self ) -> Option < Self :: SchedItem > {
92
+ self . num_tasks -= 1 ;
88
93
self . ready_queue . pop_front ( )
89
94
}
90
95
91
96
fn put_prev_task ( & mut self , prev : Self :: SchedItem , _preempt : bool ) {
97
+ self . num_tasks += 1 ;
92
98
self . ready_queue . push_back ( prev) ;
93
99
}
94
100
@@ -99,4 +105,8 @@ impl<T> BaseScheduler for FifoScheduler<T> {
99
105
fn set_priority ( & mut self , _task : & Self :: SchedItem , _prio : isize ) -> bool {
100
106
false
101
107
}
108
+
109
+ fn num_tasks ( & self ) -> usize {
110
+ self . num_tasks
111
+ }
102
112
}
0 commit comments