Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 4 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ members = ["path"]

[dependencies]
arrayvec = { version = "0.7", default-features = false }
bytemuck = { version = "1.24", features = ["aarch64_simd"] }
bytemuck = { version = "1.24", features = ["aarch64_simd", "derive"] }
cfg-if = "1"
log = "0.4"
png = { version = "0.18", optional = true }
Expand All @@ -37,3 +37,6 @@ simd = []

# Allows loading and saving `Pixmap` as PNG.
png-format = ["std", "dep:png"]

# Enables 16-bit per channel (RGBA64 / 64bpp) color pipeline support.
16bpc = []
133 changes: 113 additions & 20 deletions benches/Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

11 changes: 11 additions & 0 deletions benches/src/blend.rs
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,17 @@ fn fill_tiny_skia(blend_mode: tiny_skia::BlendMode, bencher: &mut Bencher) {
pb.finish().unwrap()
};

#[cfg(feature = "16bpc")]
if crate::is_16bpc() {
let mut pixmap = PixmapU16::new(1000, 1000).unwrap();
pixmap.fill_path(&path1, &paint1, FillRule::Winding, Transform::identity(), None);

bencher.iter(|| {
pixmap.fill_path(&path2, &paint2, FillRule::Winding, Transform::identity(), None);
});
return;
}

let mut pixmap = Pixmap::new(1000, 1000).unwrap();
pixmap.fill_path(&path1, &paint1, FillRule::Winding, Transform::identity(), None);

Expand Down
21 changes: 21 additions & 0 deletions benches/src/clip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,27 @@ fn do_clip_tiny_skia(aa: bool, bencher: &mut Bencher) {

let path = PathBuilder::from_rect(Rect::from_xywh(0.0, 0.0, 1000.0, 1000.0).unwrap());

#[cfg(feature = "16bpc")]
if crate::is_16bpc() {
let mut pixmap = PixmapU16::new(1000, 1000).unwrap();
bencher.iter(|| {
let clip_path = {
let mut pb = PathBuilder::new();
pb.push_rect(Rect::from_xywh(100.0, 100.0, 800.0, 800.0).unwrap());
pb.push_rect(Rect::from_xywh(300.0, 300.0, 400.0, 400.0).unwrap());
pb.finish().unwrap()
};

let clip_path = clip_path.transform(Transform::from_row(1.0, -0.5, 0.0, 1.0, 0.0, 300.0)).unwrap();

let mut mask = Mask::new(1000, 1000).unwrap();
mask.fill_path(&clip_path, FillRule::EvenOdd, aa, Transform::identity());

pixmap.fill_path(&path, &paint, FillRule::Winding, Transform::identity(), Some(&mask));
});
return;
}

let mut pixmap = Pixmap::new(1000, 1000).unwrap();
bencher.iter(|| {
let clip_path = {
Expand Down
49 changes: 49 additions & 0 deletions benches/src/draw_pixmap.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
use test::Bencher;

fn bench_draw_pixmap(blend_mode: tiny_skia::BlendMode, bencher: &mut Bencher) {
use tiny_skia::*;

let is_16bpc = crate::is_16bpc();

#[cfg(feature = "16bpc")]
if is_16bpc {
let mut dst = PixmapU16::new(1000, 1000).unwrap();
let mut src = PixmapU16::new(800, 800).unwrap();
src.fill(Color::from_rgba8(160, 80, 40, 200));

let paint = PixmapPaint {
opacity: 0.85,
blend_mode,
quality: FilterQuality::Nearest,
};

bencher.iter(|| {
dst.draw_pixmap(100, 100, src.as_ref(), &paint, Transform::identity(), None);
});
return;
}

let mut dst = Pixmap::new(1000, 1000).unwrap();
let mut src = Pixmap::new(800, 800).unwrap();
src.fill(Color::from_rgba8(160, 80, 40, 200));

let paint = PixmapPaint {
opacity: 0.85,
blend_mode,
quality: FilterQuality::Nearest,
};

bencher.iter(|| {
dst.draw_pixmap(100, 100, src.as_ref(), &paint, Transform::identity(), None);
});
}

#[bench] fn draw_pixmap_source_over(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::SourceOver, bencher); }
#[bench] fn draw_pixmap_multiply(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::Multiply, bencher); }
#[bench] fn draw_pixmap_screen(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::Screen, bencher); }
#[bench] fn draw_pixmap_overlay(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::Overlay, bencher); }
#[bench] fn draw_pixmap_color_dodge(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::ColorDodge, bencher); }
#[bench] fn draw_pixmap_color_burn(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::ColorBurn, bencher); }
#[bench] fn draw_pixmap_soft_light(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::SoftLight, bencher); }
#[bench] fn draw_pixmap_saturation(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::Saturation, bencher); }
#[bench] fn draw_pixmap_color(bencher: &mut Bencher) { bench_draw_pixmap(tiny_skia::BlendMode::Color, bencher); }
Loading
Loading