pub fn format_time_compact(time: re_log_types::Time) -> String {
let ns = time.nanos_since_epoch();
let relative_ns = ns % 1_000_000_000;
let is_whole_second = relative_ns == 0;
if is_whole_second {
if let Some(datetime) = time.to_datetime() {
let is_whole_minute = ns % 60_000_000_000 == 0;
let time_format = if time.is_exactly_midnight() {
"[year]-[month]-[day]Z"
} else if is_whole_minute {
"[hour]:[minute]Z"
} else {
"[hour]:[minute]:[second]Z"
};
let parsed_format = time::format_description::parse(time_format).unwrap();
return datetime.format(&parsed_format).unwrap();
}
re_log_types::Duration::from_nanos(ns).to_string()
} else {
let ms = relative_ns as f64 * 1e-6;
if relative_ns % 1_000_000 == 0 {
format!("{ms:+.0} ms")
} else if relative_ns % 100_000 == 0 {
format!("{ms:+.1} ms")
} else if relative_ns % 10_000 == 0 {
format!("{ms:+.2} ms")
} else if relative_ns % 1_000 == 0 {
format!("{ms:+.3} ms")
} else if relative_ns % 100 == 0 {
format!("{ms:+.4} ms")
} else if relative_ns % 10 == 0 {
format!("{ms:+.5} ms")
} else {
format!("{ms:+.6} ms")
}
}
}
pub fn next_grid_tick_magnitude_ns(spacing_ns: i64) -> i64 {
if spacing_ns <= 1_000_000_000 {
spacing_ns * 10 } else if spacing_ns == 10_000_000_000 {
spacing_ns * 6 } else if spacing_ns == 60_000_000_000 {
spacing_ns * 10 } else if spacing_ns == 600_000_000_000 {
spacing_ns * 6 } else if spacing_ns == 60 * 60 * 1_000_000_000 {
spacing_ns * 12 } else if spacing_ns == 12 * 60 * 60 * 1_000_000_000 {
spacing_ns * 2 } else {
spacing_ns.checked_mul(10).unwrap_or(spacing_ns) }
}