1 #[path = "support/macros.rs"]
2 #[macro_use]
3 mod macros;
4 mod support;
5
6 use criterion::{criterion_group, criterion_main, Criterion};
7 use glam::Affine2;
8 use std::ops::Mul;
9 use support::*;
10
random_srt_affine2(rng: &mut PCG32) -> Affine211 pub fn random_srt_affine2(rng: &mut PCG32) -> Affine2 {
12 Affine2::from_scale_angle_translation(
13 random_nonzero_vec2(rng),
14 random_radians(rng),
15 random_vec2(rng),
16 )
17 }
18
19 bench_unop!(affine2_inverse, "affine2 inverse", op => inverse, from => random_srt_affine2);
20 bench_binop!(
21 affine2_transform_point2,
22 "affine2 transform point2",
23 op => transform_point2,
24 from1 => random_srt_affine2,
25 from2 => random_vec2
26 );
27
28 bench_binop!(
29 affine2_transform_vector2,
30 "affine2 transform vector2",
31 op => transform_vector2,
32 from1 => random_srt_affine2,
33 from2 => random_vec2
34 );
35 bench_binop!(affine2_mul_affine2, "affine2 mul affine2", op => mul, from => random_srt_affine2);
36 bench_binop!(affine2_mul_mat3, "affine2 mul mat3", op => mul, from1 => random_srt_affine2, from2 => random_srt_mat3);
37 bench_binop!(mat3_mul_affine2, "mat3 mul affine2", op => mul, from1 => random_srt_mat3, from2 => random_srt_affine2);
38
affine2_from_srt(c: &mut Criterion)39 pub fn affine2_from_srt(c: &mut Criterion) {
40 use glam::Vec2;
41 const SIZE: usize = 1 << 13;
42 let mut rng = support::PCG32::default();
43 let inputs = criterion::black_box(
44 (0..SIZE)
45 .map(|_| {
46 (
47 random_nonzero_vec2(&mut rng),
48 random_radians(&mut rng),
49 random_vec2(&mut rng),
50 )
51 })
52 .collect::<Vec<(Vec2, f32, Vec2)>>(),
53 );
54 let mut outputs = vec![Affine2::default(); SIZE];
55 let mut i = 0;
56 c.bench_function("affine2 from srt", |b| {
57 b.iter(|| {
58 i = (i + 1) & (SIZE - 1);
59 unsafe {
60 let data = inputs.get_unchecked(i);
61 *outputs.get_unchecked_mut(i) =
62 Affine2::from_scale_angle_translation(data.0, data.1, data.2)
63 }
64 })
65 });
66 }
67
68 criterion_group!(
69 benches,
70 affine2_inverse,
71 affine2_transform_point2,
72 affine2_transform_vector2,
73 affine2_mul_affine2,
74 affine2_mul_mat3,
75 mat3_mul_affine2,
76 affine2_from_srt,
77 );
78
79 criterion_main!(benches);
80