Files
ai-app/scripts/rigs/ui-profile/src/stats.rs
T

35 lines
922 B
Rust

use std::time::Duration;
pub fn pct(sorted: &mut [Duration], p: f64) -> f64 {
if sorted.is_empty() {
return 0.0;
}
sorted.sort_unstable();
let i = ((sorted.len() as f64 - 1.0) * p).round() as usize;
sorted[i].as_secs_f64() * 1000.0
}
pub const CPU_BUDGET: Duration = Duration::from_micros(8_333);
pub fn summarise(name: &str, samples: &[Duration]) {
let mut v = samples.to_vec();
let over_budget = v.iter().filter(|d| **d > CPU_BUDGET).count();
println!(
" {name:16} n={:<5} p50 {:.2}ms p90 {:.2}ms p99 {:.2}ms worst {:.2}ms \
over-8.3ms {over_budget}",
v.len(),
pct(&mut v, 0.5),
pct(&mut v, 0.9),
pct(&mut v, 0.99),
pct(&mut v, 1.0),
);
}
pub fn pct_u64(v: &mut [u64], p: f64) -> u64 {
if v.is_empty() {
return 0;
}
v.sort_unstable();
v[(((v.len() - 1) as f64) * p).round() as usize]
}