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