about summary refs log tree commit diff stats
path: root/071print.mu
diff options
context:
space:
mode:
authorKartik K. Agaram <vc@akkartik.com>2015-08-29 23:50:29 -0700
committerKartik K. Agaram <vc@akkartik.com>2015-08-29 23:51:18 -0700
commit930e9eae27f354b5ddeda212231b89314cc2802e (patch)
tree172e2187da8997ac83c2f9ebdd2211a9335c8124 /071print.mu
parent5cde7d513e7c228dba61729ae1c25b2e119fb5f8 (diff)
downloadmu-930e9eae27f354b5ddeda212231b89314cc2802e.tar.gz
2113 - stop updating entire screen on tb_present()
Mu still isn't so optimized that I can be profligate with spare cycles.
Instead we'll follow termbox-go's example and create a new API routine
called tb_sync() (after discussion with termbox's author). Now we only
need use tb_sync() on ctrl-l. For everything else use the optimized
render.

Now I think I've eradicated all signs of "cursor thrashing" during
refresh, in spite of how slow mu is as an interpreted language. We only
render the whole screen in some situations, and only if there's no more
input, and even then we only refresh the parts of the screen that
changed.

Thanks Jack and Caleb Couch for providing the impetus behind commits
2109-2113.

I've been lazy about writing tests for all this, but it's still good to
know I could, if I wanted to.
Diffstat (limited to '071print.mu')
-rw-r--r--071print.mu10
1 files changed, 10 insertions, 0 deletions
diff --git a/071print.mu b/071print.mu
index 186f5913..6aeb2042 100644
--- a/071print.mu
+++ b/071print.mu
@@ -65,6 +65,16 @@ recipe clear-screen [
   reply sc/same-as-ingredient:0
 ]
 
+recipe sync-screen [
+  local-scope
+  sc:address:screen <- next-ingredient
+  {
+    break-if sc
+    sync-display
+  }
+  # do nothing for fake screens
+]
+
 recipe fake-screen-is-empty? [
   local-scope
   sc:address:screen <- next-ingredient