#[path = "support/macros.rs"] #[macro_use] mod macros; mod support; use criterion::{criterion_group, criterion_main, Criterion}; use glam::Affine2; use std::ops::Mul; use support::*; pub fn random_srt_affine2(rng: &mut PCG32) -> Affine2 { Affine2::from_scale_angle_translation( random_nonzero_vec2(rng), random_radians(rng), random_vec2(rng), ) } bench_unop!(affine2_inverse, "affine2 inverse", op => inverse, from => random_srt_affine2); bench_binop!( affine2_transform_point2, "affine2 transform point2", op => transform_point2, from1 => random_srt_affine2, from2 => random_vec2 ); bench_binop!( affine2_transform_vector2, "affine2 transform vector2", op => transform_vector2, from1 => random_srt_affine2, from2 => random_vec2 ); bench_binop!(affine2_mul_affine2, "affine2 mul affine2", op => mul, from => random_srt_affine2); bench_binop!(affine2_mul_mat3, "affine2 mul mat3", op => mul, from1 => random_srt_affine2, from2 => random_srt_mat3); bench_binop!(mat3_mul_affine2, "mat3 mul affine2", op => mul, from1 => random_srt_mat3, from2 => random_srt_affine2); pub fn affine2_from_srt(c: &mut Criterion) { use glam::Vec2; const SIZE: usize = 1 << 13; let mut rng = support::PCG32::default(); let inputs = criterion::black_box( (0..SIZE) .map(|_| { ( random_nonzero_vec2(&mut rng), random_radians(&mut rng), random_vec2(&mut rng), ) }) .collect::>(), ); let mut outputs = vec![Affine2::default(); SIZE]; let mut i = 0; c.bench_function("affine2 from srt", |b| { b.iter(|| { i = (i + 1) & (SIZE - 1); unsafe { let data = inputs.get_unchecked(i); *outputs.get_unchecked_mut(i) = Affine2::from_scale_angle_translation(data.0, data.1, data.2); } }); }); } criterion_group!( benches, affine2_inverse, affine2_transform_point2, affine2_transform_vector2, affine2_mul_affine2, affine2_mul_mat3, mat3_mul_affine2, affine2_from_srt, ); criterion_main!(benches);