Skip to content

perf(renderer): each body's images are written on the elements that draw them, with no CSS variable; Jupiter and Saturn name each face's image - #1300

Merged
alowpoly merged 10 commits into
mainfrom
perf/long-frames
Oct 5, 2026
Merged

alowpoly merged 10 commits into
mainfrom
perf/long-frames

Conversation

@alowpoly

@alowpoly alowpoly commented Oct 5, 2026 •

Copy link
Copy Markdown
Contributor

Change

No CSS variable carries a body's image. The bake states each image's size and lists the elements that draw it; the page and the served markup write background-image on those elements, and a runtime that still reads one from a variable cannot be pinned or mounted. Jupiter and Saturn, imaged until now by stylesheet rules, name each face's image in the bake. A preloaded image shown again is loaded again before its paint, and a replaced image's handle is released after that paint. Saturn's ultraviolet and methane maps join the lossy lane. All 4,560 runtimes were rewritten by the bake's own step. Guide.

Saturn's bake was broken by a constant read before its declaration; fixed.

Evidence and limits

Proves the change: iPad, longest frame of a repeated dataset switch. Saturn 63 to 66 ms (was 193 to 233); its two maps went from 9.7 MB to 0.37 MB with 3 of 25.6 million pixels flagged. Jupiter 69 to 70 (was 137 to 185). Io 45 to 49, unchanged. After a fling, Saturn's and Jupiter's worst frame is 21 and 25 ms (was 49 to 55). Io's first-paint markup 12,014 to 11,456 bytes brotli. Re-running the bindings on a stored body of each lane reproduces it exactly.

Clean: typecheck, lint, package, renderer and bindings tests.

Limits: mesh display and billboard variables remain. A branch that rebakes a body must re-run its bindings after merging this.

PR rules.

…er's generator binds its faces; the renderer reads sizes and derives none
…exture slots replace image variables in runtimes, markup and stylesheets
# Conflicts:
#	src/objects/callisto/inventory.json
#	src/objects/ganymede/inventory.json
#	src/objects/iapetus/inventory.json
…sets no custom property, so the unread camera-zoom leaves 2,137 star runtimes
…records' expansion leaves the property table to the depth restore
…, so its pixels return before the paint that shows it
@alowpoly alowpoly added the pipeline-change Shared pipeline change that legitimately touches more than 12 objects label Oct 5, 2026
… through the lossy lane; faces behind a body keep their exact box leaf by leaf
… in the recipe's qualification and the README
… that replaces it, which took the decode out of Saturn's dataset switch
@alowpoly
alowpoly merged commit 3362913 into main Oct 5, 2026
13 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

pipeline-change Shared pipeline change that legitimately touches more than 12 objects

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant