6976515791
The FPS journal writes gpu-passes.log (every top-level GPU pass) and cpu-phases.csv (wall, process and main-thread CPU per main schedule) beside fps-journal.csv, with a session marker per recording. On Windows the phase clocks count thread cycles (QueryThreadCycleTime / QueryProcessCycleTime at a TSC rate calibrated against Instant), since tick-sized process times cannot split a frame. A crate on top labels recordings through FpsJournalTags; each tag lands in all three files when recording starts and whenever it changes, and scripts/journal-report.py summarises a recording per session and tag state side by side. moonwell-gfx tags recordings with its settings (mwgfx) and gets cheaper at renderScale 2: - the ambient occlusion reads a linear depth pyramid (ao_depth.wgsl, after McGuire's SAO), far samples off coarse levels: 2.2-2.4 ms -> ~1.1 ms at 12 MP, image unchanged (max 9/255); - the water's scene copy is skipped while no view sees a liquid; - shadow casters take their own visibility class, so the world camera stops listing them. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>