[librsvg: 3/12] Add benchmarks for operations on surface_utils::Pixel
- From: Federico Mena Quintero <federico src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [librsvg: 3/12] Add benchmarks for operations on surface_utils::Pixel
- Date: Tue, 13 Oct 2020 14:03:23 +0000 (UTC)
commit 01388f84476ed306907653c0852c648ab35c437c
Author: Sven Neumann <sven svenfoo org>
Date: Mon Oct 12 12:19:11 2020 +0200
Add benchmarks for operations on surface_utils::Pixel
rsvg_internals/Cargo.toml | 4 +++
rsvg_internals/benches/pixel_ops.rs | 57 +++++++++++++++++++++++++++++++++++++
2 files changed, 61 insertions(+)
---
diff --git a/rsvg_internals/Cargo.toml b/rsvg_internals/Cargo.toml
index f049391b..f46ee272 100644
--- a/rsvg_internals/Cargo.toml
+++ b/rsvg_internals/Cargo.toml
@@ -74,6 +74,10 @@ harness = false
name = "pixel_iterators"
harness = false
+[[bench]]
+name = "pixel_ops"
+harness = false
+
[[bench]]
name = "srgb"
harness = false
diff --git a/rsvg_internals/benches/pixel_ops.rs b/rsvg_internals/benches/pixel_ops.rs
new file mode 100644
index 00000000..e4cee1e6
--- /dev/null
+++ b/rsvg_internals/benches/pixel_ops.rs
@@ -0,0 +1,57 @@
+use criterion::{black_box, criterion_group, criterion_main, Criterion};
+
+use rsvg_internals::surface_utils::Pixel;
+
+const OTHER: Pixel = Pixel {
+ r: 0x10,
+ g: 0x20,
+ b: 0x30,
+ a: 0x40,
+};
+const N: usize = 1024;
+
+fn make_pixels(n: usize) -> Vec<Pixel> {
+ (0..n)
+ .map(|i| Pixel {
+ r: (i / 2) as u8,
+ g: (i / 3) as u8,
+ b: (i / 4) as u8,
+ a: i as u8,
+ })
+ .collect()
+}
+
+fn bench_op<F>(pixels: &[Pixel], op: F)
+where
+ F: Fn(&Pixel) -> Pixel,
+{
+ let result: Vec<Pixel> = pixels.iter().map(op).collect();
+ black_box(result);
+}
+
+fn bench_pixel_ops(c: &mut Criterion) {
+ c.bench_function("pixel_diff", |b| {
+ let pixels = black_box(make_pixels(N));
+ let other = black_box(OTHER);
+ b.iter(|| bench_op(&pixels, |pixel| pixel.diff(&other)))
+ });
+
+ c.bench_function("pixel_to_mask", |b| {
+ let pixels = black_box(make_pixels(N));
+ let opacity = black_box(0x70);
+ b.iter(|| bench_op(&pixels, |pixel| pixel.to_mask(opacity)))
+ });
+
+ c.bench_function("pixel_premultiply", |b| {
+ let pixels = black_box(make_pixels(N));
+ b.iter(|| bench_op(&pixels, |pixel| pixel.premultiply()))
+ });
+
+ c.bench_function("pixel_unpremultiply", |b| {
+ let pixels = black_box(make_pixels(N));
+ b.iter(|| bench_op(&pixels, |pixel| pixel.unpremultiply()))
+ });
+}
+
+criterion_group!(benches, bench_pixel_ops);
+criterion_main!(benches);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]