blob: 7764a166d748ef5d9404757e0312282b17ab3a49 [file] [log] [blame]
// Copyright 2025 the Vello Authors
// SPDX-License-Identifier: Apache-2.0 OR MIT
use proc_macro::TokenStream;
use proc_macro2::Ident;
use quote::quote;
use syn::{ItemFn, parse_macro_input};
pub(crate) fn vello_bench_inner(_: TokenStream, item: TokenStream) -> TokenStream {
let mut input_fn = parse_macro_input!(item as ItemFn);
let input_fn_name = input_fn.sig.ident.clone();
let input_fn_name_str = input_fn.sig.ident.to_string();
let inner_fn_name = Ident::new(&format!("{}_inner", input_fn_name), input_fn_name.span());
input_fn.sig.ident = inner_fn_name.clone();
let expanded = quote! {
#input_fn
pub fn #input_fn_name(c: &mut criterion::Criterion) {
use vello_cpu::fine::Fine;
use vello_common::coarse::WideTile;
use vello_common::tile::Tile;
fn get_bench_name(suffix1: &str, suffix2: &str) -> String {
let module_path = module_path!();
let module = module_path
.split("::")
.skip(1)
.collect::<Vec<_>>()
.join("/");
format!("{}/{}_{}", module, suffix1, suffix2)
}
c.bench_function(&get_bench_name(&#input_fn_name_str, "u8_scalar"), |b| {
let mut fine = Fine::<u8>::new();
#inner_fn_name(b, &mut fine);
});
c.bench_function(&get_bench_name(&#input_fn_name_str, "f32_scalar"), |b| {
let mut fine = Fine::<f32>::new();
#inner_fn_name(b, &mut fine);
});
}
};
expanded.into()
}