Added benchmarks and fixed a parallelism bug
This commit is contained in:
1 parent
d61552c33c
commit
d08bc33e8d
19 files changed
+758
-27
No files matched your search
@@ -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 {
|
||||
|
||||
Reference in new issue
Block a user