From 1d8aff79057f76b35d032a80da4f3c193169f306 Mon Sep 17 00:00:00 2001 From: Bill Thiede Date: Thu, 19 Jan 2023 21:19:05 -0800 Subject: [PATCH] rtiow: using println and compute ETA in progress. --- rtiow/renderer/src/renderer.rs | 37 +++++++++++++++++++++++++--------- 1 file changed, 28 insertions(+), 9 deletions(-) diff --git a/rtiow/renderer/src/renderer.rs b/rtiow/renderer/src/renderer.rs index 21aeb04..3589193 100644 --- a/rtiow/renderer/src/renderer.rs +++ b/rtiow/renderer/src/renderer.rs @@ -7,7 +7,8 @@ use std::{ mpsc::{sync_channel, Receiver, SyncSender}, Arc, Mutex, }, - thread, time, + thread, + time::{self, Instant}, }; use core_affinity; @@ -398,6 +399,7 @@ impl AddAssign for RenderStats { } fn progress( + start_time: Instant, last_stat: &RenderStats, current_stat: &RenderStats, time_diff: time::Duration, @@ -406,13 +408,18 @@ fn progress( let human = human::Formatter::new(); let pixel_diff = current_stat.pixels - last_stat.pixels; let ray_diff = current_stat.rays - last_stat.rays; + let now = time::Instant::now(); + let start_diff = now - start_time; + let percent = 100. * current_stat.pixels as f32 / pixel_total as f32; + let eta = 100. * start_diff.as_secs_f32() / percent; format!( - "{:7} / {:7}pixels ({:2}%) {:7}pixels/s {:7}rays/s", + "{:7} / {:7}pixels ({:2.0}%) {:7}pixels/s {:7}rays/s eta {:.0}s", human.format(current_stat.pixels as f64), human.format(pixel_total as f64), - 100 * current_stat.pixels / pixel_total, + percent, human.format(pixel_diff as f64 / time_diff.as_secs_f64()), - human.format(ray_diff as f64 / time_diff.as_secs_f64()) + human.format(ray_diff as f64 / time_diff.as_secs_f64()), + eta ) } @@ -580,7 +587,6 @@ pub fn render(scene: Scene, output_dir: &Path) -> std::result::Result<(), std::i drop(pixel_req_rx); drop(pixel_resp_tx); - let start_time = time::Instant::now(); let (w, h) = (scene.width, scene.height); handles.push(thread::spawn(move || { let batch_line_requests = false; @@ -608,6 +614,7 @@ pub fn render(scene: Scene, output_dir: &Path) -> std::result::Result<(), std::i let mut last_time = time::Instant::now(); let mut last_stat: RenderStats = Default::default(); let mut current_stat: RenderStats = Default::default(); + let start_time = time::Instant::now(); for resp in pixel_resp_rx { match resp { Response::Pixel { x, y, pixel, rs } => { @@ -625,9 +632,15 @@ pub fn render(scene: Scene, output_dir: &Path) -> std::result::Result<(), std::i let now = time::Instant::now(); let time_diff = now - last_time; if time_diff > time::Duration::from_secs(1) { - info!( + println!( "{}", - progress(&last_stat, ¤t_stat, time_diff, pixel_total) + progress( + start_time, + &last_stat, + ¤t_stat, + time_diff, + pixel_total + ) ); last_stat = current_stat; last_time = now; @@ -637,10 +650,16 @@ pub fn render(scene: Scene, output_dir: &Path) -> std::result::Result<(), std::i thr.join().expect("thread join"); } let time_diff = time::Instant::now() - start_time; - info!( + println!( "Runtime {} seconds {}", time_diff.as_secs_f32(), - progress(&Default::default(), ¤t_stat, time_diff, pixel_total) + progress( + start_time, + &Default::default(), + ¤t_stat, + time_diff, + pixel_total + ) ); output::write_images(&scene, time_diff, output_dir)