three-kit

Survey: one frame at each play position

How to measure what the frame draws, in the running app, and break the top area down. Loaded by steps 1–3.

Driving the app

One frame

ledger() in the console records one animation frame (in a background tab: ledger({ render: () => app.renderOnce() }) with the app’s own render). From its result:

Beside it, the world’s worth, for counts and names: summary() (one count per check), census() (geometries by triangles drawn, batches broken down by geometry, hidden meshes included), meshes(). Rows named BufferGeometry:… or Mesh [Material] are unnamed: name them before ranking, or the ledger can’t say what costs what.

Loading and memory, where the browser gives them, once per play position that loads more:

Baseline table

| Play position | Frame triangles (shadow + main) | Draws | Top areas (triangles, main / shadow) | vs `frame` |
| ------------- | ------------------------------- | ----- | ------------------------------------ | ---------- |
| start         | 207,138 (31,119 + 176,019)      | 49    | city 84,269 / 0, forest 25,324 / 0   | 83%        |

Keep it in the pass folder and the style guide’s Pass log; every later survey is read against it.

Breaking an area down

The ledger names the area; the cause is inside it:

More of perf-pass