Thin retained app and render runtime seams

This commit is contained in:
2026-06-17 18:33:36 +02:00
parent 04a1c5d0b1
commit dd638e5af4
12 changed files with 344 additions and 132 deletions

View File

@@ -18,6 +18,24 @@ agent or engineer to remove them without reconstructing context from chat.
## Reductions
- 2026-06-17: `DEBT-0036` was narrowed again. Retained `Shape`,
`src/shader.cpp`, and `src/font.cpp` now queue render-thread create/update/
destroy work through `src/renderer_gl/render_runtime_dispatch.h` instead of
calling `App::I` directly, and `Shader` render-thread entry points now assert
that explicit runtime contract while shader-program and mesh ownership remain
retained.
- 2026-06-17: `DEBT-0036` was narrowed again. `NodeStrokePreview` no longer
owns static worker-thread, queue, or render-mutex state directly;
`src/legacy_node_stroke_preview_runtime_services.*` now owns the retained
preview worker lifecycle and queue helpers, leaving the node as a thinner
adapter while the retained preview runtime still reaches app/render helpers
internally.
- 2026-06-17: `DEBT-0029` was narrowed again.
`LegacyFileMenuServices::pick_image_for_import()` in
`src/legacy_app_shell_services.cpp` now delegates retained import execution
to `src/legacy_document_image_import_services.*`, so the File-menu adapter no
longer defines the live `DocumentImageImportServices` implementation inline;
legacy `Image` loading and retained canvas/import-mode execution still remain.
- 2026-06-17: `DEBT-0003` was narrowed again. `src/app_runtime.cpp` and
`src/app_runtime.h` now synchronize render/UI worker running state, reject
cross-thread work once those workers stop, and drain queued work through

View File

@@ -53,8 +53,9 @@ Key facts:
- `Canvas::I` still appears hundreds of times in retained canvas modes, panels,
and workflow bridges.
- Raw `Node*` and callback captures remain a dominant UI lifetime risk.
- `RTT`, `Texture2D`, `Shape`, `Shader`, `Font`, and `CanvasLayer` still route
render work through `App::I` queues.
- `CanvasLayer` and retained stroke-preview/runtime draw paths still depend on
legacy render/runtime helpers, but `RTT`, `Texture2D`, `Shape`, `Shader`,
and `TextMesh` no longer call `App::I` directly for queueing.
- `AppRuntime` now owns synchronized running flags plus explicit post/reject,
same-thread execution, and queue-drain behavior, but broader singleton reach
and app-shell ownership remain.