diff options
Diffstat (limited to '')
| -rw-r--r-- | CONTEXT.md | 24 |
1 files changed, 16 insertions, 8 deletions
| @@ -163,14 +163,22 @@ Single Rust crate (`x86_64-unknown-uefi` target). Module breakdown: | |||
| 163 | ## Known issues / perf notes | 163 | ## Known issues / perf notes |
| 164 | 164 | ||
| 165 | - **Scroll cost** — scrolling still shifts the whole framebuffer (a | 165 | - **Scroll cost** — scrolling still shifts the whole framebuffer (a |
| 166 | ~3-8 MB pixel copy per row), but a RAM backbuffer (`gop::SHADOW`) | 166 | ~3-8 MB pixel copy per row), but two mechanisms make it fast on real |
| 167 | makes it fast on real hardware: every raster write goes to the shadow | 167 | hardware: |
| 168 | too, and scrolling is a cached shadow memcpy + one write-only push to | 168 | 1. a RAM backbuffer (`gop::SHADOW`): every raster write goes to the |
| 169 | the display. The display is never *read* — that was the killer, since | 169 | shadow too; scrolling is a cached shadow memcpy + one write-only |
| 170 | real-hardware GOP framebuffers are uncacheable/write-combining and | 170 | push to the display — the display is never *read* (uncached reads |
| 171 | uncached reads cost a bus round-trip per cache line. Still on the | 171 | were the killer, since real-hardware GOP framebuffers are |
| 172 | someday list: a pan-based ring so scrolling never touches the whole | 172 | uncacheable/write-combining). |
| 173 | framebuffer at all. | 173 | 2. deferred scroll batching (`vt::PENDING_SCROLLS`): the logical grid |
| 174 | scrolls instantly in RAM while the framebuffer shift+push is | ||
| 175 | deferred; N pending scrolls cost one push. Bursts of streaming | ||
| 176 | output (hexdump/cat) push every ~16 rows (or after ~40 ms of | ||
| 177 | pause), and the shell syncs before each prompt. Any CSI sequence | ||
| 178 | (full-screen apps like the editor) or interactive input pushes | ||
| 179 | immediately. | ||
| 180 | Still on the someday list: a pan-based ring so scrolling never touches | ||
| 181 | the whole framebuffer at all. | ||
| 174 | - **Editor redraw** re-blits changed cells per keystroke (fine at 1280×800); | 182 | - **Editor redraw** re-blits changed cells per keystroke (fine at 1280×800); |
| 175 | the "optimize drawing someday" item. | 183 | the "optimize drawing someday" item. |
| 176 | - **ramfs only**: edited files live in memory, lost on reboot until disk | 184 | - **ramfs only**: edited files live in memory, lost on reboot until disk |
