@@ -1268,7 +1268,7 @@ impl RuntimeIntervals {
12681268 let mut metrics = RuntimeMetrics {
12691269 workers_count : self . runtime . num_workers ( ) ,
12701270 live_tasks_count : self . runtime . num_alive_tasks ( ) ,
1271- elapsed : now - self . started_at ,
1271+ elapsed : now. saturating_duration_since ( self . started_at ) ,
12721272 global_queue_depth : self . runtime . global_queue_depth ( ) ,
12731273 min_park_count : u64:: MAX ,
12741274 min_busy_duration : Duration :: from_secs ( 1000000000 ) ,
@@ -1281,7 +1281,7 @@ impl RuntimeIntervals {
12811281 let budget_forced_yields = self . runtime . budget_forced_yield_count ( ) ;
12821282 let io_driver_ready_events = self . runtime . io_driver_ready_count ( ) ;
12831283
1284- metrics. num_remote_schedules = num_remote_schedules - self . num_remote_schedules ;
1284+ metrics. num_remote_schedules = num_remote_schedules. saturating_sub ( self . num_remote_schedules ) ;
12851285 metrics. min_noop_count = u64:: MAX ;
12861286 metrics. min_steal_count = u64:: MAX ;
12871287 metrics. min_local_schedule_count = u64:: MAX ;
@@ -1291,8 +1291,8 @@ impl RuntimeIntervals {
12911291 metrics. mean_poll_duration_worker_min = Duration :: MAX ;
12921292 metrics. poll_time_histogram = vec ! [ 0 ; self . runtime. poll_time_histogram_num_buckets( ) ] ;
12931293 metrics. budget_forced_yield_count =
1294- budget_forced_yields - self . budget_forced_yield_count ;
1295- metrics. io_driver_ready_count = io_driver_ready_events - self . io_driver_ready_count ;
1294+ budget_forced_yields. saturating_sub ( self . budget_forced_yield_count ) ;
1295+ metrics. io_driver_ready_count = io_driver_ready_events. saturating_sub ( self . io_driver_ready_count ) ;
12961296
12971297 self . num_remote_schedules = num_remote_schedules;
12981298 self . budget_forced_yield_count = budget_forced_yields;
@@ -1506,7 +1506,7 @@ impl Worker {
15061506 ) ;
15071507
15081508 // Get the number of polls since last probe
1509- worker_polls_count = self . total_polls_count - worker_polls_count;
1509+ worker_polls_count = self . total_polls_count . saturating_sub ( worker_polls_count) ;
15101510
15111511 // Update the mean task poll duration if there were polls
15121512 if worker_polls_count > 0 {
@@ -1535,16 +1535,16 @@ impl Worker {
15351535 if worker_polls_count > 0 {
15361536 for ( bucket, cell) in metrics. poll_time_histogram . iter_mut ( ) . enumerate ( ) {
15371537 let new = rt. poll_time_histogram_bucket_count ( self . worker , bucket) ;
1538- let delta = new - self . poll_time_histogram [ bucket] ;
1538+ let delta = new. saturating_sub ( self . poll_time_histogram [ bucket] ) ;
15391539 self . poll_time_histogram [ bucket] = new;
15401540
1541- * cell += delta;
1541+ * cell = cell . saturating_add ( delta) ;
15421542 }
15431543 }
15441544
15451545 // Local scheduled tasks is an absolute value
15461546 let local_scheduled_tasks = rt. worker_local_queue_depth ( self . worker ) ;
1547- metrics. total_local_queue_depth += local_scheduled_tasks;
1547+ metrics. total_local_queue_depth = metrics . total_local_queue_depth . saturating_add ( local_scheduled_tasks) ;
15481548
15491549 if local_scheduled_tasks > metrics. max_local_queue_depth {
15501550 metrics. max_local_queue_depth = local_scheduled_tasks;
@@ -1574,7 +1574,7 @@ derived_metrics!(
15741574 unstable {
15751575 /// Returns the ratio of the [`RuntimeMetrics::total_polls_count`] to the [`RuntimeMetrics::total_noop_count`].
15761576 pub fn mean_polls_per_park( & self ) -> f64 {
1577- let total_park_count = self . total_park_count - self . total_noop_count;
1577+ let total_park_count = self . total_park_count. saturating_sub ( self . total_noop_count) ;
15781578 if total_park_count == 0 {
15791579 0.0
15801580 } else {
0 commit comments