Document deferred layout requests and verification on Iris PR 19

This commit is contained in:
iris-ai committed 2026-09-20 16:50:50 -04:00
1 parent ab8b05b762
commit 4c7072e62f
3 files changed
+104 -16

No files matched your search

+38 -14
View File
@@ -4,10 +4,33 @@ Where the work in flight stands. The settled layout design, the vocabulary
and the measurement method are in `docs/LAYOUT.md`; what the review of #19
found is in `docs/LAYOUT_LOG.md`.
## Deferred comparisons are submitted on PR #19
The `layout/one-ask` tip is `8780b40`, in `/home/bob/repos/iris-deferred`.
`/home/bob/repos/iris` remains on `layout/bounds`; that branch's `de1eb7e` was
fast-forwarded into #19 before this work. The app's Iris pin is untouched.
The new request path composes min/max/clamp before assigning leftover slots,
while ordinary widgets keep returning `Size`. Known requests skip provisional
painting; measured leaves can complete a nested expression. The implementation
uses a reusable expression arena and retained draw buffers. The allocation rig
checks zero allocations after warm-up for unchanged plain and clamped trees.
Generalized cross-axis maxima are deferred because hidden main-axis shares
must not contribute to them. The current design is in `docs/LAYOUT.md`.
Format, workspace Clippy with and without layout diagnostics, and all 197
workspace tests pass. The broad scans passed: 400 depth-5 trees through the
shrinker, 1,000 depth-6 and 2,000 depth-4 generated trees, plus 400 depth-5
expression trees and 400 relative-bound trees. All 34,986 unbounded cold boxes
match `de1eb7e`. The forced-redraw allocation fixtures report zero allocations
across 100 resize frames after warm-up. The text resize benchmark uses 5.89%
more retired instructions than `de1eb7e`; this is not a universal speedup.
See `docs/LAYOUT.md` for the measurements and remaining measured paths.
## The Iris layout repair is submitted
**Iris PR #19** (`layout/one-ask`) replaces closed #18. The tip is `2dba90b`,
and past the reviewed `cadfba0` it is twelve rounds, each described in
**Iris PR #19** (`layout/one-ask`) replaces closed #18. Before the deferred
comparison work above, its review rounds past `cadfba0` are described in
`docs/LAYOUT_LOG.md`:
- **The repair**, `add6774` and `84dad21` -- collapsed-share placement,
@@ -68,9 +91,8 @@ over 2026-09-17 to 19; it is current, not frozen.
The core design remains sound. Round-to-nearest is still unchanged.
Two checkouts share one Git storage: `/home/bob/repos/iris` is the active
`layout/one-ask` worktree, and `ai-app-2/iris` stays on `app-pin` at the
app's `32f6ad8` pin until the integration below is ready.
The Iris worktrees share Git storage. `ai-app-2/iris` stays on `app-pin` at
the app's `32f6ad8` pin until the integration below is ready.
### The branch layout, and the trap that used to be here
@@ -198,17 +220,19 @@ glyphs do not follow a shortened entry.
are caller bugs under `debug_assert`, but the fallbacks differ.
- `docs/LAYOUT.md` §4, §5 and the density section name `Painter::place`,
`Painter::region()`, `SetSize`, `desired_width`, `apply_rest`, `Len::dp`,
`Aligned` and `MaxSize`, none of which exist. Do not restore
`OnResize::Translate` or `OrthoSize`.
- **`layout/bounds` (`de1eb7e`) is green and ready to review**, kept off #19
so that branch stays one subject. A rule holds what a widget answers
`Aligned`, which no longer exist; `MaxSize` now exists with the bounds API.
Do not restore `OnResize::Translate` or `OrthoSize`.
- **`layout/bounds` (`de1eb7e`) is included in #19** for the deferred
comparison implementation. A rule holds what a widget answers
(`SizeRule::{Min, Max, Clamp}`); a widget holds the box (`MaxSize`, which
`.max_width`/`.max_height` build). Bryan settled the split on 2026-09-20
after four readings were measured; the reasoning and the one remaining hole
-- a retained answer re-placed under a different rel base, which is older
than bounds -- are in `docs/LAYOUT_LOG.md`. A bound may not contain
`leftover`, and the generated trees grow bounds in pixels until that hole is
closed.
after four readings were measured; the reasoning is in `docs/LAYOUT_LOG.md`.
The deferred-request work fixes stale relative-bound reuse by tracking the
input base and comparing resolved bounds, with a reduced natural-size-hint
regression and 400 depth-5 relative-bound trees. Intrinsic bounds remain
`Len`s; comparisons involving leftover use `SizeRequest`. Ordinary generated
trees retain pixel bounds; `deferred_generated` supplies relative bounds and
expressions in separate corpora.
- `LazySpan`.
- `Scroll` taking a direction rather than one axis.