Coalesce session presentation invalidations through a disposable frame queue

This commit is contained in:
2026-11-09 17:41:02 +08:00
parent 075bb79443
commit 04a9b0c2b2
6 changed files with 53 additions and 1 deletions
+13
View File
@@ -296,3 +296,16 @@ its `ReactRendererDefinition`. The assembly exposes `previewNodeTypes` and
app never constructs a fake editor merely to satisfy the hooks. Preview functions
must render the supplied records without requiring CanvasProvider. Built-in preview
renderers are registered explicitly. Framework definitions never enter core data.
Presentation scheduling:
`createFrameQueue(clock, publish)` accumulates dirty keys in a Set and requests
one frame. `flush()` publishes now; reentrant invalidations wait for the next
frame. `dispose()` cancels pending work, including late canceled callbacks.
This queue never holds commands, undo units or requests. `createSessionFrameSource`
wraps a session source with a per-subscription queue; reads still return the
current session immediately, while preview notifications coalesce per frame.
The application uses it for CanvasView sessions. Pointerup reads its final event
and commits through the engine synchronously; persistence and Root notifications
are not frame-throttled. This does not implement paint extent indexing or selective
per-element drawing: dirty keys currently schedule a view notification.