use kui_core::{Core, Extension, OriginId, Size, Slot};
use kui_lua::LuaExtension;
fn view(width: &str) -> String {
format!(
r#"
local W = {{ clamp = {{ 400, {{ pct = 80 }}, 1000 }} }}
function view(env)
local t = {{ width = "grow" }}
for i = 1, 1000 do
t[#t + 1] = row {{ width = {width}, height = 4 }}
end
return column(t)
end
"#
)
}
fn frame(core: &mut Core, ext: &mut LuaExtension) {
let mut ui = core.frame(Size::new(1600.0, 1000.0), 1.0);
ui.set_origin(OriginId(1));
ext.view(&Slot::root(), &mut ui).unwrap();
ui.finish();
}
#[divan::bench(args = [
"px",
"percent",
"spelled",
"table per frame",
"table reused",
])]
fn lua_1000_rows(bencher: divan::Bencher, form: &str) {
let width = match form {
"px" => "720",
"percent" => "\"80%\"",
"spelled" => "\"clamp(400px, 80%, 1000px)\"",
"table per frame" => "{ clamp = { 400, { pct = 80 }, 1000 } }",
_ => "W",
};
let mut ext = LuaExtension::from_source("bench", &view(width)).unwrap();
let mut core = Core::new();
frame(&mut core, &mut ext);
bencher.bench_local(|| frame(&mut core, &mut ext));
}
fn main() {
divan::main();
}