| // Copyright 2025 the Vello Authors |
| // SPDX-License-Identifier: Apache-2.0 OR MIT |
| |
| use crate::fine::BENCH_WIDTH; |
| use criterion::{Bencher, Criterion}; |
| use vello_common::fearless_simd::Simd; |
| use vello_common::geometry::RectU16; |
| use vello_common::pixmap::PixmapMut; |
| use vello_common::tile::Tile; |
| use vello_cpu::fine::{Fine, FineKernel}; |
| use vello_cpu::region::Region; |
| use vello_dev_macros::vello_bench; |
| |
| const TILE_BUFFER_SIZE: usize = BENCH_WIDTH as usize * Tile::HEIGHT as usize * 4; |
| |
| pub fn pack(c: &mut Criterion) { |
| pack_block(c); |
| unpack_block(c); |
| } |
| |
| #[vello_bench] |
| pub fn pack_block<S: Simd, T: FineKernel<S>>(b: &mut Bencher<'_>, fine: &mut Fine<S, T>) { |
| let mut buf = vec![0; TILE_BUFFER_SIZE]; |
| |
| b.iter(|| { |
| let mut pixmap = PixmapMut::new(BENCH_WIDTH, Tile::HEIGHT, &mut buf).unwrap(); |
| let mut region = Region::new(&mut pixmap, RectU16::new(0, 0, BENCH_WIDTH, Tile::HEIGHT)); |
| fine.pack(&mut region); |
| |
| std::hint::black_box(&buf); |
| }); |
| } |
| |
| #[vello_bench] |
| pub fn unpack_block<S: Simd, T: FineKernel<S>>(b: &mut Bencher<'_>, fine: &mut Fine<S, T>) { |
| let mut buf = vec![0; TILE_BUFFER_SIZE]; |
| |
| b.iter(|| { |
| let mut pixmap = PixmapMut::new(BENCH_WIDTH, Tile::HEIGHT, &mut buf).unwrap(); |
| let mut region = Region::new(&mut pixmap, RectU16::new(0, 0, BENCH_WIDTH, Tile::HEIGHT)); |
| fine.unpack(0, &mut region); |
| |
| std::hint::black_box(&fine); |
| }); |
| } |