diff --git a/examples/benchmark.rs b/examples/benchmark.rs index 4fc8e72..6acd250 100644 --- a/examples/benchmark.rs +++ b/examples/benchmark.rs @@ -4,7 +4,7 @@ use osui::prelude::*; pub fn main() { let engine = Benchmark::new(Console::new()); - engine.run(app); + engine.run(app).expect("Failed to run engine"); } fn app(cx: &Arc) -> View { diff --git a/examples/hello_world.rs b/examples/hello_world.rs index 9ba9489..eb1056f 100644 --- a/examples/hello_world.rs +++ b/examples/hello_world.rs @@ -3,8 +3,8 @@ use std::sync::Arc; use osui::prelude::*; pub fn main() { - let console = Console::new(); - console.run(app); + let engine = Console::new(); + engine.run(app).expect("Failed to run engine"); } fn app(cx: &Arc) -> View { diff --git a/examples/simple_benchmark.rs b/examples/simple_benchmark.rs index 44ee985..6927c9f 100644 --- a/examples/simple_benchmark.rs +++ b/examples/simple_benchmark.rs @@ -4,7 +4,7 @@ use osui::prelude::*; pub fn main() { let engine = SimpleBenchmark::new(Console::new()); - engine.run(app); + engine.run(app).expect("Failed to run engine"); } fn app(cx: &Arc) -> View { diff --git a/src/engine/benchmark.rs b/src/engine/benchmark.rs index ce096d3..95487c1 100644 --- a/src/engine/benchmark.rs +++ b/src/engine/benchmark.rs @@ -15,7 +15,10 @@ impl Benchmark { } impl Engine for Benchmark { - fn run) -> View + Send + Sync + 'static>(&self, component: F) { + fn run) -> View + Send + Sync + 'static>( + &self, + component: F, + ) -> crate::Result<()> { let mut times: Vec = Vec::new(); let cx = self.init(component); @@ -25,7 +28,7 @@ impl Engine for Benchmark { let start = Instant::now(); self.render(&cx); let end = Instant::now(); - times.push(end.duration_since(start).as_nanos() as u64); + times.push(end.duration_since(start).as_micros() as u64); self.0.render_delay(); } @@ -36,27 +39,25 @@ impl Engine for Benchmark { execute!(stdout(), MoveTo(0, 0)).unwrap(); println!( - "Average time: {} nanoseconds", + "Average time: {} µs", if times.len() > 0 { times.iter().sum::() / (times.len() as u64) } else { 0 } ); - println!("Min time: {} nanoseconds", times.iter().min().unwrap_or(&0)); - println!("Max time: {} nanoseconds", times.iter().max().unwrap_or(&0)); + println!("Min time: {} µs", times.iter().min().unwrap_or(&0)); + println!("Max time: {} µs", times.iter().max().unwrap_or(&0)); + println!("Total time: {} µs", end.duration_since(start).as_micros()); + println!("Total render time: {} µs", times.iter().sum::()); println!( - "Median time: {} nanoseconds", - times.iter().nth(times.len() / 2).unwrap_or(&0) - ); - println!( - "Total time: {} nanoseconds", - end.duration_since(start).as_nanos() - ); - println!( - "Total render time: {} nanoseconds", - times.iter().sum::() + "\n{},{},{}", + times.iter().min().unwrap_or(&0), + times.iter().max().unwrap_or(&0), + end.duration_since(start).as_micros() ); + + Ok(()) } fn init) -> View + Send + Sync + 'static>( diff --git a/src/engine/console.rs b/src/engine/console.rs index b8553a3..592ca01 100644 --- a/src/engine/console.rs +++ b/src/engine/console.rs @@ -102,13 +102,18 @@ impl Engine for Console { self.executor.clone() } - fn run) -> View + Send + Sync + 'static>(&self, component: F) { + fn run) -> View + Send + Sync + 'static>( + &self, + component: F, + ) -> crate::Result<()> { let cx = self.init(component); while self.executor.is_running() { self.render(&cx); self.render_delay(); } + + Ok(()) } } diff --git a/src/engine/mod.rs b/src/engine/mod.rs index adcafd7..05d9f2d 100644 --- a/src/engine/mod.rs +++ b/src/engine/mod.rs @@ -11,15 +11,11 @@ use std::{any::Any, sync::Arc}; use crate::{prelude::Context, render::Area, DrawContext, View}; -pub trait Engine { - fn run) -> View + Send + Sync + 'static>(&self, component: F) { - let cx = self.init(component); - - loop { - self.render(&cx); - self.render_delay(); - } - } +pub trait Engine { + fn run) -> View + Send + Sync + 'static>( + &self, + component: F, + ) -> crate::Result; fn init) -> View + Send + Sync + 'static>( &self, diff --git a/src/engine/simple_benchmark.rs b/src/engine/simple_benchmark.rs index 0893af4..267fa9e 100644 --- a/src/engine/simple_benchmark.rs +++ b/src/engine/simple_benchmark.rs @@ -15,7 +15,10 @@ impl SimpleBenchmark { } impl Engine for SimpleBenchmark { - fn run) -> View + Send + Sync + 'static>(&self, component: F) { + fn run) -> View + Send + Sync + 'static>( + &self, + component: F, + ) -> crate::Result<()> { let mut times: Vec = Vec::new(); let cx = self.init(component); @@ -57,6 +60,8 @@ impl Engine for SimpleBenchmark { "Total render time: {} nanoseconds", times.iter().sum::() ); + + Ok(()) } fn init) -> View + Send + Sync + 'static>(