use revue::prelude::*;
use std::time::Instant;
fn main() -> Result<()> {
let start = Instant::now();
let test_duration_secs = std::env::args()
.nth(1)
.and_then(|s| s.parse().ok())
.unwrap_or(5);
println!("╔══════════════════════════════════════════════════════════╗");
println!("║ RENDERING PERFORMANCE BENCHMARK ║");
println!("╠══════════════════════════════════════════════════════════╣");
println!(
"║ Duration: {} seconds ║",
test_duration_secs
);
println!("║ Phase 2 Optimizations: ║");
println!("║ ✓ Conditional DOM rebuild (1st frame only) ║");
println!("║ ✓ Conditional Layout rebuild (resize only) ║");
println!("║ ✓ Dirty rect merging ║");
println!("║ ✓ Incremental style updates ║");
println!("╚══════════════════════════════════════════════════════════╝\n");
println!("Running... (Press Ctrl+C to stop early)\n");
let view = vstack()
.gap(1)
.child(Text::heading("Performance Benchmark"))
.child(Text::success("✓ Phase 2 Optimizations Active"))
.child(
hstack()
.gap(2)
.child(
vstack()
.gap(1)
.child(Text::new("Column 1 - Row 1"))
.child(Text::new("Column 1 - Row 2"))
.child(Text::new("Column 1 - Row 3"))
.child(Text::new("Column 1 - Row 4"))
.child(Text::new("Column 1 - Row 5")),
)
.child(
vstack()
.gap(1)
.child(Text::muted("Column 2 - Row 1"))
.child(Text::muted("Column 2 - Row 2"))
.child(Text::muted("Column 2 - Row 3"))
.child(Text::muted("Column 2 - Row 4"))
.child(Text::muted("Column 2 - Row 5")),
)
.child(
vstack()
.gap(1)
.child(Text::info("Column 3 - Row 1"))
.child(Text::info("Column 3 - Row 2"))
.child(Text::info("Column 3 - Row 3"))
.child(Text::info("Column 3 - Row 4"))
.child(Text::info("Column 3 - Row 5")),
),
)
.child(Text::muted("Measuring frame times..."))
.child(Text::muted(format!(
"Will auto-exit after {} seconds",
test_duration_secs
)));
let mut app = App::builder().build();
app.run(view, |_event, _view, _app| false)?;
let elapsed = start.elapsed();
println!("\n╔══════════════════════════════════════════════════════════╗");
println!("║ BENCHMARK COMPLETE ║");
println!("╠══════════════════════════════════════════════════════════╣");
println!(
"║ Elapsed: {:.2}s ║",
elapsed.as_secs_f64()
);
println!("║ ║");
println!("║ With Phase 2 optimizations: ║");
println!("║ • DOM tree: Built once (not every frame) ║");
println!("║ • Layout: Computed once (not every frame) ║");
println!("║ • Styles: Incremental updates only ║");
println!("║ • Dirty rects: Automatically merged ║");
println!("╚══════════════════════════════════════════════════════════╝\n");
Ok(())
}