diff options
| -rw-r--r-- | src/buffer.rs | 27 | ||||
| -rw-r--r-- | src/main.rs | 2 |
2 files changed, 19 insertions, 10 deletions
diff --git a/src/buffer.rs b/src/buffer.rs index 999a32c..6d983db 100644 --- a/src/buffer.rs +++ b/src/buffer.rs @@ -60,16 +60,23 @@ impl Buffer { fn render(&mut self) -> std::io::Result<()> { puffin::profile_function!(); - self.cells.sort_unstable_by_key(|cell| cell.z); - queue!(self.stdout, BeginSynchronizedUpdate, Clear(ClearType::All))?; - for cell in &self.cells { - queue!( - self.stdout, - MoveTo(cell.x, cell.y), - PrintStyledContent(StyledContent::new(cell.style, cell.character)) - )?; + { + puffin::profile_scope!("sort cells"); + self.cells.sort_unstable_by_key(|cell| cell.z); } - queue!(self.stdout, EndSynchronizedUpdate)?; + { + puffin::profile_scope!("queue"); + queue!(self.stdout, BeginSynchronizedUpdate, Clear(ClearType::All))?; + for cell in &self.cells { + queue!( + self.stdout, + MoveTo(cell.x, cell.y), + PrintStyledContent(StyledContent::new(cell.style, cell.character)) + )?; + } + queue!(self.stdout, EndSynchronizedUpdate)?; + } + puffin::profile_scope!("flush"); self.stdout.flush()?; Ok(()) } @@ -96,6 +103,7 @@ impl Buffer { } }); loop { + puffin::profile_scope!("frame"); while let Ok(event) = receiver.try_recv() { if let Ok(event) = event.try_into() { event_handler(self, event); @@ -103,6 +111,7 @@ impl Buffer { } event_handler(self, Event::Render); self.render()?; + puffin::GlobalProfiler::lock().new_frame(); } })?; self.finish()?; diff --git a/src/main.rs b/src/main.rs index 1a62ca2..baea403 100644 --- a/src/main.rs +++ b/src/main.rs @@ -34,6 +34,7 @@ fn render_frame_rate(ctx: &mut ScriptContext, state: &mut Box<[u8]>) { frame_time % 100 / 10, frame_time % 10, ]; + ctx.buffer.cells.clear(); for (x, digit) in digits.into_iter().enumerate() { ctx.buffer.cells.push(Cell { character: char::from_digit(digit as u32, 10).unwrap(), @@ -110,7 +111,6 @@ fn main() { }; scripts.run_scripts(&mut context, &wasm_runner, &mut files); input.reset_next_frame(); - puffin::GlobalProfiler::lock().new_frame(); } }) .unwrap(); |
