use iris::prelude::*; use winit::event::WindowEvent; #[path = "lib.rs"] mod app; const SETTLE_FRAMES: usize = 4; const FRAMES: usize = 6; #[derive(DesktopUiState)] struct State { ui_state: DesktopUiState, span: WeakWidget, frame: usize, appended: bool, } impl DesktopAppState for State { fn new(mut ui_state: DesktopUiState, rsc: &mut StdRsc) -> Self { let span = app::build(rsc, &mut ui_state); Self { ui_state, span, frame: 0, appended: false, } } fn window_event(&mut self, event: WindowEvent, rsc: &mut StdRsc) { if !matches!(event, WindowEvent::RedrawRequested) { return; } self.frame += 1; let creates = self.ui_state.renderer.ui.take_image_bind_group_creates(); println!( "BENCH_IMAGES frame={} bind_group_creates={creates}", self.frame ); if self.frame == SETTLE_FRAMES && !self.appended { self.appended = true; let img = iris::image::DynamicImage::new_rgba8(32, 32); let widget = image::>(img)(rsc); let widget = rsc.ui.widgets.add_strong(widget); rsc.ui .widgets .get_mut(&self.span) .unwrap() .push(widget.any()); println!("BENCH_IMAGES appended one image after settling"); } if self.frame < FRAMES { self.ui_state.window.request_redraw(); } else { std::process::exit(0); } } } fn main() { DesktopApp::::run(); }