Record glyph emission savings and remaining layout costs
This commit is contained in:
1 parent
264dc4f0c2
commit
035c7f20e8
1 file changed
+47
-2
+47
-2
@@ -423,7 +423,7 @@ The original proposal was implemented by Claude as `5fcace1` on
|
|||||||
`wip/region-and-placement` in `/home/bob/repos/iris-pr18`. It kept the fraction
|
`wip/region-and-placement` in `/home/bob/repos/iris-pr18`. It kept the fraction
|
||||||
reference stable but failed five layout cases and three draw-count cases.
|
reference stable but failed five layout cases and three draw-count cases.
|
||||||
The first correction is `efb416b`, exact recomposition is `2ed5503`, and the
|
The first correction is `efb416b`, exact recomposition is `2ed5503`, and the
|
||||||
current performance/alignment continuation is **`7601aa2`**, pushed to origin's
|
current performance continuation is **`a7307d9`**, pushed to origin's
|
||||||
`wip/region-and-placement`, in the isolated checkout
|
`wip/region-and-placement`, in the isolated checkout
|
||||||
`/home/bob/repos/iris-layout-experiment`; **it is not on PR #18**. The original
|
`/home/bob/repos/iris-layout-experiment`; **it is not on PR #18**. The original
|
||||||
checkout is unchanged. Keep the experiment's build directory separate: Cargo
|
checkout is unchanged. Keep the experiment's build directory separate: Cargo
|
||||||
@@ -507,7 +507,7 @@ center. Do not describe those two centers as the same thing or compensate with
|
|||||||
an arbitrary offset. The parked padding API change is still separate.
|
an arbitrary offset. The parked padding API change is still separate.
|
||||||
|
|
||||||
Ordinary verification passes: formatting, workspace clippy with
|
Ordinary verification passes: formatting, workspace clippy with
|
||||||
`layout-diagnostics`, workspace tests (100 suite tests and 21 core tests), and
|
`layout-diagnostics`, workspace tests (101 suite tests and 21 core tests), and
|
||||||
the fast generated cases. The corrected `tabs` resize from 1920x1200 to
|
the fast generated cases. The corrected `tabs` resize from 1920x1200 to
|
||||||
900x1200 matches a cold image with zero differing pixels. The release oracle
|
900x1200 matches a cold image with zero differing pixels. The release oracle
|
||||||
passes 2000 seeds at depth 4 and 1000 at depth 6; the shrinker passes 400 at
|
passes 2000 seeds at depth 4 and 1000 at depth 6; the shrinker passes 400 at
|
||||||
@@ -557,6 +557,51 @@ with each range less than 1.3% of its median. Additional depth-6 fixtures,
|
|||||||
7.0% for size and 8.4% for resize; seed 13 improves resize by 9.2%, while its
|
7.0% for size and 8.4% for resize; seed 13 improves resize by 9.2%, while its
|
||||||
size samples overlap and establish no cycle improvement.
|
size samples overlap and establish no cycle improvement.
|
||||||
|
|
||||||
|
**Glyph emission now composes its origin once per text draw.** Glyph offsets
|
||||||
|
and bitmap sizes are pixel lengths, so composition adds them unchanged. The
|
||||||
|
fresh draw resolves the shared frame/extent origin once, then adds each glyph's
|
||||||
|
offset and size. Retained local geometry is unchanged; a regression compares
|
||||||
|
fresh drawing with retained recomposition for fractional origins, negative
|
||||||
|
pixel offsets, changing frames and extents, and region nodes. This adds no
|
||||||
|
retained state and changes no layout decisions.
|
||||||
|
|
||||||
|
Against `7601aa2`, nine alternating pairs of direct, uninstrumented release
|
||||||
|
executables under `perf stat -e cycles:u,instructions:u`, seed 1, depth 8,
|
||||||
|
2000 frames per process, including setup:
|
||||||
|
|
||||||
|
| phase | cycles before → after (billions) | instructions before → after (billions) |
|
||||||
|
| --- | ---: | ---: |
|
||||||
|
| size | 4.5164 → 4.0909 (-9.4%) | 12.1709 → 10.3993 (-14.6%) |
|
||||||
|
| resize | 5.3025 → 4.8044 (-9.4%) | 14.2150 → 12.1999 (-14.2%) |
|
||||||
|
| many | 5.2743 → 4.8071 (-8.9%) | 14.0989 → 12.0868 (-14.3%) |
|
||||||
|
|
||||||
|
All nine samples per side were retained; before/after cycle ranges do not
|
||||||
|
overlap. No scans or builds ran during measurement. All instrumented work
|
||||||
|
counters match `7601aa2` on all six phases (50 frames, cold once), including
|
||||||
|
the draw and primitive counts in the table above: this reduces the cost of
|
||||||
|
emitting the repeated glyphs, not the repeated layout evaluations themselves.
|
||||||
|
|
||||||
|
Additional depth-6 fixtures, nine alternating pairs and 4000 frames each:
|
||||||
|
seed 3's size updates improve cycles by 5.0% and instructions by 8.0%; seed
|
||||||
|
13's resizes improve cycles by 8.5% and instructions by 13.6%, both with
|
||||||
|
nonoverlapping cycle ranges. Seed 3's resize and seed 13's size ranges overlap.
|
||||||
|
On seed 1/depth 8, cold (one frame/process) and scroll (300,000 frames) also
|
||||||
|
have overlapping cycle ranges. Repaint (1,000,000 frames) measures 1.1% more
|
||||||
|
cycles, with nonoverlapping ranges and just 0.02% more instructions: this slice
|
||||||
|
has a small measured repaint cost alongside the text-heavy gains. All nine
|
||||||
|
samples per side were retained in these checks too.
|
||||||
|
|
||||||
|
The verification runs above pass again at this head. All five reference
|
||||||
|
renders (`view`, `minimal`,
|
||||||
|
`random`, `tabs`, `text`) match `7601aa2` pixel for pixel at 1920x1200; `tabs`
|
||||||
|
resized to 900x1200 matches a cold render there. The GPU probe reported Venus
|
||||||
|
on the RX 7900 XT in this session.
|
||||||
|
|
||||||
|
Two trials were removed: combining frame recomposition with extent movement
|
||||||
|
saved under 0.8% of instructions and no cycles; special-casing equal endpoint
|
||||||
|
fractions in `UiSpan::within` cost 11% cycles and 7% instructions despite still
|
||||||
|
inlining. Keep that hot general composition small.
|
||||||
|
|
||||||
**The remaining gap has not been established as an unavoidable correctness
|
**The remaining gap has not been established as an unavoidable correctness
|
||||||
cost.** A temporary failure trace of one frame on seed 1, depth 8 counted
|
cost.** A temporary failure trace of one frame on seed 1, depth 8 counted
|
||||||
39/108 failed reuse attempts in size, 65/151 in resize, and 45/109 in many
|
39/108 failed reuse attempts in size, 65/151 in resize, and 45/109 in many
|
||||||
|
|||||||
Reference in new issue
Block a user