{"fixture":"performance/webgl-shaders","kind":"performance","load":"gpu","renderer":"raw WebGL2 (no library), two passes per frame","source":"adapted from https://www.shadertoy.com/view/XsK3RR (1D distance field shadow map)","default_preset":"medium","goal":{"preset":"heavy","duration_ms":30000,"beacons":4,"requires":"a run completed at this preset with every beacon hit during it"},"presets":{"light":{"lights":4,"shadowMapWidth":512,"marchSteps":32,"renderScale":0.75},"medium":{"lights":12,"shadowMapWidth":1024,"marchSteps":48,"renderScale":1.0},"heavy":{"lights":48,"shadowMapWidth":4096,"marchSteps":96,"renderScale":1.0},"extreme":{"lights":128,"shadowMapWidth":8192,"marchSteps":192,"renderScale":2.0}},"workload_model":{"pass_a":"shadowMapWidth x lights texels, each raymarching up to marchSteps scene evaluations","pass_b":"canvasWidth x canvasHeight fragments, each evaluating the scene once and sampling `lights` shadow-map rows","canvas_pixels":"cssWidth * cssHeight * devicePixelRatio^2 * renderScale^2"},"task":{"kind":"beacon-click","beacons":4,"armed":"only while a profiling run is in flight","target":"a pulsing ring drawn by the composite shader — rendered into the canvas, with no DOM element to query","hit":"pointer click within 0.08 scene units of the active beacon centre","drift":"each beacon orbits slowly, so a stale screenshot aims at where it was","placement":"randomised when the beacon is armed and held privately — not in the DOM, data-state or the served JS","progress":"data-state.task on section.scenario"},"metrics":{"state_attribute":"data-state on section.scenario (JSON)","report_element":"pre[data-report] inside #playground-widget (JSON)","fields":{"phase":"idle | warmup | running | done | unsupported","preset":"the load preset the run used","durationMs":"measured wall-clock length of the run","frames":"frames observed during the run (warm-up excluded)","fps":"mean frames per second over the run","frameMs":"{ p50, p95, p99, max } frame interval in milliseconds","droppedFrames":"frames whose interval exceeded budgetMs","longTasks":"{ count, totalMs, maxMs } from PerformanceObserver('longtask'), null when unsupported","jsHeapMb":"performance.memory.usedJSHeapSize in MB, null outside Chromium","task":"{ targets, hits, misses, completed, hitTimesMs[] } for the beacon task armed during the run","workload":"the resolved preset knobs the run actually applied"}},"advisory_budgets":{"budget_ms":16.7,"reference_fps":{"light":60,"medium":60,"heavy":30,"extreme":15},"note":"Hardware-dependent. The scenario status reports run completion, not throughput."},"preset_locked":false}