rtiow: using println and compute ETA in progress.
This commit is contained in:
parent
585ad4805c
commit
1d8aff7905
@ -7,7 +7,8 @@ use std::{
|
|||||||
mpsc::{sync_channel, Receiver, SyncSender},
|
mpsc::{sync_channel, Receiver, SyncSender},
|
||||||
Arc, Mutex,
|
Arc, Mutex,
|
||||||
},
|
},
|
||||||
thread, time,
|
thread,
|
||||||
|
time::{self, Instant},
|
||||||
};
|
};
|
||||||
|
|
||||||
use core_affinity;
|
use core_affinity;
|
||||||
@ -398,6 +399,7 @@ impl AddAssign for RenderStats {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fn progress(
|
fn progress(
|
||||||
|
start_time: Instant,
|
||||||
last_stat: &RenderStats,
|
last_stat: &RenderStats,
|
||||||
current_stat: &RenderStats,
|
current_stat: &RenderStats,
|
||||||
time_diff: time::Duration,
|
time_diff: time::Duration,
|
||||||
@ -406,13 +408,18 @@ fn progress(
|
|||||||
let human = human::Formatter::new();
|
let human = human::Formatter::new();
|
||||||
let pixel_diff = current_stat.pixels - last_stat.pixels;
|
let pixel_diff = current_stat.pixels - last_stat.pixels;
|
||||||
let ray_diff = current_stat.rays - last_stat.rays;
|
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!(
|
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(current_stat.pixels as f64),
|
||||||
human.format(pixel_total 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(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_req_rx);
|
||||||
drop(pixel_resp_tx);
|
drop(pixel_resp_tx);
|
||||||
|
|
||||||
let start_time = time::Instant::now();
|
|
||||||
let (w, h) = (scene.width, scene.height);
|
let (w, h) = (scene.width, scene.height);
|
||||||
handles.push(thread::spawn(move || {
|
handles.push(thread::spawn(move || {
|
||||||
let batch_line_requests = false;
|
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_time = time::Instant::now();
|
||||||
let mut last_stat: RenderStats = Default::default();
|
let mut last_stat: RenderStats = Default::default();
|
||||||
let mut current_stat: RenderStats = Default::default();
|
let mut current_stat: RenderStats = Default::default();
|
||||||
|
let start_time = time::Instant::now();
|
||||||
for resp in pixel_resp_rx {
|
for resp in pixel_resp_rx {
|
||||||
match resp {
|
match resp {
|
||||||
Response::Pixel { x, y, pixel, rs } => {
|
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 now = time::Instant::now();
|
||||||
let time_diff = now - last_time;
|
let time_diff = now - last_time;
|
||||||
if time_diff > time::Duration::from_secs(1) {
|
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_stat = current_stat;
|
||||||
last_time = now;
|
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");
|
thr.join().expect("thread join");
|
||||||
}
|
}
|
||||||
let time_diff = time::Instant::now() - start_time;
|
let time_diff = time::Instant::now() - start_time;
|
||||||
info!(
|
println!(
|
||||||
"Runtime {} seconds {}",
|
"Runtime {} seconds {}",
|
||||||
time_diff.as_secs_f32(),
|
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)
|
output::write_images(&scene, time_diff, output_dir)
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user