further optimize uptime retrival

Try and minimize expensive operations (e.g., divisions and allocations) to hopefully get a
*consistent* measurable performance improvement. In my testing this brings the get_current
function duration from > 1.2600 µs to < 1.2400 µs.
This commit is contained in:
raf 2025-01-26 01:06:02 +03:00
parent 592fb58474
commit d0f88b179c
No known key found for this signature in database
GPG key ID: EED98D11B85A2819

View file

@ -5,16 +5,29 @@ pub fn get_current() -> Result<String, io::Error> {
let info = sysinfo().map_err(|e| io::Error::new(io::ErrorKind::Other, e))?;
let uptime_seconds = info.uptime().as_secs();
let total_minutes = uptime_seconds / 60;
let days = total_minutes / (60 * 24);
let hours = (total_minutes % (60 * 24)) / 60;
let minutes = total_minutes % 60;
let days = uptime_seconds / (60 * 60 * 24);
let hours = (uptime_seconds / 3600) % 24;
let minutes = (uptime_seconds / 60) % 60;
let parts = [(days, "day"), (hours, "hour"), (minutes, "minute")]
.iter()
.filter(|&&(value, _)| value > 0)
.map(|&(value, label)| format!("{value} {label}{}", if value > 1 { "s" } else { "" }))
.collect::<Vec<_>>();
let mut result = String::new();
if days > 0 {
result.push_str(&format!("{days} day{}", if days > 1 { "s" } else { "" }));
}
if hours > 0 {
if !result.is_empty() {
result.push_str(", ");
}
result.push_str(&format!("{hours} hour{}", if hours > 1 { "s" } else { "" }));
}
if minutes > 0 {
if !result.is_empty() {
result.push_str(", ");
}
result.push_str(&format!(
"{minutes} minute{}",
if minutes > 1 { "s" } else { "" }
));
}
Ok(parts.join(", "))
Ok(result)
}