use iris::prelude::*; const ROWS: usize = 1000; 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 DesktopRsc, _: Proxy, ) -> Self { let mut span = Span::empty(Dir::DOWN); for _ in 0..ROWS { let img = image::DynamicImage::new_rgba8(32, 32); let widget = image::>(img)(rsc); let widget = rsc.ui.widgets.add_strong(widget); span.push(widget.any()); } let span = rsc.ui.widgets.add_strong(span); let span_weak = span.weak(); let root = rsc .ui .widgets .add_strong(ScrollArea::new(span.any(), Axis::Y, Pin::End)); ui_state.set_root(rsc, root.any()); Self { ui_state, span: span_weak, frame: 0, appended: false, } } fn window_event(&mut self, event: winit::event::WindowEvent, rsc: &mut DesktopRsc) { if !matches!(event, winit::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 = 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(); }