iris: eliminate retained-frame heap churn

This commit is contained in:
iris committed 2026-09-12 22:44:03 -04:00
1 parent badd758d9b
commit 715c86e7e2
22 files changed
+527 -196

No files matched your search

+6
View File
@@ -215,6 +215,12 @@ widget observed during that same draw; the next draw replaces the list, so a
dependency disappears as soon as the widget stops reading it. Both fields
have `ActiveData`'s existing lifecycle through `remove`/`remove_rec`.
Retained draw output uses two buffers per collection. A redraw clears and
fills the spare child, primitive, texture, and paint buffers while consuming
the current buffers for reuse, then swaps their roles. Stable redraws therefore
reuse vector capacity and move matching resource handles instead of allocating
new collections or changing resource reference counts each frame.
### 6. Rejected alternatives
- **A flat (non-chained) per-subtree offset table**, Iris's literal
+3 -1
View File
@@ -819,7 +819,9 @@ reads it during `draw` and calls `request_next_frame` while it remains active.
Iris stages the requesting widget's invalidation until the current retained
redraw has finished, then the host schedules the next platform frame before
renderer update or swapchain acquisition. `Widget::draw` still returns unit,
and `Widget` has no tick callback.
and `Widget` has no tick callback. Retained draw records alternate between two
buffers for children, primitives, textures, and paints, so steady frame-driven
redraws reuse their storage and matching resource handles.
**Iris ships no fonts, and font families are application-named strings**
(2026-09-12). Applications register their own font bytes on `Ui` and select