Added benchmarks and fixed a parallelism bug

This commit is contained in:
connor committed 2026-10-14 19:12:48 -04:00
1 parent d61552c33c
commit d08bc33e8d
19 files changed
+758 -27

No files matched your search

+20
View File
@@ -109,6 +109,7 @@ fn render(
},
appearance: file.appearance(),
read_radiance: false,
profile: timings.is_some(),
};
let start = Instant::now();
@@ -121,6 +122,7 @@ fn render(
let loading = start.elapsed();
let mut frame_times = Vec::new();
let mut pass_times = Vec::new();
let mut frame = None;
for _ in 0..timings.unwrap_or(1).max(1) {
let start = Instant::now();
@@ -129,6 +131,7 @@ fn render(
.and_then(|p| p.wait())
.map_err(|e| e.to_string())?;
frame_times.push(start.elapsed().as_secs_f64() * 1e3);
pass_times.extend(rendered.timings);
frame = Some(rendered);
}
let frame = frame.expect("at least one frame");
@@ -153,6 +156,23 @@ fn render(
warm.len()
);
}
// GPU time per pass, median over the frames after the first.
if pass_times.len() > 1 {
let median = |f: fn(&resolved::gpu::profile::PassTimings) -> f64| {
let mut v: Vec<f64> = pass_times[1..].iter().map(f).collect();
v.sort_by(f64::total_cmp);
v[v.len() / 2]
};
println!(
"gpu bodies {:.3} ms, mesh {:.3} ms, sensor {:.3} ms, first to last {:.3} ms (medians)",
median(|t| t.bodies),
median(|t| t.mesh),
median(|t| t.sensor),
median(|t| t.total)
);
} else if pass_times.is_empty() {
println!("gpu no pass timings: this adapter has no timestamp queries");
}
}
let detector = &renderer.camera().detector;
if let Some(out) = out {