blob: b555b76933ac92beff11a176f70ea0e0d77dc0a8 [file]
// 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);
});
}