driver: diagnostics: track the actual number of frames stepped
this allows fps-related diagnostics to be meaningful after serialization / restarts.
This commit is contained in:
@@ -29,6 +29,7 @@ pub struct Driver<S> {
|
|||||||
}
|
}
|
||||||
|
|
||||||
struct Diagnostics {
|
struct Diagnostics {
|
||||||
|
frames_completed: u64,
|
||||||
time_spent_stepping: Duration,
|
time_spent_stepping: Duration,
|
||||||
time_spent_on_stimuli: Duration,
|
time_spent_on_stimuli: Duration,
|
||||||
time_spent_prepping_render: Duration,
|
time_spent_prepping_render: Duration,
|
||||||
@@ -41,6 +42,7 @@ struct Diagnostics {
|
|||||||
impl Diagnostics {
|
impl Diagnostics {
|
||||||
fn new() -> Self {
|
fn new() -> Self {
|
||||||
Self {
|
Self {
|
||||||
|
frames_completed: 0,
|
||||||
time_spent_stepping: Default::default(),
|
time_spent_stepping: Default::default(),
|
||||||
time_spent_on_stimuli: Default::default(),
|
time_spent_on_stimuli: Default::default(),
|
||||||
time_spent_prepping_render: Default::default(),
|
time_spent_prepping_render: Default::default(),
|
||||||
@@ -196,6 +198,7 @@ impl<S: AbstractSim + Clone + Default + Send + 'static> Driver<S> {
|
|||||||
trace!("step begin");
|
trace!("step begin");
|
||||||
let start_time = Instant::now();
|
let start_time = Instant::now();
|
||||||
self.state.step_multiple(can_step, &self.stimuli);
|
self.state.step_multiple(can_step, &self.stimuli);
|
||||||
|
self.diag.frames_completed += can_step as u64;
|
||||||
self.diag.time_spent_stepping += start_time.elapsed();
|
self.diag.time_spent_stepping += start_time.elapsed();
|
||||||
trace!("step end");
|
trace!("step end");
|
||||||
if self.diag.last_diag_time.elapsed().as_secs_f64() >= 5.0 {
|
if self.diag.last_diag_time.elapsed().as_secs_f64() >= 5.0 {
|
||||||
@@ -208,7 +211,7 @@ impl<S: AbstractSim + Clone + Default + Send + 'static> Driver<S> {
|
|||||||
let render_prep_time = self.diag.time_spent_prepping_render.as_secs_f64();
|
let render_prep_time = self.diag.time_spent_prepping_render.as_secs_f64();
|
||||||
let block_time = self.diag.time_spent_blocked_on_render.as_secs_f64();
|
let block_time = self.diag.time_spent_blocked_on_render.as_secs_f64();
|
||||||
let overall_time = self.diag.start_time.elapsed().as_secs_f64();
|
let overall_time = self.diag.start_time.elapsed().as_secs_f64();
|
||||||
let fps = (self.state.step_no() as f64) / overall_time;
|
let fps = (self.diag.frames_completed as f64) / overall_time;
|
||||||
let sim_time = self.state.time() as f64;
|
let sim_time = self.state.time() as f64;
|
||||||
let percent_complete = match self.sim_end_time {
|
let percent_complete = match self.sim_end_time {
|
||||||
Some(t) => format!("[{:.1}%] ", 100.0 * self.state.time() / *t.to_seconds(self.timestep())),
|
Some(t) => format!("[{:.1}%] ", 100.0 * self.state.time() / *t.to_seconds(self.timestep())),
|
||||||
|
Reference in New Issue
Block a user