@@ -3,10 +3,13 @@ use std::{
33 time:: Duration ,
44} ;
55
6+ use crate :: clock:: Timestamp ;
7+
68struct TaskState < T > {
79 task : T ,
810 subtasks : usize ,
911 cpu_time : Duration ,
12+ start_time : Timestamp ,
1013}
1114
1215pub struct Subtask {
@@ -34,7 +37,12 @@ impl<T> CpuTaskQueue<T> {
3437 }
3538 }
3639
37- pub fn schedule_task ( & mut self , task : T , durations : Vec < Duration > ) -> ( u64 , Vec < Subtask > ) {
40+ pub fn schedule_task (
41+ & mut self ,
42+ task : T ,
43+ durations : Vec < Duration > ,
44+ start_time : Timestamp ,
45+ ) -> ( u64 , Vec < Subtask > ) {
3846 assert ! ( !durations. is_empty( ) ) ;
3947
4048 let task_id = self . next_task_id ;
@@ -45,6 +53,7 @@ impl<T> CpuTaskQueue<T> {
4553 task,
4654 subtasks : durations. len ( ) ,
4755 cpu_time : durations. iter ( ) . sum ( ) ,
56+ start_time,
4857 } ,
4958 ) ;
5059
@@ -69,7 +78,7 @@ impl<T> CpuTaskQueue<T> {
6978 pub fn complete_subtask (
7079 & mut self ,
7180 subtask : Subtask ,
72- ) -> ( Option < ( T , Duration ) > , Option < Subtask > ) {
81+ ) -> ( Option < ( T , Duration , Timestamp ) > , Option < Subtask > ) {
7382 self . available_cores = self . available_cores . map ( |c| c + 1 ) ;
7483
7584 let task = self
@@ -80,7 +89,7 @@ impl<T> CpuTaskQueue<T> {
8089 let finished_task = if task. subtasks == 0 {
8190 self . tasks
8291 . remove ( & subtask. task_id )
83- . map ( |s| ( s. task , s. cpu_time ) )
92+ . map ( |s| ( s. task , s. cpu_time , s . start_time ) )
8493 } else {
8594 None
8695 } ;
0 commit comments