summaryrefslogtreecommitdiff
path: root/src/buffer.rs
diff options
context:
space:
mode:
authorMica White <botahamec@outlook.com>2026-07-03 16:32:26 -0400
committerMica White <botahamec@outlook.com>2026-07-03 16:32:26 -0400
commitcbbe1ca7f7b36b03e813fbf7e0147341090762bb (patch)
tree4610ef483e1c80bb2c08a4e5ca69e235f8de275c /src/buffer.rs
parente8fe3415e86e18ac97216ada94002d0a03ee3c8a (diff)
Fix performance
Diffstat (limited to 'src/buffer.rs')
-rw-r--r--src/buffer.rs27
1 files changed, 18 insertions, 9 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()?;