33 lines
949 B
Rust

use criterion::*;
use renderer::{
hitable::Hit, material::Lambertian, ray::Ray, sphere::Sphere, texture::ConstantTexture,
vec3::Vec3,
};
fn criterion_benchmark(c: &mut Criterion) {
let sphere = Sphere::new(
Vec3::new(0., 0., 0.),
1.,
Lambertian::new(ConstantTexture::new([1., 0., 0.])),
);
let rays = vec![
// Hit
Ray::new([0., 0., -2.], [0., 0., 1.], 0.),
// Miss
Ray::new([0., 0., -2.], [0., 0., -1.], 0.),
];
let mut group = c.benchmark_group("sphere");
group.throughput(Throughput::Elements(1));
group.bench_with_input(BenchmarkId::new("Sphere", "hit"), &rays[0], |b, r| {
b.iter(|| sphere.hit(*r, 0., 1.))
});
group.bench_with_input(BenchmarkId::new("Sphere", "miss"), &rays[1], |b, r| {
b.iter(|| sphere.hit(*r, 0., 1.))
});
group.finish()
}
criterion_group!(benches, criterion_benchmark);
criterion_main!(benches);