Skip to content

Commit b4628d2

Browse files
committed
Add exemplary benchmark for quick testing
1 parent 8b598ec commit b4628d2

4 files changed

Lines changed: 144 additions & 3 deletions

File tree

fidget/Cargo.toml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -72,7 +72,11 @@ gui = ["dep:fidget-gui"]
7272
wgpu = ["dep:fidget-wgpu"]
7373

7474
[[bench]]
75-
name = "render"
75+
name = "pixel"
76+
harness = false
77+
78+
[[bench]]
79+
name = "voxel"
7680
harness = false
7781

7882
[[bench]]

fidget/benches/mesh.rs

Lines changed: 43 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,5 +63,47 @@ pub fn colonnade_mesh(c: &mut Criterion) {
6363
});
6464
}
6565

66-
criterion_group!(benches, colonnade_octree_thread_sweep, colonnade_mesh);
66+
pub fn colonnade_mesh_exemplary(c: &mut Criterion) {
67+
let (ctx, root) = fidget::Context::from_text(COLONNADE.as_bytes()).unwrap();
68+
let shape_vm = &fidget::vm::VmShape::new(&ctx, root)
69+
.unwrap()
70+
.try_into()
71+
.unwrap();
72+
let cfg = fidget::mesh::Settings {
73+
depth: 8,
74+
..Default::default()
75+
};
76+
let cfg_ref = &cfg;
77+
78+
let mut group = c.benchmark_group("colonnade-mesh-exemplary");
79+
group.bench_function("vm", move |b| {
80+
b.iter(|| {
81+
let octree =
82+
&fidget::mesh::Octree::build(shape_vm, cfg_ref).unwrap();
83+
black_box(octree.walk_dual())
84+
})
85+
});
86+
87+
#[cfg(feature = "jit")]
88+
{
89+
let shape_jit = &fidget::jit::JitShape::new(&ctx, root)
90+
.unwrap()
91+
.try_into()
92+
.unwrap();
93+
group.bench_function("jit", move |b| {
94+
b.iter(|| {
95+
let octree =
96+
&fidget::mesh::Octree::build(shape_jit, cfg_ref).unwrap();
97+
black_box(octree.walk_dual())
98+
})
99+
});
100+
}
101+
}
102+
103+
criterion_group!(
104+
benches,
105+
colonnade_octree_thread_sweep,
106+
colonnade_mesh,
107+
colonnade_mesh_exemplary
108+
);
67109
criterion_main!(benches);
Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,39 @@ use std::hint::black_box;
77

88
const PROSPERO: &str = include_str!("../../models/prospero.vm");
99

10+
pub fn prospero_exemplary(c: &mut Criterion) {
11+
let (ctx, root) = fidget::Context::from_text(PROSPERO.as_bytes()).unwrap();
12+
let shape_vm =
13+
&BoundShape::try_from(fidget::vm::VmShape::new(&ctx, root).unwrap())
14+
.unwrap();
15+
16+
let mut group = c.benchmark_group("prospero-exemplary");
17+
let cfg = &fidget::raster::pixel::RenderConfig {
18+
image_size: fidget::render::ImageSize::from(1024),
19+
..Default::default()
20+
};
21+
group.bench_function("vm", move |b| {
22+
b.iter(|| {
23+
let tape = shape_vm.clone();
24+
black_box(cfg.run(tape))
25+
})
26+
});
27+
28+
#[cfg(feature = "jit")]
29+
{
30+
let shape_jit = &BoundShape::try_from(
31+
fidget::jit::JitShape::new(&ctx, root).unwrap(),
32+
)
33+
.unwrap();
34+
group.bench_function("jit", move |b| {
35+
b.iter(|| {
36+
let tape = shape_jit.clone();
37+
black_box(cfg.run(tape))
38+
})
39+
});
40+
}
41+
}
42+
1043
pub fn prospero_size_sweep(c: &mut Criterion) {
1144
let (ctx, root) = fidget::Context::from_text(PROSPERO.as_bytes()).unwrap();
1245
let shape_vm =
@@ -104,5 +137,10 @@ pub fn prospero_thread_sweep(c: &mut Criterion) {
104137
}
105138
}
106139

107-
criterion_group!(benches, prospero_size_sweep, prospero_thread_sweep);
140+
criterion_group!(
141+
benches,
142+
prospero_size_sweep,
143+
prospero_thread_sweep,
144+
prospero_exemplary,
145+
);
108146
criterion_main!(benches);

fidget/benches/voxel.rs

Lines changed: 57 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
use criterion::{Criterion, criterion_group, criterion_main};
2+
use std::hint::black_box;
3+
4+
const COLONNADE: &str = include_str!("../../models/colonnade.vm");
5+
6+
pub fn colonnade_voxel_exemplary(c: &mut Criterion) {
7+
let (ctx, root) = fidget::Context::from_text(COLONNADE.as_bytes()).unwrap();
8+
let vars = Default::default();
9+
let shape_vm = &fidget::vm::VmShape::new(&ctx, root).unwrap();
10+
let shape_vm = shape_vm.bind(&vars).unwrap();
11+
12+
let mut group = c.benchmark_group("colonnade-voxel-exemplary");
13+
14+
// Pick the standard scale / pitch / roll to generate a nice image
15+
let s = 1.0 / 0.7;
16+
let scale = nalgebra::Scale3::new(s, s, s);
17+
let pitch = nalgebra::Rotation3::new(
18+
nalgebra::Vector3::x() * 60.0 * std::f32::consts::PI / 180.0,
19+
);
20+
let roll = nalgebra::Rotation3::new(
21+
nalgebra::Vector3::z() * 30.0 * std::f32::consts::PI / 180.0,
22+
);
23+
let perspective = 0.3;
24+
let mut camera = nalgebra::Transform3::identity();
25+
*camera.matrix_mut().get_mut((3, 2)).unwrap() = perspective;
26+
let t = roll.to_homogeneous()
27+
* pitch.to_homogeneous()
28+
* scale.to_homogeneous()
29+
* camera.to_homogeneous();
30+
31+
let cfg = &fidget::raster::voxel::RenderConfig {
32+
world_to_model: t,
33+
image_size: fidget::render::VoxelSize::from(1024),
34+
..Default::default()
35+
};
36+
group.bench_function("vm", move |b| {
37+
b.iter(|| {
38+
let tape = shape_vm.clone();
39+
black_box(cfg.run(tape))
40+
})
41+
});
42+
43+
#[cfg(feature = "jit")]
44+
{
45+
let shape_jit = fidget::jit::JitShape::new(&ctx, root).unwrap();
46+
let shape_jit = shape_jit.bind(&vars).unwrap();
47+
group.bench_function("jit", move |b| {
48+
b.iter(|| {
49+
let tape = shape_jit.clone();
50+
black_box(cfg.run(tape))
51+
})
52+
});
53+
}
54+
}
55+
56+
criterion_group!(benches, colonnade_voxel_exemplary);
57+
criterion_main!(benches);

0 commit comments

Comments
 (0)