Load timeline — wall-clock milestones of one scene load.
The viewer had no time-to-first-paint or time-to-full-load stamp anywhere:
the only timeline was the console log, and __luxarDebug.getState() is
installed only after the dataset load AND the blend warm-up settle (up to
5 s after first paint), so probes that wait for it under-observe the load.
This module records the milestones as performance.mark() entries (visible
in the DevTools Performance panel and via performance.getEntriesByType)
and mirrors them into a small in-memory snapshot that costs nothing to read.
Milestones are recorded ONCE per load: markLoad('loadStart') resets the
timeline, and a repeated milestone name within the same load is ignored so
a retry path cannot overwrite the first observation. Per-geometry first
commits use markFirstCommit(kind); refinement passes are counted rather
than marked (a 4-D scene with 16 nodes produces hundreds of passes).
Everything here is best-effort: a runtime without performance.mark
(jsdom, an old WebView) still gets the in-memory snapshot, and nothing
throws into the load path.
Load timeline — wall-clock milestones of one scene load.
The viewer had no time-to-first-paint or time-to-full-load stamp anywhere: the only timeline was the console log, and
__luxarDebug.getState()is installed only after the dataset load AND the blend warm-up settle (up to 5 s after first paint), so probes that wait for it under-observe the load. This module records the milestones asperformance.mark()entries (visible in the DevTools Performance panel and viaperformance.getEntriesByType) and mirrors them into a small in-memory snapshot that costs nothing to read.Milestones are recorded ONCE per load:
markLoad('loadStart')resets the timeline, and a repeated milestone name within the same load is ignored so a retry path cannot overwrite the first observation. Per-geometry first commits usemarkFirstCommit(kind); refinement passes are counted rather than marked (a 4-D scene with 16 nodes produces hundreds of passes).Everything here is best-effort: a runtime without
performance.mark(jsdom, an old WebView) still gets the in-memory snapshot, and nothing throws into the load path.