35 lines
922 B
Rust
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]
|
|
}
|