makepad/libs/remesh/tests/bench.rs
Admin fbe877d746 Land glTF writers, remesh, PBR paint, and xatlas from rik2.
Animation/skin writers, COLOR_0, and the mesh tools the renderer uses.
2026-08-18 14:23:58 +02:00

68 lines
2.2 KiB
Rust

//! Perf measurement vs the reference numbers (run explicitly):
//! cargo test -p makepad-remesh --release --test bench -- --ignored --nocapture
//!
//! Bars: H100 reference totals 0.70s @512^3 (encode 0.52 + decode 0.17);
//! reference-on-this-mac (polyfilled CPU oracle) is far slower (36-238s @512).
mod common;
use common::{dump_tri_soup, faithc_ref_dir, FcDump};
use makepad_remesh::{decode, encode, EncodeOptions, TriangulationMode};
fn bench_asset(name: &str, res: u32, reps: usize) {
let Some(dir) = faithc_ref_dir() else { return };
let path = dir.join("dumps").join(format!("{name}_r{res}.bin"));
if !path.is_file() {
eprintln!("SKIP {name}_r{res}");
return;
}
let dump = FcDump::load(&path).unwrap();
let tris = dump_tri_soup(&dump);
let opts = EncodeOptions::default();
// warmup + best-of-reps (steady state, honest for a pipeline tool)
let mut enc_best = f64::INFINITY;
let mut dec_best = f64::INFINITY;
let mut k = 0;
let mut nf = 0;
for _ in 0..reps {
let t0 = std::time::Instant::now();
let tokens = encode(&tris, res, &opts);
let te = t0.elapsed().as_secs_f64();
let t1 = std::time::Instant::now();
let dec = decode(
res,
&tokens.voxel_indices,
&tokens.anchors,
&tokens.flux,
Some(&tokens.normals),
TriangulationMode::Auto,
);
let td = t1.elapsed().as_secs_f64();
enc_best = enc_best.min(te);
dec_best = dec_best.min(td);
k = tokens.voxel_indices.len();
nf = dec.faces.len();
}
println!(
"{name}_r{res}: tris={} K={k} faces={nf} encode={enc_best:.3}s decode={dec_best:.3}s total={:.3}s",
tris.len(),
enc_best + dec_best
);
}
#[test]
#[ignore = "perf: run explicitly"]
fn bench_all() {
println!("threads={}", makepad_csg_math::thread_pool::thread_count());
for (name, res, reps) in [
("corgi_traveller", 128u32, 5usize),
("light_bulb", 128, 5),
("cloth", 128, 5),
("pirateship", 128, 5),
("cloth", 512, 3),
("pirateship", 512, 3),
] {
bench_asset(name, res, reps);
}
}