diff options
author | Marge Bot <marge-bot@gnome.org> | 2023-04-25 23:30:10 +0000 |
---|---|---|
committer | Marge Bot <marge-bot@gnome.org> | 2023-04-25 23:30:10 +0000 |
commit | 30567b3eac0148e3e95f5dd011ff76bda5000a99 (patch) | |
tree | 7d5c56dc2b20f91ccc77aee4dad07830e7eb429a /rsvg/benches/box_blur.rs | |
parent | d597831ff93b09cc41ce4768a833bc6407c95184 (diff) | |
parent | 7608c94036d7a44296a7e135f42e84aed20afeb7 (diff) | |
download | librsvg-30567b3eac0148e3e95f5dd011ff76bda5000a99.tar.gz |
Merge branch 'wip/sophie-h/workspace' into 'main'
meta: Move lib and bins into separate crates
Closes #950
See merge request GNOME/librsvg!822
Diffstat (limited to 'rsvg/benches/box_blur.rs')
-rw-r--r-- | rsvg/benches/box_blur.rs | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/rsvg/benches/box_blur.rs b/rsvg/benches/box_blur.rs new file mode 100644 index 00000000..876449ad --- /dev/null +++ b/rsvg/benches/box_blur.rs @@ -0,0 +1,61 @@ +use criterion::{criterion_group, criterion_main, BenchmarkId, Criterion}; + +use rsvg::{ + surface_utils::shared_surface::{ + AlphaOnly, Horizontal, NotAlphaOnly, SharedImageSurface, SurfaceType, Vertical, + }, + IRect, +}; + +const SURFACE_SIDE: i32 = 512; +const BOUNDS: IRect = IRect { + x0: 64, + y0: 64, + x1: 64 + 64, + y1: 64 + 64, +}; + +fn bench_box_blur(c: &mut Criterion) { + let mut group = c.benchmark_group("box_blur 9"); + + for input in [(false, false), (false, true), (true, false), (true, true)].iter() { + group.bench_with_input( + BenchmarkId::from_parameter(format!("{:?}", input)), + &input, + |b, &(vertical, alpha_only)| { + let surface_type = if *alpha_only { + SurfaceType::AlphaOnly + } else { + SurfaceType::SRgb + }; + let input_surface = + SharedImageSurface::empty(SURFACE_SIDE, SURFACE_SIDE, surface_type).unwrap(); + + let mut output_surface = + cairo::ImageSurface::create(cairo::Format::ARgb32, SURFACE_SIDE, SURFACE_SIDE) + .unwrap(); + const KERNEL_SIZE: usize = 9; + + let f = match (vertical, alpha_only) { + (true, true) => SharedImageSurface::box_blur_loop::<Vertical, AlphaOnly>, + (true, false) => SharedImageSurface::box_blur_loop::<Vertical, NotAlphaOnly>, + (false, true) => SharedImageSurface::box_blur_loop::<Horizontal, AlphaOnly>, + (false, false) => SharedImageSurface::box_blur_loop::<Horizontal, NotAlphaOnly>, + }; + + b.iter(|| { + f( + &input_surface, + &mut output_surface, + BOUNDS, + KERNEL_SIZE, + KERNEL_SIZE / 2, + ) + }) + }, + ); + } +} + +criterion_group!(benches, bench_box_blur); +criterion_main!(benches); |