summaryrefslogtreecommitdiff
path: root/rsvg/benches/box_blur.rs
diff options
context:
space:
mode:
authorMarge Bot <marge-bot@gnome.org>2023-04-25 23:30:10 +0000
committerMarge Bot <marge-bot@gnome.org>2023-04-25 23:30:10 +0000
commit30567b3eac0148e3e95f5dd011ff76bda5000a99 (patch)
tree7d5c56dc2b20f91ccc77aee4dad07830e7eb429a /rsvg/benches/box_blur.rs
parentd597831ff93b09cc41ce4768a833bc6407c95184 (diff)
parent7608c94036d7a44296a7e135f42e84aed20afeb7 (diff)
downloadlibrsvg-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.rs61
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);