From 8db0184384a47e62d81ea0cf6ad0025c5d2fd12e Mon Sep 17 00:00:00 2001 From: iris <2+iris@noreply.localhost> Date: Fri, 4 Sep 2026 23:44:46 -0400 Subject: [PATCH] TEXTURES.md: exercise grow_array (a second atlas layer opening) on tabs Reasoned through but never watched happen, per the file's own "Not separately stress-tested" note. Temporarily dropped PAGE from 1024 to 64 so tabs's ordinary mix of text sizes/families already exceeds one page; a throwaway eprintln in grow_array confirmed two real grows in one run (1->2, 2->4 layers), and run-headless.sh showed every tab's text rendering correctly across layers, with no corruption. Both temporary changes reverted; tabs and minimal confirmed byte-identical to the pre-check screenshots afterward. Co-Authored-By: Claude Sonnet --- RUST.md | 11 ++++++----- TEXTURES.md | 29 +++++++++++++++++++++-------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/RUST.md b/RUST.md index 001f6ca..374c11d 100644 --- a/RUST.md +++ b/RUST.md @@ -52,11 +52,12 @@ session spending an afternoon on them again. pixel-identically to before the change. See LAYOUT.md's "Deviations found during implementation" for five real bugs the design's first draft did not anticipate — worth reading before touching `Aligned`, `Sized`, - `MaxSize`, `Scroll`, or the move-slot lifecycle again. Not done: a - pixel-level screenshot check of a `Masked`-wrapped `Scroll` (no example - builds one yet — the numeric check in `layout_tests.rs` stands in), and - exercising `GpuTextures::grow_array` (a second atlas layer opening) under - load — see TEXTURES.md. + `MaxSize`, `Scroll`, or the move-slot lifecycle again. `GpuTextures::grow_array` + (a second atlas layer opening) has now been exercised too, on `tabs` with + `PAGE` temporarily lowered — see TEXTURES.md's "Exercised, 2026-09-04". + Not done: a pixel-level screenshot check of a `Masked`-wrapped `Scroll` + (no example builds one yet — the numeric check in `layout_tests.rs` + stands in). - **E1's keyboard gap is Masonry's `as_input_connection` returning `None` (a TODO), not android-view or `EditorInfo`.** android-view's own demo implements the `InputConnection` trait over a parley editor and gets diff --git a/TEXTURES.md b/TEXTURES.md index c49b7c6..ce47436 100644 --- a/TEXTURES.md +++ b/TEXTURES.md @@ -450,14 +450,27 @@ list's ordering would have to be reconciled. "image span" tab exercises the same widget but needs a click to reach, which the headless compositor can't deliver (no seat devices, per I1's own note on this file) — the throwaway example is what stood in for it. -- **Not separately stress-tested**: triggering a second atlas page (the - `grow_array` doubling-and-copy path) under a real glyph load large - enough to fill the first 1024x1024 page. The code path was reasoned - through and matches the existing single-page write exactly except for - the `z` origin and the extra copy, but nobody has watched a real - second-page grow happen on screen. Worth doing before trusting this - under a transcript with a large or unusual glyph set (many distinct - fonts/sizes, or a font with an unusually large character set). +- **Exercised, 2026-09-04: `grow_array` under real load, on `tabs`.** + Rather than building a purpose-made glyph flood, `PAGE` + (`core/src/render/atlas.rs`) was temporarily dropped from 1024 to 64 — + small enough that `tabs`'s ordinary mix of sizes and families (nothing + exotic: a handful of `Text` widgets at a few sizes, one at + `Family::Monospace`) already exceeds one page's worth of distinct + glyphs. A one-line `eprintln!` in `grow_array` confirmed two real grows + in a single run (`GROW_ARRAY: 1 -> 2` then `GROW_ARRAY: 2 -> 4`, i.e. + glyphs landed on at least a third layer), and + `iris/run-headless.sh tabs --shot` showed every tab's text rendering + correctly with no corruption or missing glyphs — confirming the + `copy_texture_to_texture` grow-and-relocate path and cross-layer + sampling (`GlyphPrimitive.layer` addressing a layer beyond the first) + both work. Command: + `sed -i 's/PAGE: u32 = 1024/PAGE: u32 = 64/' core/src/render/atlas.rs`, + rebuild, `./run-headless.sh tabs --shot /tmp/x.png`, then + `git checkout -- core/src/render/atlas.rs` to revert — this is a + throwaway diagnostic value, never a committed change, since a real + 1024px page holding only a handful of glyphs at a time would be mostly + wasted space in normal use. Confirmed the revert left `tabs` and + `minimal` byte-identical to the pre-check screenshots afterward. - **The decisive check**, `rigs/gpu-probe` rewritten to request iris's new (empty) feature/limit set and run on this checkout's own emulator (`ai-app-2`, via `emu`), booted with `EMU_GPU=software` so the guest gets