Skip to content

Shard the full E2E run and make CI-sensitive probes reproducible - #877

Merged
nulltask merged 5 commits into
develfrom
fix/issue-792-e2e-frame-timing
Oct 31, 2026
Merged

nulltask merged 5 commits into
develfrom
fix/issue-792-e2e-frame-timing

Conversation

@nulltask

Copy link
Copy Markdown
Owner

Closes #792.

Problem

The nightly full E2E run failed every night. It ran E2E_WORKERS=4 on one 4-vCPU ARM runner that renders in software, which spaced frames far apart. As a result:

  • presses timed on the page missed their windows;
  • short charts ended before the test acted;
  • one test spent minutes on UI steps.

Change

Workflow (.github/workflows/e2e.yml)

  • Full run: split into a matrix of four shards, each running one browser on its own runner (--shard N/4, E2E_WORKERS=1), with a 90-minute limit per shard. Each shard uploads its own report artifact.
  • Smoke run (pull requests): unchanged, one runner with four workers.
  • Manual runs: a new grep input on workflow_dispatch runs selected tests on one runner.

Probes, adjusted where CI traces showed the feature working but the measurement failing

  • chart-text: count bright rather than near-white pixels, because Linux draws the thin text with few fully white pixels. A cleared text now compares against the midpoint between the empty and shown counts.
  • bmson-zero-total, bmson-generic: count GOOD as a hit, because these tests check key binding and gauge policy rather than accuracy, and a 50 ms CI frame can land a page-timed press in GOOD. The bmson-zero-total gauge assertion (no recovery) is unchanged.
  • course-maker: timeout raised to 360 s, because it takes several hundred UI steps at about 2.6 s per click on CI.

Verification on CI (this branch)

🤖 Generated with Claude Code

The nightly full run failed the same timing-sensitive tests every night:
on the 4-vCPU runner, four software-rendered browsers space frames far
enough apart that presses miss their windows or a short chart ends
before the test acts (#792). Run the full scope on two workers with a
150-minute limit, keep four for the smoke run, and let a manual run
narrow the tests with a grep input.
On the CI runner Synesthesia's software rendering still starved four
tests on two workers: the course maker's input never resolved, and the
auto-timing and fixed-display presses missed their windows (#792).
Specs that name no built-in skin now open Plain; the two option-
semantics loops that kept failing run on Plain and Native only.
Synesthesia stays covered where a spec names it.
Two workers still starved 31 tests on the full run (#792): presses on
the page missed their windows, text and audio probes fell under their
thresholds. Split the full run over four runners with one browser
each, so each software-rendered browser has the runner to itself;
the smoke run and grep runs stay on one runner.
CI traces showed the features working while the probes failed (#792):
Linux draws the chart text thin, so few pixels pass a near-white test;
a 50 ms frame can land a page-timed press in GOOD; and the course maker
spends seconds per click. Count bright pixels and compare the cleared
text with the shown one, count GOOD as a hit where the test checks key
binding or gauge policy, and give the course maker a longer timeout.
@github-actions

Copy link
Copy Markdown
Contributor

Exports Benchmark

🔴 4 regressions · 5 improvements · 16 within noise · 885 compared

1f6eb113 → b195efcc · 3 runs base / 3 runs head · a regression or improvement is a change past ±8% whose runs do not overlap · times are per call (median)

Regressions (4)

API Base Head Change Run spread (base / head)
chart-editor.addNote 5.43 µs 6.68 µs 23.0% slower ±9.8% / ±0.6%
player-browser.BrowserChartCollectionStore 289 µs 332 µs 15.1% slower ±2.9% / ±4.6%
player-browser.createAudioService 6.74 µs 7.42 µs 10.2% slower ±0.5% / ±12.1%
skin-beatoraja.scene.resolveBeatorajaResultPolyline 17.1 µs 18.7 µs 9.2% slower ±2.6% / ±4.5%

Improvements (5)

API Base Head Change Run spread (base / head)
player-ui.resolvePreviewPortrait 46.9 ns 13.3 ns 71.7% faster ±3.8% / ±0.2%
player-ui.resolvePreviewInfoBox 14.9 ns 11.4 ns 23.8% faster ±0.1% / ±1.3%
chart-writer.stringifyBmson 93.2 µs 84.2 µs 9.7% faster ±2.9% / ±2.6%
player-browser.createDrawnRandomMixEntry 17.9 ns 16.2 ns 9.4% faster ±4.5% / ±2.8%
player-browser.loadChartCollectionFromFiles 124 µs 112 µs 9.2% faster ±0.9% / ±6.5%

Changed packages

app-accounts, app-leaderboard, app-play, chart-audio-renderer, chart-editor, chart-model, chart-parser, chart-source, chart-writer, player-browser, player-engine, player-node-audio, player-scene-model, player-skin-sdk, player-terminal, player-ui, player-ui-react, player-ui-vue, shared-utils, skin-beatoraja, skin-lr2, worker-play: 885 cases compared, median 0.1% faster.

All 885 cases
API Base Head Change Run spread (base / head)
chart-audio-renderer.renderChartFile 6.53 ms 6.10 ms 6.6% faster (I/O) ±3.1% / ±4.9%
chart-audio-renderer.renderJSON 3.93 ms 3.79 ms 3.4% faster (I/O) ±2.5% / ±3.7%
chart-audio-renderer.renderSingleSample 8.10 µs 8.13 µs 0.4% slower (I/O) ±0.3% / ±1.2%
chart-audio-renderer.writeAudioFile 185 µs 193 µs 4.4% slower (I/O) ±7.1% / ±6.2%
chart-editor.addNote 5.43 µs 6.68 µs 23.0% slower 🔴 ±9.8% / ±0.6%
chart-editor.createBlankJSON 395 ns 389 ns 1.5% faster ±2.1% / ±0.5%
chart-editor.deleteNote 5.15 µs 5.58 µs 8.4% slower ±2.2% / ±10.5%
chart-editor.exportChart 251 µs 237 µs 5.6% faster (I/O) ±10.1% / ±0.8%
chart-editor.importChart 120 µs 125 µs 3.7% slower (I/O) ±5.3% / ±1.3%
chart-editor.listNotes 5.67 µs 4.14 µs 26.9% faster · ±20.4% / ±0.9%
chart-editor.loadJSONFile 143 µs 139 µs 2.7% faster (I/O) ±1.8% / ±1.9%
chart-editor.saveJSONFile 234 µs 230 µs 1.6% faster (I/O) ±8.0% / ±16.8%
chart-editor.setMetadata 6.40 µs 4.92 µs 23.1% faster · ±16.8% / ±0.3%
chart-model.applyBMSColorKey 222 µs 222 µs 0.1% faster ±0.1% / ±0.0%
chart-model.buildBGAOpacityTimelines 1.50 µs 1.50 µs 0.5% slower ±2.3% / ±0.3%
chart-model.buildBGATimelines 1.91 µs 1.89 µs 0.9% faster ±1.9% / ±0.4%
chart-model.buildBmsBGATimeline 1.18 µs 1.16 µs 1.7% faster ±1.5% / ±0.7%
chart-model.buildBmsonBGAEventTimeline 1.49 µs 1.54 µs 3.1% slower ±1.0% / ±1.6%
chart-model.buildChartOptionTimeline 992 ns 980 ns 1.2% faster ±0.2% / ±0.6%
chart-model.buildChartTextTimeline 999 ns 996 ns 0.3% faster ±1.5% / ±1.7%
chart-model.buildKeyBoundBGATimeline 1.66 µs 1.67 µs 0.5% slower ±0.7% / ±0.7%
chart-model.canonicalizeFingerprintDocument 6.13 µs 6.11 µs 0.3% faster ±0.9% / ±0.6%
chart-model.canonicalizeJSONValue 775 ns 778 ns 0.3% slower ±0.9% / ±0.5%
chart-model.collectBMSExWAVVolumeMultipliers 1.67 µs 1.65 µs 1.4% faster ±0.7% / ±0.7%
chart-model.collectBmsWAVCmdVolumeMultipliers 776 ns 780 ns 0.5% slower ±0.9% / ±0.5%
chart-model.collectBmsWAVPlaybackModifiers 1.61 µs 1.58 µs 1.6% faster ±0.7% / ±0.4%
chart-model.collectBmsWAVVolumeMultipliers 2.34 µs 2.33 µs 0.4% faster ±1.3% / ±0.9%
chart-model.collectLNOBJEndEvents 1.66 µs 1.65 µs 0.4% faster ±0.4% / ±1.7%
chart-model.collectSampleTriggers 6.24 µs 6.15 µs 1.4% faster ±0.9% / ±0.8%
chart-model.collectSampleTriggersWithContext 5.27 µs 5.25 µs 0.3% faster ±0.7% / ±0.7%
chart-model.compareEvents 16.1 ns 16.0 ns 0.9% faster ±1.0% / ±0.1%
chart-model.compileChartOptions 1.83 µs 1.86 µs 1.3% slower ±0.8% / ±2.0%
chart-model.computeChartFingerprint 185 µs 197 µs 6.4% slower ±8.9% / ±1.5%
chart-model.computeFingerprintOfDocument 11.7 µs 11.4 µs 1.9% faster ±2.4% / ±0.5%
chart-model.computePlayFingerprint 29.9 µs 30.5 µs 2.1% slower ±1.9% / ±1.9%
chart-model.countScoredNotes 5.31 µs 5.29 µs 0.5% faster ±0.5% / ±0.5%
chart-model.createBeatAtSecondsResolver 1.44 µs 1.40 µs 2.8% faster ±1.3% / ±0.3%
chart-model.createBeatAtSecondsResolverFromTimingResolver 1.41 µs 1.40 µs 0.8% faster ±1.8% / ±1.1%
chart-model.createBeatResolver 12.5 ns 13.5 ns 7.4% slower ±15.5% / ±5.5%
chart-model.createBmsonSamplePlaybackMap 1.68 µs 1.70 µs 1.0% slower ±1.2% / ±0.7%
chart-model.createBPMTimeline 1.24 µs 1.23 µs 0.9% faster ±0.9% / ±0.4%
chart-model.createChartFingerprintDocument 75.7 µs 80.8 µs 6.7% slower ±3.8% / ±2.8%
chart-model.createMeasureTimeline 1.29 µs 1.28 µs 0.6% faster ±0.5% / ±1.2%
chart-model.createPlayFingerprintDocument 15.8 µs 15.6 µs 1.3% faster ±1.6% / ±0.8%
chart-model.createScrollTimeline 38.5 ns 37.3 ns 3.3% faster ±3.6% / ±5.8%
chart-model.createSpeedTimeline 37.3 ns 36.4 ns 2.5% faster ±10.5% / ±7.7%
chart-model.createStopBeatWindows 1.38 µs 1.37 µs 0.3% faster ±0.9% / ±1.3%
chart-model.createTimingBuildContext 198 ns 197 ns 0.5% faster ±3.0% / ±0.3%
chart-model.createTimingResolver 1.16 µs 1.15 µs 1.6% faster ±0.8% / ±1.0%
chart-model.createTimingResolverWithContext 1.16 µs 1.14 µs 2.1% faster ±1.1% / ±0.9%
chart-model.drawRandomOutcomes 62.4 ns 62.7 ns 0.4% slower ±0.4% / ±0.1%
chart-model.evaluateControlFlow 223 ns 226 ns 1.2% slower ±1.2% / ±8.7%
chart-model.eventToBeat 10.2 ns 10.2 ns 0.5% faster ±2.6% / ±1.9%
chart-model.exWAVVolumeMillibelsToLinearGain 5.95 ns 6.00 ns 0.8% slower ±1.9% / ±2.2%
chart-model.findPlayModeLane 151 ns 143 ns 5.3% faster ±2.0% / ±1.4%
chart-model.firesBeforeTempoReversal 14.8 ns 14.9 ns 1.0% slower ±2.9% / ±2.3%
chart-model.getMeasureBeats 5.97 ns 6.05 ns 1.3% slower ±3.3% / ±3.1%
chart-model.getPlayModeLayouts 11.0 ns 11.0 ns 0.2% faster ±12.8% / ±6.6%
chart-model.hasControlFlow 8.13 ns 8.13 ns ±0.0% ±2.5% / ±2.9%
chart-model.isBmsBGMVolumeChangeChannel 13.0 ns 13.0 ns 0.1% slower ±0.4% / ±0.6%
chart-model.isBMSDynamicVolumeChangeChannel 13.1 ns 13.1 ns 0.2% slower ±1.1% / ±0.4%
chart-model.isBMSKeyVolumeChangeChannel 13.0 ns 13.0 ns 0.3% slower ±0.4% / ±0.4%
chart-model.isBMSLongNoteChannel 7.52 ns 7.50 ns 0.3% faster ±3.1% / ±2.2%
chart-model.isInvisibleNoteChannel 11.6 ns 11.7 ns 0.9% slower ±1.2% / ±1.2%
chart-model.isLandmineChannel 18.3 ns 18.1 ns 0.7% faster ±1.4% / ±1.6%
chart-model.isPlayableChannel 18.1 ns 18.0 ns 0.6% faster ±1.0% / ±1.6%
chart-model.isPlayLaneSoundChannel 16.4 ns 16.4 ns 0.1% faster ±0.2% / ±0.9%
chart-model.isSampleTriggerChannel 17.7 ns 17.8 ns 0.3% slower ±0.4% / ±0.2%
chart-model.isScrollChannel 7.25 ns 7.50 ns 3.3% slower ±3.2% / ±3.1%
chart-model.isStopChannel 6.92 ns 7.27 ns 5.1% slower ±2.9% / ±18.2%
chart-model.isTempoChannel 6.97 ns 7.00 ns 0.5% slower ±3.3% / ±2.8%
chart-model.mapBMSLongNoteChannelToPlayable 12.1 ns 12.1 ns 0.4% faster ±2.2% / ±2.3%
chart-model.measureToBeat 7.61 ns 7.66 ns 0.6% slower ±3.0% / ±2.4%
chart-model.parseBmsBGA 672 ns 664 ns 1.2% faster ±2.3% / ±1.6%
chart-model.parseBMSDynamicVolumeGain 16.9 ns 16.6 ns 1.3% faster ±1.0% / ±0.8%
chart-model.parseBMSExWAV 943 ns 940 ns 0.3% faster ±0.6% / ±1.6%
chart-model.parseBMSKeyBoundBGA 620 ns 626 ns 1.1% slower ±0.8% / ±0.2%
chart-model.parseBmsWAVCmd 205 ns 205 ns 0.2% slower ±0.8% / ±0.1%
chart-model.parseBPMFrom03Token 19.1 ns 18.9 ns 1.3% faster ±0.7% / ±1.8%
chart-model.pickBGAOpacity 16.4 ns 16.3 ns 0.7% faster ±3.8% / ±1.0%
chart-model.pickBGATint 17.2 ns 17.0 ns 0.8% faster ±1.2% / ±0.2%
chart-model.pickBmsonBGASequenceFrame 12.2 ns 12.2 ns 0.1% faster ±1.7% / ±1.6%
chart-model.pickChartText 10.9 ns 11.0 ns 0.8% slower ±1.9% / ±1.5%
chart-model.pickKeyBoundBGAFrame 6.19 ns 6.18 ns 0.3% faster ±2.3% / ±1.1%
chart-model.resolveBMSExBMPColorKey 1.42 µs 1.43 µs 0.3% slower ±0.9% / ±0.2%
chart-model.resolveBMSLongNotes 794 ns 792 ns 0.2% faster ±1.7% / ±0.0%
chart-model.resolveBmsonModeHintLayout 279 ns 282 ns 1.1% slower ±0.5% / ±1.3%
chart-model.resolveBmsWAVPlayback 134 ns 134 ns ±0.0% ±0.4% / ±0.2%
chart-model.resolveBmsWAVResources 1.55 µs 1.56 µs 0.5% slower ±0.2% / ±1.1%
chart-model.resolveChart 12.0 µs 12.0 µs 0.2% faster ±0.5% / ±0.2%
chart-model.resolveChartLongNoteMode 81.9 ns 84.5 ns 3.1% slower ±1.6% / ±1.8%
chart-model.resolveChartOptionsAt 17.5 ns 17.5 ns 0.1% slower ±0.2% / ±1.3%
chart-model.resolveChartPlayVariant 839 ns 822 ns 2.0% faster ±1.0% / ±0.2%
chart-model.resolveChartReferenceBPM 7.78 ns 7.79 ns 0.2% slower ±1.9% / ±1.9%
chart-model.resolveGenericBmsonKeyCount 122 ns 122 ns 0.6% faster ±0.8% / ±0.6%
chart-model.resolveLandmineDamage 68.4 ns 68.9 ns 0.7% slower ±2.2% / ±3.1%
chart-model.resolveLNOBJLongNotes 1.64 µs 1.62 µs 1.6% faster ±1.0% / ±1.3%
chart-model.resolvePlayLaneChannels 23.8 ns 23.8 ns 0.1% slower ±2.2% / ±2.2%
chart-model.resolvePoorBGAMode 13.5 ns 13.6 ns 0.8% slower ±1.3% / ±0.7%
chart-model.sha256Hex 2.09 µs 2.08 µs 0.8% faster ±0.6% / ±1.2%
chart-model.sortEvents 184 ns 184 ns 0.1% faster ±1.2% / ±0.3%
chart-model.usesMonophonicWAVPlayback 6.99 ns 7.07 ns 1.1% slower ±2.7% / ±2.6%
chart-model.volWAVToLinearGain 5.99 ns 5.95 ns 0.6% faster ±1.9% / ±2.4%
chart-model.wavCmdVolumePercentToLinearGain 5.92 ns 5.90 ns 0.4% faster ±1.9% / ±2.4%
chart-parser.canonicalizeBMSCharset 149 ns 150 ns 0.7% slower ±0.8% / ±0.2%
chart-parser.decodeBMSText 4.50 µs 4.53 µs 0.7% slower ±0.8% / ±0.6%
chart-parser.decodeUTF8Text 237 ns 238 ns 0.6% slower ±1.3% / ±0.9%
chart-parser.extractDeclaredBMSCharset 298 ns 300 ns 0.6% slower ±0.1% / ±0.3%
chart-parser.parseBMS 12.7 µs 12.8 µs 0.7% slower ±0.2% / ±10.9%
chart-parser.parseBMSBytes 23.1 µs 23.2 µs 0.2% slower ±0.4% / ±8.5%
chart-parser.parseBmson 39.5 µs 39.0 µs 1.3% faster ±0.5% / ±1.5%
chart-parser.parseChart 12.6 µs 12.7 µs 0.7% slower ±0.1% / ±2.5%
chart-parser.parseChartFile 124 µs 118 µs 5.0% faster (I/O) ±2.2% / ±7.3%
chart-parser.resolveBMSControlFlow 7.22 µs 7.30 µs 1.2% slower ±1.6% / ±16.1%
chart-parser.resolveBMSControlFlowWithDraws 6.82 µs 6.95 µs 1.8% slower ±12.2% / ±16.7%
chart-source.cloneJSON 20.6 µs 20.9 µs 1.4% slower ±2.0% / ±2.1%
chart-source.cloneJSONFields 647 ns 646 ns 0.2% faster ±1.2% / ±0.6%
chart-source.collectBmsonExtraFields 978 ns 971 ns 0.7% faster ±0.2% / ±1.0%
chart-source.createEmptyJSON 397 ns 392 ns 1.4% faster ±1.2% / ±0.4%
chart-source.ensureMeasure 6.11 µs 5.97 µs 2.2% faster ±6.7% / ±4.2%
chart-source.intToBase36 6.91 ns 7.31 ns 5.8% slower ±2.4% / ±3.3%
chart-source.normalizeChannel 13.8 ns 13.8 ns 0.3% faster ±0.9% / ±0.9%
chart-source.normalizeObjectKey 29.8 ns 29.6 ns 0.7% faster ±0.5% / ±0.3%
chart-source.parseBmsonSubartist 64.5 ns 64.5 ns ±0.0% ±1.2% / ±5.7%
chart-source.resolveBMSBase 7.74 ns 7.87 ns 1.7% slower ±2.6% / ±2.6%
chart-writer.stringifyBMS 50.0 µs 42.3 µs 15.4% faster · ±10.3% / ±1.1%
chart-writer.stringifyBmson 93.2 µs 84.2 µs 9.7% faster 🟢 ±2.9% / ±2.6%
player-browser.alignAudioChunk 6.04 ns 6.07 ns 0.5% slower ±2.6% / ±1.6%
player-browser.applySilentModePlayback 13.9 ns 13.9 ns ±0.0% ±1.6% / ±1.3%
player-browser.applySystemAudioSessionType 12.6 ns 12.6 ns 0.3% faster ±1.8% / ±1.3%
player-browser.asLoadedBytes 7.63 ns 7.51 ns 1.6% faster ±2.0% / ±2.6%
player-browser.blendCodeToPixi 6.21 ns 6.25 ns 0.6% slower ±2.2% / ±1.5%
player-browser.BrowserChartCollectionStore 289 µs 332 µs 15.1% slower 🔴 ±2.9% / ±4.6%
player-browser.buildAudioBus 4.01 µs 1.78 µs 55.7% faster · ±74.7% / ±29.5%
player-browser.chartPlayVariantForBeatorajaVariant 6.11 ns 6.09 ns 0.4% faster ±1.4% / ±1.8%
player-browser.ChartPreviewEngine 244 ns 241 ns 1.3% faster ±4.6% / ±9.2%
player-browser.computeChartFileHashes 53.4 µs 53.7 µs 0.6% slower ±4.9% / ±5.9%
player-browser.computeChartFileSHA256 49.0 µs 49.8 µs 1.7% slower ±5.5% / ±2.1%
player-browser.computeSHA256Hex 46.3 µs 46.3 µs 0.1% slower ±6.7% / ±7.5%
player-browser.CourseMaker 5.37 µs 5.33 µs 0.7% faster ±0.8% / ±0.0%
player-browser.createAudioService 6.74 µs 7.42 µs 10.2% slower 🔴 ±0.5% / ±12.1%
player-browser.createBeatorajaSceneKitCaches 79.5 ns 81.5 ns 2.4% slower ±2.7% / ±5.4%
player-browser.createBeatorajaSkinLoadContext 179 ns 179 ns 0.2% slower ±1.8% / ±4.9%
player-browser.createBeMusicSkinRegistry 1.08 µs 1.09 µs 0.5% slower ±0.9% / ±1.0%
player-browser.createChartHashLookup 141 ns 143 ns 1.1% slower ±1.6% / ±0.7%
player-browser.createCourseChartRecord 1.55 µs 1.56 µs 0.5% slower ±0.9% / ±0.9%
player-browser.createCroppedBeatorajaTexture 6.56 ns 6.68 ns 1.9% slower ±2.9% / ±2.4%
player-browser.createDecideScene 284 µs 275 µs 3.1% faster ±5.0% / ±8.2%
player-browser.createDrawnRandomMixEntry 17.9 ns 16.2 ns 9.4% faster 🟢 ±4.5% / ±2.8%
player-browser.createEagerDropPathPredicate 963 ns 965 ns 0.2% slower ±0.6% / ±0.2%
player-browser.createNewCourseEntry 9.78 ns 9.91 ns 1.3% slower ±1.0% / ±0.6%
player-browser.createNonstopAssets 46.7 µs 46.3 µs 1.0% faster ±0.4% / ±0.3%
player-browser.createPlayScene 159 µs 157 µs 1.2% faster ±3.0% / ±7.6%
player-browser.createRandomCourseEntry 1.51 µs 1.49 µs 1.7% faster ±1.8% / ±2.1%
player-browser.createRandomMixChart 128 ns 128 ns 0.1% slower ±0.1% / ±0.4%
player-browser.createResultScene 71.2 µs 57.1 µs 19.8% faster · ±17.1% / ±61.6%
player-browser.createSelectController 14.1 µs 14.0 µs 0.3% faster ±0.4% / ±0.4%
player-browser.createSelectScene 46.3 µs 45.3 µs 2.0% faster ±4.6% / ±2.8%
player-browser.createSkinFamilyRegistry 194 ns 190 ns 1.7% faster ±4.6% / ±2.2%
player-browser.defaultBeatorajaSkinConfig 42.3 ns 42.3 ns 0.1% faster ±1.2% / ±0.3%
player-browser.defaultBrowserWorkerCount 6.01 ns 6.02 ns 0.2% slower ±2.2% / ±1.6%
player-browser.DeferredDroppedFile 2.62 µs 2.61 µs 0.3% faster ±1.4% / ±1.3%
player-browser.describeChartCollection 7.90 ns 7.88 ns 0.2% faster ±2.6% / ±2.6%
player-browser.describeRecordingFormat 6.60 ns 6.64 ns 0.6% slower ±1.4% / ±22.8%
player-browser.drawBrowserRandomCourse 5.06 µs 5.11 µs 1.0% slower ±0.6% / ±1.2%
player-browser.executeBrowserTask 9.56 µs 9.74 µs 1.8% slower ±0.9% / ±1.3%
player-browser.findBeatorajaThemeBGM 2.99 µs 2.97 µs 0.7% faster ±1.0% / ±0.1%
player-browser.flipRectToPixi 6.06 ns 6.03 ns 0.5% faster ±2.0% / ±1.7%
player-browser.getBrowserWorkerCount 6.16 ns 6.16 ns ±0.0% ±2.1% / ±3.0%
player-browser.getMasterVolume 6.31 ns 6.38 ns 1.1% slower ±2.1% / ±1.8%
player-browser.getSystemAudioSession 7.20 ns 7.21 ns 0.2% slower ±2.9% / ±2.6%
player-browser.isBeatorajaLuaSkinFilePath 41.1 ns 41.0 ns 0.2% faster ±0.6% / ±0.6%
player-browser.isBeatorajaSkinIndicator 136 ns 136 ns ±0.0% ±0.7% / ±0.3%
player-browser.isChartFilePath 35.4 ns 35.4 ns 0.2% slower ±0.1% / ±0.2%
player-browser.isCourseFilePath 475 ns 478 ns 0.6% slower ±0.1% / ±0.5%
player-browser.isLR2SkinFilePath 41.0 ns 41.0 ns ±0.0% ±0.6% / ±0.6%
player-browser.loadAssetBytes 232 ns 228 ns 1.9% faster ±0.4% / ±0.3%
player-browser.loadBeatorajaChartImages 567 ns 565 ns 0.4% faster ±1.3% / ±1.4%
player-browser.loadBeatorajaFonts 633 ns 636 ns 0.5% slower ±1.1% / ±0.7%
player-browser.loadBeatorajaSceneKit 11.2 µs 11.2 µs ±0.0% ±0.5% / ±0.6%
player-browser.loadBeatorajaTexturesFromBundle 323 ns 330 ns 2.2% slower ±2.5% / ±5.4%
player-browser.loadBeatorajaThemeFromFiles 575 ns 541 ns 6.0% faster ±4.1% / ±4.7%
player-browser.loadChartCollectionFromDrop 130 µs 118 µs 8.6% faster · ±4.4% / ±5.8%
player-browser.loadChartCollectionFromFiles 124 µs 112 µs 9.2% faster 🟢 ±0.9% / ±6.5%
player-browser.logger 10.6 ns 10.7 ns 1.3% slower ±2.1% / ±1.1%
player-browser.masterOutput 13.1 ns 13.0 ns 0.6% faster ±0.4% / ±0.5%
player-browser.materializeDroppedFiles 1.92 µs 1.89 µs 1.6% faster ±0.7% / ±1.2%
player-browser.md5HexOfBytes 760 ns 749 ns 1.5% faster ±0.7% / ±0.7%
player-browser.mergeCompressorParams 112 ns 109 ns 2.1% faster ±2.1% / ±1.2%
player-browser.normalizeBrowserWorkerCount 5.96 ns 5.98 ns 0.3% slower ±1.5% / ±1.6%
player-browser.parseCompressorMode 18.2 ns 18.2 ns 0.4% faster ±1.2% / ±0.4%
player-browser.pickBeatorajaPlayableSkinVariant 20.5 ns 20.3 ns 0.9% faster ±1.6% / ±1.0%
player-browser.pickBeatorajaPlayableVariant 6.07 ns 6.03 ns 0.7% faster ±1.9% / ±5.3%
player-browser.pickRecorderMIMEType 797 ns 782 ns 2.0% faster ±0.3% / ±1.6%
player-browser.PlayOptionMismatchError 2.35 µs 2.34 µs 0.5% faster ±0.6% / ±0.6%
player-browser.readCourseFile 4.60 µs 4.60 µs ±0.0% ±0.2% / ±0.3%
player-browser.readDroppedFiles 239 ns 248 ns 3.6% slower ±2.7% / ±2.9%
player-browser.readFilesIntoBytesMap 4.62 µs 4.59 µs 0.7% faster (I/O) ±1.1% / ±0.5%
player-browser.recorderMIMECandidates 1.88 µs 1.87 µs 0.3% faster ±1.0% / ±0.1%
player-browser.recordingAudioCodecs 6.00 ns 5.94 ns 1.0% faster ±2.2% / ±1.9%
player-browser.recordingFileExtension 34.8 ns 34.9 ns 0.2% slower ±0.1% / ±0.5%
player-browser.recordingVideoCodecs 48.8 ns 51.3 ns 5.1% slower ±7.5% / ±5.6%
player-browser.Rectangle 6.03 ns 6.12 ns 1.5% slower ±0.9% / ±1.9%
player-browser.releaseBeatorajaSceneKitAssets 127 ns 125 ns 2.0% faster ±9.2% / ±3.6%
player-browser.resolveBeatorajaChartImage 6.21 ns 5.97 ns 3.9% faster ±3.4% / ±1.9%
player-browser.resolveBeatorajaSkinConfig 130 ns 132 ns 1.7% slower ±3.3% / ±3.0%
player-browser.resolveCaptureSize 6.08 ns 6.13 ns 0.7% slower ±2.8% / ±1.5%
player-browser.resolveChartAsset 2.54 µs 2.51 µs 1.2% faster ±0.8% / ±0.5%
player-browser.resolveChartAudioAsset 10.9 µs 10.8 µs 1.1% faster ±0.7% / ±0.7%
player-browser.resolveChartBGAAsset 49.3 µs 49.1 µs 0.4% faster ±0.7% / ±0.6%
player-browser.resolveChartImageAsset 5.44 µs 5.42 µs 0.5% faster ±0.2% / ±0.3%
player-browser.resolveChartSource 8.33 ns 8.35 ns 0.3% slower ±4.3% / ±2.8%
player-browser.resolveCourseEntry 64.8 ns 64.5 ns 0.5% faster ±0.7% / ±0.4%
player-browser.resolveCourseFolders 179 ns 178 ns 0.5% faster ±1.7% / ±3.6%
player-browser.resolveCourseMakerFolders 804 ns 776 ns 3.5% faster ±3.0% / ±4.3%
player-browser.resolveDropFilePath 198 ns 197 ns 0.7% faster ±0.9% / ±0.6%
player-browser.resolveFrameTimestamp 6.00 ns 6.04 ns 0.7% slower ±2.0% / ±2.0%
player-browser.resolveRendererPreference 147 ns 145 ns 1.4% faster ±1.2% / ±2.3%
player-browser.resolveRenderResolution 195 ns 193 ns 0.9% faster ±0.3% / ±1.5%
player-browser.resolveSelectListWindow 11.3 ns 11.3 ns ±0.0% ±0.4% / ±1.0%
player-browser.resolveSilentModeAudioSessionType 5.93 ns 5.93 ns ±0.0% ±2.1% / ±2.3%
player-browser.runBrowserTask 20.4 µs 19.8 µs 3.1% faster ±3.0% / ±1.5%
player-browser.sanitizeBusVolume 6.36 ns 6.22 ns 2.3% faster ±2.4% / ±2.4%
player-browser.sanitizeMasterVolume 6.38 ns 6.35 ns 0.5% faster ±1.8% / ±2.2%
player-browser.SessionScene 578 ns 571 ns 1.2% faster ±0.8% / ±0.4%
player-browser.setMasterVolume 473 µs 583 µs 23.3% slower · ±45.9% / ±41.3%
player-browser.shouldCaptureFrame 6.11 ns 6.03 ns 1.3% faster ±1.5% / ±1.6%
player-browser.splitDroppedChartAndThemeFiles 2.62 µs 2.61 µs 0.3% faster ±0.3% / ±0.5%
player-browser.summarizeBeatorajaPlaySkins 121 ns 121 ns 0.2% slower ±0.7% / ±0.3%
player-browser.summarizeBrowserCompat 68.0 ns 67.3 ns 1.0% faster ±1.4% / ±0.5%
player-browser.supportsSystemAudioSession 7.74 ns 7.74 ns ±0.0% ±2.0% / ±2.1%
player-browser.supportsWebCodecsRecording 11.1 ns 11.0 ns 0.8% faster ±0.4% / ±1.1%
player-engine.course.applyCourseLongNoteConstraint 81.1 ns 81.5 ns 0.5% slower ±0.4% / ±1.0%
player-engine.course.applyUndefinedLongNoteMode 69.2 ns 69.4 ns 0.2% slower ±0.1% / ±0.2%
player-engine.course.beatorajaClearType 6.19 ns 6.17 ns 0.3% faster ±1.5% / ±1.7%
player-engine.course.buildLR2CourseHash 1.60 µs 1.60 µs 0.1% faster ±0.8% / ±0.4%
player-engine.course.buildNonstopCourseReplay 899 µs 891 µs 0.8% faster ±2.1% / ±2.3%
player-engine.course.countLR2UnplayedStages 7.16 ns 7.10 ns 0.7% faster ±3.8% / ±3.5%
player-engine.course.courseConstraintEnumName 49.4 ns 48.8 ns 1.0% faster ±1.9% / ±0.7%
player-engine.course.courseConstraintGroup 6.20 ns 6.12 ns 1.3% faster ±2.0% / ±1.9%
player-engine.course.CourseRun 402 µs 394 µs 2.0% faster ±2.0% / ±1.8%
player-engine.course.createCourseChartScore 88.2 ns 88.7 ns 0.5% slower ±0.3% / ±0.2%
player-engine.course.createCourseDraft 6.21 ns 6.23 ns 0.2% slower ±1.5% / ±2.2%
player-engine.course.createCourseStageRef 139 ns 137 ns 1.2% faster ±0.4% / ±1.4%
player-engine.course.createNonstopStageTiming 3.22 µs 3.24 µs 0.8% slower ±0.7% / ±0.7%
player-engine.course.decodeCourseText 1.23 µs 1.16 µs 5.8% faster ±0.6% / ±3.0%
player-engine.course.defaultCourseMakerConstraints 6.14 ns 6.19 ns 0.9% slower ±2.6% / ±2.5%
player-engine.course.drawLR2RandomMix 22.1 µs 22.0 µs 0.4% faster ±0.4% / ±0.5%
player-engine.course.drawRandomCourse 90.9 µs 90.9 µs ±0.0% ±0.4% / ±0.1%
player-engine.course.evaluateCourseChartFilter 108 µs 107 µs 0.9% faster ±2.7% / ±2.1%
player-engine.course.fetchTableHeaderCourses 6.51 µs 6.45 µs 1.0% faster ±0.5% / ±0.2%
player-engine.course.finishCourseDraft 3.82 µs 3.79 µs 0.7% faster ±0.4% / ±0.8%
player-engine.course.isClassCourseConstraints 30.3 ns 30.4 ns 0.4% slower ±0.1% / ±1.7%
player-engine.course.isCourseHiSpeedLocked 8.38 ns 8.29 ns 1.0% faster ±3.0% / ±2.2%
player-engine.course.isCourseStageFailed 78.2 ns 78.8 ns 0.8% slower ±0.6% / ±0.4%
player-engine.course.isLR2GradeCourse 6.49 ns 6.47 ns 0.3% faster ±2.2% / ±2.5%
player-engine.course.nonstopBPMAt 18.1 ns 18.0 ns 0.3% faster ±0.3% / ±0.5%
player-engine.course.normalizeCourseConstraints 235 ns 227 ns 3.4% faster ±1.8% / ±1.0%
player-engine.course.normalizeCourseTrophies 39.6 ns 39.9 ns 0.8% slower ±14.4% / ±1.5%
player-engine.course.normalizeLR2RandomMixSettings 263 ns 263 ns 0.2% slower ±0.4% / ±1.4%
player-engine.course.parseBeatorajaCommandFolderFile 1.74 µs 1.70 µs 2.7% faster ±1.4% / ±1.5%
player-engine.course.parseBeatorajaCourseData 789 ns 789 ns ±0.0% ±1.8% / ±0.5%
player-engine.course.parseBeatorajaCourseFile 3.02 µs 3.00 µs 0.5% faster ±1.5% / ±0.3%
player-engine.course.parseBeatorajaRandomCourseData 106 ns 103 ns 3.1% faster ±3.9% / ±1.1%
player-engine.course.parseCourseChartFilter 8.67 µs 8.53 µs 1.6% faster ±0.8% / ±0.6%
player-engine.course.parseCourseConstraint 27.3 ns 27.2 ns 0.1% faster ±0.7% / ±14.6%
player-engine.course.parseLR2CourseFile 3.77 µs 3.77 µs 0.1% slower ±0.6% / ±0.6%
player-engine.course.parseLR2NonstopConnections 742 ns 744 ns 0.2% slower ±0.3% / ±0.6%
player-engine.course.parseTableHeaderCourses 1.12 µs 1.12 µs ±0.0% ±1.4% / ±1.1%
player-engine.course.planNonstopCourse 1.18 µs 1.15 µs 1.9% faster ±0.6% / ±0.2%
player-engine.course.prepareNonstopCourse 132 µs 121 µs 8.6% faster · ±8.5% / ±4.2%
player-engine.course.removeLastCourseDraftStage 31.7 ns 31.6 ns 0.2% faster ±0.3% / ±0.5%
player-engine.course.resolveCourseLaneOptions 19.1 ns 19.1 ns 0.1% slower ±0.7% / ±0.5%
player-engine.course.resolveCourseStagePlaySettings 88.1 ns 89.8 ns 1.9% slower ±0.2% / ±1.3%
player-engine.course.resolveCourseStages 25.9 ns 25.3 ns 2.2% faster ±2.1% / ±3.3%
player-engine.course.resolveCourseStageSettings 46.1 ns 45.8 ns 0.6% faster ±0.5% / ±0.8%
player-engine.course.resolveGivenUpPlaySeconds 100 ns 101 ns 1.3% slower ±1.0% / ±1.8%
player-engine.course.resolveLR2GradeCoursePlaySettings 29.6 ns 29.7 ns 0.1% slower ±0.2% / ±0.3%
player-engine.course.resolveLR2RandomMixSettings 250 ns 252 ns 0.7% slower ±0.5% / ±0.3%
player-engine.course.resolveNonstopLastMeasure 6.17 ns 6.13 ns 0.6% faster ±2.6% / ±1.8%
player-engine.course.resolveNonstopRun 24.8 µs 24.7 µs 0.4% faster ±0.4% / ±0.4%
player-engine.course.resolveNonstopStageRanks 350 ns 350 ns 0.1% faster ±3.6% / ±8.3%
player-engine.course.resolveNonstopTempo 1.25 µs 1.22 µs 2.4% faster ±3.6% / ±2.5%
player-engine.course.resolveTableHeaderURL 2.24 µs 2.25 µs 0.3% slower ±1.0% / ±0.7%
player-engine.course.resolveTableModeKeys 16.7 ns 16.6 ns 0.5% faster ±0.5% / ±7.5%
player-engine.course.selectCourseCharts 117 µs 117 µs 0.3% faster ±0.8% / ±2.8%
player-engine.course.serializeBeatorajaCourseFile 93.2 ns 92.8 ns 0.4% faster ±0.4% / ±0.2%
player-engine.course.serializeLR2CourseFile 416 ns 412 ns 1.0% faster ±0.5% / ±2.5%
player-engine.course.stepLR2NonstopConnection 14.3 ns 14.2 ns 0.5% faster ±1.5% / ±0.9%
player-engine.course.stepLR2RandomMixSetting 225 ns 226 ns 0.2% slower ±0.1% / ±1.1%
player-engine.course.stitchNonstopCourse 299 µs 291 µs 2.9% faster ±5.0% / ±4.4%
player-engine.course.withCourseConstraints 184 ns 183 ns 1.0% faster ±0.9% / ±1.3%
player-engine.course.withNonstopConnection 3.99 µs 3.96 µs 0.8% faster ±0.5% / ±1.5%
player-engine.createTempoClock 738 ns 813 ns 10.2% slower · ±1.6% / ±8.6%
player-engine.display.adjustBeatorajaJudgeTiming 9.11 ns 9.13 ns 0.2% slower ±2.0% / ±2.8%
player-engine.display.createLR2ConstantScrollMapper 1.24 µs 1.23 µs 0.6% faster ±2.5% / ±0.3%
player-engine.display.createScrollDistanceMapper 1.41 µs 1.38 µs 2.2% faster ±2.2% / ±1.1%
player-engine.display.extractInvisiblePlayableNotes 1.86 µs 1.85 µs 0.5% faster ±0.6% / ±0.9%
player-engine.display.extractLandmineNotes 2.09 µs 2.07 µs 0.8% faster ±0.2% / ±0.6%
player-engine.display.extractPlayableNotes 10.1 µs 10.0 µs 0.4% faster ±0.6% / ±1.1%
player-engine.display.extractTimedNotes 8.35 µs 8.28 µs 0.8% faster ±0.8% / ±0.7%
player-engine.display.formatSeconds 48.5 ns 48.3 ns 0.4% faster ±0.6% / ±0.8%
player-engine.display.isImageResizeAlgorithm 13.6 ns 13.6 ns ±0.0% ±2.0% / ±1.7%
player-engine.display.isLR2JudgeTimingAutoAdjust 6.23 ns 6.14 ns 1.5% faster ±1.9% / ±1.7%
player-engine.display.pickActiveBGACue 45.5 ns 46.0 ns 1.0% slower ±0.2% / ±0.7%
player-engine.display.pickActiveBGAKey 47.8 ns 47.7 ns 0.2% faster ±0.2% / ±0.4%
player-engine.display.resolveAltModifierLabel 6.32 ns 6.31 ns 0.2% faster ±1.8% / ±2.0%
player-engine.display.resolveDisplayedDifficultyValue 7.14 ns 7.10 ns 0.5% faster ±2.9% / ±2.5%
player-engine.display.resolveDisplayedJudgeRankLabel 1.55 µs 1.54 µs 1.0% faster ±1.0% / ±1.4%
player-engine.display.resolveDisplayedJudgeRankValue 1.77 µs 1.76 µs 0.8% faster ±1.4% / ±0.5%
player-engine.display.resolveDisplayedPlayLevelValue 7.96 ns 7.75 ns 2.7% faster ±2.8% / ±2.9%
player-engine.display.resolveJudgeTimingAutoAdjust 6.19 ns 6.12 ns 1.1% faster ±2.5% / ±1.8%
player-engine.display.ScrollDistanceMapper 1.41 µs 1.38 µs 2.0% faster ±0.7% / ±1.0%
player-engine.display.toTimedInvisibleNote 7.23 µs 7.19 µs 0.5% faster ±0.6% / ±0.8%
player-engine.display.toTimedLandmineNote 7.23 µs 7.20 µs 0.5% faster ±0.5% / ±0.9%
player-engine.display.toTimedPlayableNote 7.29 µs 7.23 µs 0.9% faster ±0.3% / ±0.8%
player-engine.lanes.addLongNotes 23.2 µs 22.6 µs 2.6% faster ±0.2% / ±0.8%
player-engine.lanes.appendFreeZoneInputChannels 2.87 µs 2.87 µs 0.2% slower ±2.4% / ±0.3%
player-engine.lanes.applySevenToNine 28.3 µs 28.7 µs 1.2% slower ±1.7% / ±3.8%
player-engine.lanes.clampExtraNoteDepth 6.18 ns 6.11 ns 1.1% faster ±2.7% / ±1.5%
player-engine.lanes.clampHRandomThresholdBPM 6.23 ns 6.26 ns 0.4% slower ±2.0% / ±2.0%
player-engine.lanes.clampLongNoteRate 6.32 ns 6.31 ns 0.1% faster ±2.9% / ±1.8%
player-engine.lanes.clampScrollRate 6.23 ns 6.22 ns 0.2% faster ±1.6% / ±2.7%
player-engine.lanes.createInputTokenToChannelsMap 578 ns 573 ns 0.8% faster ±0.4% / ±2.7%
player-engine.lanes.createLaneBindings 17.8 µs 17.4 µs 2.0% faster ±3.5% / ±6.2%
player-engine.lanes.drawLaneRandomIndex 6.31 ns 6.26 ns 0.8% faster ±2.0% / ±1.7%
player-engine.lanes.isPlayableInputChannel 7.18 ns 7.13 ns 0.7% faster ±2.9% / ±2.3%
player-engine.lanes.isScratch 6.33 ns 6.32 ns 0.2% faster ±2.1% / ±2.3%
player-engine.lanes.parseLaneRandomSeed 155 ns 155 ns 0.1% slower ±0.2% / ±0.3%
player-engine.lanes.prepareMineModifier 22.1 µs 21.9 µs 0.8% faster ±0.7% / ±0.3%
player-engine.lanes.randomizeAllScratchNotes 9.33 µs 9.27 µs 0.6% faster ±0.5% / ±0.4%
player-engine.lanes.randomizeHRandomNotes 8.05 µs 8.02 µs 0.4% faster ±0.2% / ±0.5%
player-engine.lanes.randomizeLR2ConvergeNotes 2.05 µs 2.05 µs ±0.0% ±1.6% / ±0.6%
player-engine.lanes.randomizeLR2ScatterNotes 5.21 µs 5.14 µs 1.4% faster ±1.6% / ±1.4%
player-engine.lanes.randomizePMSConvergeNotes 15.3 µs 14.9 µs 2.5% faster ±1.6% / ±0.9%
player-engine.lanes.randomizePMSPlayableLanes 3.90 ms 3.92 ms 0.7% slower ±0.2% / ±0.2%
player-engine.lanes.randomizePMSPlayableNotes 7.89 µs 7.85 µs 0.5% faster ±0.7% / ±1.0%
player-engine.lanes.randomizeSpiralNotes 1.11 µs 1.13 µs 1.4% slower ±0.7% / ±0.7%
player-engine.lanes.randomizeSRandomNotes 9.94 µs 10.2 µs 2.4% slower ±0.8% / ±0.7%
player-engine.lanes.resolveAutoScratchChannels 81.1 ns 81.9 ns 1.0% slower ±1.9% / ±3.1%
player-engine.lanes.resolveAutoScratchSides 8.75 ns 8.55 ns 2.3% faster ±3.0% / ±2.2%
player-engine.lanes.resolveEffectiveBattleMode 10.4 ns 10.4 ns 0.4% faster ±2.4% / ±2.1%
player-engine.lanes.resolveKeyChannel 44.0 ns 46.3 ns 5.1% slower ±0.2% / ±2.3%
player-engine.lanes.resolveLaneChannels 8.41 µs 8.47 µs 0.7% slower ±1.7% / ±0.8%
player-engine.lanes.resolveLaneDisplayMode 200 ns 202 ns 1.0% slower ±4.6% / ±1.6%
player-engine.lanes.resolveLaneOptionChannels 71.0 ns 71.3 ns 0.4% slower ±0.2% / ±0.4%
player-engine.lanes.resolveLR2LaneIndex 7.21 ns 7.14 ns 1.0% faster ±2.9% / ±2.0%
player-engine.lanes.resolvePlayVariantLaneChannels 9.20 µs 9.31 µs 1.1% slower ±1.6% / ±0.9%
player-engine.lanes.resolveSideKeySlot 6.13 ns 6.17 ns 0.6% slower ±2.8% / ±2.1%
player-engine.lanes.resolveSideRelativeLaneIndex 6.53 ns 6.56 ns 0.3% slower ±3.2% / ±3.2%
player-engine.lanes.resolveWheelLaneDirection 35.1 ns 35.2 ns 0.2% slower ±7.6% / ±5.9%
player-engine.PlayerInterruptedError 2.08 µs 2.08 µs ±0.0% ±0.5% / ±0.2%
player-engine.preparePlaybackChart 66.5 µs 66.2 µs 0.3% faster ±4.2% / ±2.9%
player-engine.records.abortedRecordPlayFromResult 20.7 ns 20.7 ns 0.3% faster ±0.2% / ±0.3%
player-engine.records.courseRunKeepsRecord 43.1 ns 42.5 ns 1.4% faster ±0.8% / ±2.1%
player-engine.records.courseRunRecordPlay 6.19 ns 6.16 ns 0.5% faster ±1.4% / ±2.3%
player-engine.records.courseStageKeepsRecord 17.5 ns 17.3 ns 1.6% faster ±1.6% / ±0.3%
player-engine.records.courseStageRecordPlayFromResult 8.79 ns 8.60 ns 2.2% faster ±3.7% / ±3.0%
player-engine.records.isCourseRunAtAnotherTempo 15.2 ns 15.1 ns 0.7% faster ±0.8% / ±0.6%
player-engine.records.isCourseRunAutoPlayed 14.9 ns 14.5 ns 2.7% faster ±2.3% / ±0.8%
player-engine.records.mergeCourseStageRecord 22.4 ns 22.0 ns 2.1% faster ±8.3% / ±3.8%
player-engine.records.playKeepsRecord 6.17 ns 6.10 ns 1.0% faster ±2.3% / ±2.1%
player-engine.records.recordPlayFromResult 8.31 ns 8.23 ns 0.9% faster ±2.4% / ±2.8%
player-engine.records.recordPlayFromSummary 78.2 ns 78.2 ns ±0.0% ±0.6% / ±0.8%
player-engine.replay.aggregateCourseResult 531 ns 530 ns 0.1% faster ±0.2% / ±0.1%
player-engine.replay.checkCourseReplayEligibility 4.74 µs 4.83 µs 2.0% slower ±0.8% / ±1.5%
player-engine.replay.checkReplayEligibility 16.5 ns 16.3 ns 1.2% faster ±1.3% / ±0.1%
player-engine.replay.computeCourseFingerprint 4.30 µs 4.36 µs 1.5% slower ±1.3% / ±1.6%
player-engine.replay.computeCourseReplayFingerprint 4.17 µs 4.16 µs 0.1% faster ±2.0% / ±0.2%
player-engine.replay.createCourseFingerprintDocument 440 ns 441 ns 0.2% slower ±1.7% / ±0.9%
player-engine.replay.createCourseReplay 129 µs 129 µs 0.3% faster ±0.5% / ±0.4%
player-engine.replay.createReplayRecorder 18.7 µs 18.5 µs 1.4% faster ±4.5% / ±2.8%
player-engine.replay.diffReplayOptions 368 ns 371 ns 0.8% slower ±0.4% / ±0.8%
player-engine.replay.diffReplayView 76.1 ns 76.0 ns 0.1% faster ±0.5% / ±1.0%
player-engine.replay.extractCourseStage 164 µs 163 µs 0.2% faster ±0.2% / ±0.3%
player-engine.replay.listCourseReplayStageCharts 105 ns 104 ns 1.1% faster ±1.1% / ±1.5%
player-engine.replay.matchesCourseReplayStageChart 68.7 ns 66.5 ns 3.2% faster ±2.8% / ±0.9%
player-engine.replay.parseCourseReplay 134 µs 134 µs 0.3% slower ±5.5% / ±0.6%
player-engine.replay.parseReplay 65.4 µs 65.5 µs 0.1% slower ±4.7% / ±0.4%
player-engine.replay.parseReplayOptionState 385 ns 384 ns 0.3% faster ±0.3% / ±1.0%
player-engine.replay.parseReplayTempoChanges 43.7 ns 43.5 ns 0.6% faster ±0.2% / ±1.4%
player-engine.replay.parseReplayViewState 56.4 ns 58.3 ns 3.4% slower ±1.2% / ±1.8%
player-engine.replay.playedAtAnotherTempo 8.23 ns 8.29 ns 0.7% slower ±2.2% / ±2.6%
player-engine.replay.ReplayParseError 2.08 µs 2.08 µs 0.2% slower ±0.7% / ±0.1%
player-engine.replay.resolve____GaugeUnit 6.27 ns 6.20 ns 1.1% faster ±1.7% / ±1.5%
player-engine.replay.resolveBeatorajaDefaultTotal 6.27 ns 6.20 ns 1.0% faster ±2.1% / ±2.5%
player-engine.replay.resolveBeatorajaHardRecoverMultiplier 6.28 ns 6.27 ns 0.2% faster ±17.8% / ±1.3%
player-engine.replay.resolveChartRulesetFacts 43.9 µs 41.0 µs 6.7% faster ±0.4% / ±1.9%
player-engine.replay.resolveCourseLamp 54.9 ns 53.4 ns 2.7% faster ±0.1% / ±1.6%
player-engine.replay.resolveCoursePlayedRuleset 275 ns 271 ns 1.5% faster ±0.6% / ±0.9%
player-engine.replay.resolveCourseReplayFilename 159 ns 158 ns 0.1% faster ±0.4% / ±0.3%
player-engine.replay.resolveCourseStageChartFingerprints 18.7 ns 18.7 ns 0.1% slower ±0.7% / ±0.3%
player-engine.replay.resolveCourseTrophy 8.49 ns 8.62 ns 1.5% slower ±2.5% / ±2.7%
player-engine.replay.resolveLR2DefaultTotal 6.28 ns 6.28 ns 0.1% slower ±1.2% / ±2.1%
player-engine.replay.resolveLR2HardDamageMultiplier 6.39 ns 6.22 ns 2.6% faster ±17.7% / ±2.0%
player-engine.replay.resolveNonstopNoteStages 23.4 µs 23.3 µs 0.4% faster ±0.2% / ±1.4%
player-engine.replay.resolveNonstopReplayStages 484 ns 488 ns 0.9% slower ±0.9% / ±0.5%
player-engine.replay.resolvePlayChart 9.57 µs 9.65 µs 0.8% slower ±0.9% / ±1.1%
player-engine.replay.resolveReplayFilename 983 ns 985 ns 0.2% slower ±0.5% / ±0.8%
player-engine.replay.resolveReplayHiSpeed 18.4 ns 18.4 ns 0.1% slower ±0.7% / ±3.4%
player-engine.replay.resolveReplayOptionsAt 42.8 ns 42.6 ns 0.4% faster ±0.2% / ±0.3%
player-engine.replay.resolveReplayTempoAt 8.99 ns 8.94 ns 0.6% faster ±2.9% / ±2.9%
player-engine.replay.resolveReplayViewAt 132 ns 131 ns 0.5% faster ±0.8% / ±2.5%
player-engine.replay.resolveRulesetConfig 8.96 µs 8.93 µs 0.4% faster ±1.0% / ±2.3%
player-engine.replay.resolveRulesetResultLamp 40.8 ns 46.2 ns 13.2% slower · ±6.7% / ±7.0%
player-engine.replay.resolveRulesetResultMissCount 8.16 ns 8.16 ns 0.1% slower ±1.7% / ±1.5%
player-engine.replay.roundReplayView 40.1 ns 40.1 ns ±0.0% ±3.0% / ±0.2%
player-engine.replay.serializeCourseReplay 44.9 µs 44.9 µs ±0.0% ±0.6% / ±0.4%
player-engine.replay.serializeReplay 22.0 µs 22.0 µs 0.2% faster ±0.3% / ±0.2%
player-engine.replay.simulateCourseReplay 60.3 µs 60.2 µs 0.3% faster ±0.7% / ±0.9%
player-engine.replay.simulateReplay 74.5 µs 74.0 µs 0.7% faster ±0.7% / ±1.0%
player-engine.replay.simulateReplayRulesets 166 µs 163 µs 2.0% faster ±1.2% / ±0.9%
player-engine.replay.splitNonstopReplay 54.3 µs 53.7 µs 1.1% faster ±0.7% / ±1.3%
player-engine.resolveChartRulesetFacts 40.4 µs 38.8 µs 4.1% faster ±17.3% / ±4.3%
player-engine.resolvePlayChart 9.50 µs 10.3 µs 8.7% slower ±12.0% / ±5.7%
player-engine.ruleset.betterClearLamp 22.5 ns 22.5 ns 0.1% slower ±0.6% / ±3.6%
player-engine.ruleset.clampCustomJudgeRate 6.23 ns 6.21 ns 0.4% faster ±1.9% / ±2.3%
player-engine.ruleset.clearLampAtRank 7.18 ns 7.15 ns 0.5% faster ±3.7% / ±16.7%
player-engine.ruleset.clearLampRank 14.6 ns 14.7 ns 0.6% slower ±1.3% / ±1.5%
player-engine.ruleset.computeScoreRate 6.99 ns 6.95 ns 0.7% faster ±4.0% / ±2.7%
player-engine.ruleset.createEmptyScore 6.22 ns 6.14 ns 1.3% faster ±1.6% / ±1.8%
player-engine.ruleset.isBmsonRecoveryDisabled 6.21 ns 6.20 ns 0.2% faster ±2.2% / ±2.1%
player-engine.ruleset.isClearLamp 14.0 ns 14.0 ns 0.1% faster ±1.2% / ±1.3%
player-engine.ruleset.isCustomJudgeAssist 116 ns 116 ns 0.4% slower ±0.0% / ±0.3%
player-engine.ruleset.isFullCombo 6.15 ns 6.17 ns 0.3% slower ±2.5% / ±1.5%
player-engine.ruleset.isGaugeType 10.5 ns 10.4 ns 0.9% faster ±2.8% / ±2.1%
player-engine.ruleset.isRulesetId 14.2 ns 14.2 ns 0.2% slower ±1.8% / ±1.8%
player-engine.ruleset.resolve____RankIndexFromScore 7.79 ns 7.83 ns 0.6% slower ±2.2% / ±2.5%
player-engine.ruleset.resolve____RankLabel 10.0 ns 10.0 ns 0.1% slower ±0.8% / ±1.3%
player-engine.ruleset.resolveClearLamp 53.0 ns 53.3 ns 0.6% slower ±1.1% / ±0.5%
player-engine.ruleset.resolveCourseClearLamp 27.6 ns 27.2 ns 1.7% faster ±1.2% / ±1.6%
player-engine.ruleset.resolveDisplayedPoor 6.21 ns 6.21 ns 0.1% faster ±2.3% / ±2.0%
player-engine.ruleset.resolveGaugeEndOnFailure 21.1 ns 21.1 ns 0.3% slower ±0.1% / ±0.5%
player-engine.ruleset.resolveGaugeTypes 6.20 ns 6.14 ns 1.0% faster ±1.8% / ±1.4%
player-engine.ruleset.resolveJudgeWindowsMs 25.8 ns 25.8 ns 0.1% slower ±6.6% / ±0.3%
player-engine.ruleset.resolveLR2MoneyScore 6.85 ns 6.83 ns 0.4% faster ±3.1% / ±2.7%
player-engine.ruleset.resolveMissCount 8.87 ns 8.95 ns 0.8% slower ±0.4% / ±0.7%
player-engine.ruleset.topClearLamp 6.22 ns 6.15 ns 1.1% faster ±2.9% / ±2.0%
player-engine.signals.applyHighSpeedControlAction 8.86 ns 8.90 ns 0.4% slower ±2.8% / ±12.1%
player-engine.signals.createPlayerInputSignalBus 101 ns 103 ns 2.4% slower ±2.8% / ±0.4%
player-engine.signals.createPlayerUISignalBus 174 ns 175 ns 1.1% slower ±0.8% / ±0.8%
player-engine.signals.resolveHighSpeedControlActionFromLaneChannels 14.0 ns 14.0 ns ±0.0% ±1.2% / ±1.5%
player-engine.signals.resolveHighSpeedMultiplier 8.01 ns 8.00 ns 0.1% faster ±2.5% / ±2.8%
player-node-audio.audio-sink.createBrowserAudioSink 4.51 µs 4.94 µs 9.6% slower · ±16.4% / ±35.4%
player-node-audio.loadNodeAudioSampleDurations 1.50 µs 1.47 µs 1.7% faster ±1.4% / ±2.0%
player-scene-model.browseCursor 7.06 ns 6.96 ns 1.5% faster ±2.8% / ±3.2%
player-scene-model.browseEntries 20.7 ns 21.5 ns 3.7% slower ±10.3% / ±36.3%
player-scene-model.browseFolder 6.98 ns 6.98 ns ±0.0% ±2.6% / ±2.9%
player-scene-model.browseSearchError 9.39 ns 9.33 ns 0.6% faster ±3.5% / ±3.0%
player-scene-model.browseSystemSound 6.16 ns 6.15 ns 0.2% faster ±2.2% / ±2.0%
player-scene-model.captureBrowse 129 ns 128 ns 0.7% faster ±0.4% / ±0.6%
player-scene-model.captureFloatingHiSpeed 6.25 ns 6.23 ns 0.4% faster ±1.9% / ±3.1%
player-scene-model.captureReplayView 311 ns 310 ns 0.3% faster ±1.3% / ±0.7%
player-scene-model.chartFolderLabel 15.9 ns 15.8 ns 0.4% faster ±0.4% / ±0.2%
player-scene-model.chartMatchesDifficultyFilter 8.08 ns 8.05 ns 0.5% faster ±2.5% / ±2.1%
player-scene-model.clampFloatingHiSpeed 6.21 ns 6.21 ns ±0.0% ±3.9% / ±2.8%
player-scene-model.clampHiSpeed 9.03 ns 9.02 ns 0.1% faster ±2.0% / ±3.6%
player-scene-model.clampIndex 6.25 ns 6.17 ns 1.3% faster ±2.6% / ±1.2%
player-scene-model.clampJudgeTimingMs 6.30 ns 6.27 ns 0.5% faster ±2.8% / ±2.2%
player-scene-model.clampShutter 6.90 ns 6.94 ns 0.6% slower ±3.3% / ±3.0%
player-scene-model.courseMatchesKeysFilter 6.51 ns 6.47 ns 0.5% faster ±2.0% / ±2.5%
player-scene-model.createBrowseState 31.0 ns 31.0 ns ±0.0% ±0.5% / ±0.3%
player-scene-model.createCourseCombo 6.21 ns 6.26 ns 0.8% slower ±2.1% / ±2.3%
player-scene-model.createPlayState 122 ns 120 ns 1.4% faster ±2.1% / ±1.0%
player-scene-model.cyclePlayOptionValue 29.8 ns 30.6 ns 2.6% slower ±1.1% / ±0.8%
player-scene-model.easeHiSpeed 6.75 ns 6.70 ns 0.7% faster ±1.9% / ±2.3%
player-scene-model.entryMatchesListFilters 44.7 ns 44.8 ns 0.2% slower ±0.5% / ±0.4%
player-scene-model.filterEntriesByChartQuery 24.3 µs 24.4 µs 0.5% slower ±0.9% / ±1.8%
player-scene-model.firstReplaySlot 8.12 ns 8.08 ns 0.5% faster ±2.8% / ±1.5%
player-scene-model.focusedChart 26.3 ns 27.0 ns 2.8% slower ±1.3% / ±1.3%
player-scene-model.focusedCourse 25.8 ns 26.1 ns 1.0% slower ±1.3% / ±1.5%
player-scene-model.focusedEntry 23.6 ns 23.4 ns 0.9% faster ±2.1% / ±1.9%
player-scene-model.formatGaugeLabel 6.22 ns 6.32 ns 1.5% slower ±1.6% / ±2.6%
player-scene-model.gaugePercent 6.21 ns 6.14 ns 1.1% faster ±2.2% / ±1.6%
player-scene-model.groupChartsByFolder 7.73 µs 7.57 µs 2.0% faster ±0.9% / ±1.3%
player-scene-model.hasResultJingle 6.14 ns 6.16 ns 0.3% slower ±2.3% / ±4.2%
player-scene-model.HiSpeedTransition 11.4 ns 11.5 ns 1.5% slower ±6.4% / ±1.5%
player-scene-model.isDuplicatedBattleChoice 6.22 ns 6.20 ns 0.2% faster ±3.6% / ±2.0%
player-scene-model.isFavorite 8.08 ns 8.07 ns 0.2% faster ±1.8% / ±2.1%
player-scene-model.isJudgmentKind 9.60 ns 9.54 ns 0.6% faster ±2.0% / ±1.8%
player-scene-model.isListPlayOption 6.19 ns 6.16 ns 0.5% faster ±2.5% / ±1.7%
player-scene-model.joinCourseStageHistories 10.6 µs 10.6 µs 0.8% slower ±2.4% / ±5.0%
player-scene-model.keysFilterKeyMode 6.20 ns 6.15 ns 0.9% faster ±2.2% / ±2.5%
player-scene-model.libraryChartFilterRecord 38.4 ns 38.4 ns 0.2% faster ±0.1% / ±0.5%
player-scene-model.libraryEntryKey 6.13 ns 6.11 ns 0.2% faster ±2.5% / ±1.9%
player-scene-model.libraryRootFolders 12.3 ns 12.2 ns 1.0% faster ±1.4% / ±0.8%
player-scene-model.listEntriesAt 61.2 µs 60.0 µs 2.0% faster ±1.1% / ±0.4%
player-scene-model.matchesSearchQuery 76.4 ns 76.5 ns 0.1% slower ±0.2% / ±0.5%
player-scene-model.nextChoice 12.0 ns 11.9 ns 1.1% faster ±2.1% / ±0.3%
player-scene-model.normalizeFloatingLaneCover 26.8 ns 27.2 ns 1.1% slower ±1.8% / ±1.1%
player-scene-model.normalizeSearchQuery 31.8 ns 31.7 ns 0.5% faster ±0.3% / ±0.3%
player-scene-model.parseBrowseSearch 3.50 µs 3.45 µs 1.6% faster ±2.3% / ±0.9%
player-scene-model.playEventFromUICommand 6.21 ns 6.21 ns ±0.0% ±2.0% / ±1.8%
player-scene-model.playProgress 6.85 ns 6.81 ns 0.6% faster ±3.5% / ±2.7%
player-scene-model.playResultFromCourseRun 736 ns 821 ns 11.5% slower · ±0.8% / ±7.1%
player-scene-model.playResultRun 6.17 ns 6.17 ns ±0.0% ±1.9% / ±2.0%
player-scene-model.recentJudgeTimings 18.8 ns 19.0 ns 0.8% slower ±0.5% / ±0.3%
player-scene-model.reduceBrowse 2.87 µs 2.89 µs 0.6% slower ±1.7% / ±0.8%
player-scene-model.reduceCourseCombo 6.23 ns 6.21 ns 0.5% faster ±2.8% / ±2.3%
player-scene-model.reduceHiSpeed 221 ns 223 ns 0.9% slower ±0.3% / ±0.7%
player-scene-model.reducePlayState 14.6 µs 14.6 µs 0.2% faster ±1.2% / ±1.6%
player-scene-model.ReplayViewCursor 258 ns 257 ns 0.6% faster ±0.3% / ±1.8%
player-scene-model.resolveConstantAlpha 6.35 ns 6.38 ns 0.3% slower ±17.3% / ±17.1%
player-scene-model.resolveCourseView 88.5 ns 87.1 ns 1.6% faster ±0.5% / ±0.6%
player-scene-model.resolveFloatingHiSpeed 13.7 ns 14.4 ns 5.2% slower ±3.3% / ±4.6%
player-scene-model.resolveGreenNumber 6.14 ns 6.14 ns ±0.0% ±1.8% / ±2.0%
player-scene-model.resolveHiSpeedForWhiteNumber 17.5 ns 17.4 ns 0.3% faster ±0.1% / ±0.2%
player-scene-model.resolveHSFixMultiplier 301 ns 300 ns 0.4% faster ±0.2% / ±0.6%
player-scene-model.resolveLaneCover 11.1 ns 11.0 ns 1.1% faster ±2.7% / ±1.7%
player-scene-model.resolveLibraryChartKeyMode 39.8 ns 39.7 ns 0.3% faster ±0.2% / ±0.4%
player-scene-model.resolveLibraryChartPlayVariant 24.4 ns 24.1 ns 1.2% faster ±1.2% / ±0.5%
player-scene-model.resolveLiftedLane 41.1 ns 40.9 ns 0.6% faster ±2.0% / ±0.9%
player-scene-model.resolveLR2RandomMixKeyMode 6.47 ns 6.48 ns 0.2% slower ±2.7% / ±2.2%
player-scene-model.resolveNormalHiSpeed 7.76 ns 7.72 ns 0.5% faster ±2.9% / ±2.5%
player-scene-model.resolveNoteDisplaySeconds 6.20 ns 6.24 ns 0.5% slower ±1.7% / ±2.2%
player-scene-model.resolvePlayOptions 1.25 µs 1.22 µs 2.1% faster ±0.7% / ±1.3%
player-scene-model.resolvePlayOptionValue 90.3 ns 87.5 ns 3.1% faster ±0.6% / ±2.2%
player-scene-model.resolveRandomModes 45.9 ns 44.5 ns 2.9% faster ±7.2% / ±14.2%
player-scene-model.resolveResultJingle 6.16 ns 6.19 ns 0.6% slower ±1.8% / ±2.3%
player-scene-model.resolveResultJingles 29.5 ns 29.6 ns 0.3% slower ±0.6% / ±1.6%
player-scene-model.resolveResultPresentation 6.27 ns 6.25 ns 0.3% faster ±2.2% / ±2.0%
player-scene-model.resolveWhiteNumber 7.48 ns 7.45 ns 0.3% faster ±1.7% / ±1.1%
player-scene-model.sameBrowseListOptions 7.95 ns 7.99 ns 0.4% slower ±3.7% / ±0.9%
player-scene-model.seedLibraryChartPlayVariant 20.6 ns 20.9 ns 1.2% slower ±3.4% / ±0.2%
player-scene-model.snapHiSpeed 7.14 ns 7.08 ns 0.8% faster ±2.9% / ±2.7%
player-scene-model.sortLibraryEntries 14.2 µs 14.3 µs 0.3% slower ±0.5% / ±0.5%
player-scene-model.startSystemSound 6.17 ns 6.19 ns 0.3% slower ±1.8% / ±2.2%
player-scene-model.stepClassicHiSpeed 17.0 ns 16.8 ns 0.9% faster ±0.5% / ±0.4%
player-scene-model.stepFloatingHiSpeed 6.66 ns 6.51 ns 2.3% faster ±2.9% / ±2.0%
player-scene-model.stepPlayerHiSpeed 17.0 ns 17.0 ns 0.2% faster ±0.3% / ±0.7%
player-scene-model.stepReplaySlot 10.2 ns 10.2 ns 0.2% faster ±2.6% / ±1.0%
player-scene-model.systemSoundSetFromBeatoraja 353 ns 335 ns 5.1% faster ±4.7% / ±7.5%
player-scene-model.wrappedCursorDelta 6.24 ns 6.19 ns 0.7% faster ±2.1% / ±1.2%
player-skin-sdk.audioDrive 106 ns 107 ns 0.7% slower ±1.4% / ±1.1%
player-skin-sdk.bandAt 8.11 ns 8.11 ns 0.1% slower ±0.6% / ±0.6%
player-skin-sdk.bandLevel 8.41 ns 8.40 ns 0.2% faster ±0.5% / ±1.0%
player-skin-sdk.binJudgmentTimings 9.42 µs 9.31 µs 1.1% faster ±0.9% / ±1.4%
player-skin-sdk.browseEntryBadge 14.6 ns 14.6 ns 0.3% faster ±1.1% / ±1.1%
player-skin-sdk.browseEntryTitle 14.4 ns 14.4 ns ±0.0% ±0.9% / ±1.1%
player-skin-sdk.clamp 6.03 ns 5.93 ns 1.7% faster ±2.8% / ±1.7%
player-skin-sdk.comboTier 6.01 ns 5.96 ns 0.8% faster ±2.0% / ±1.8%
player-skin-sdk.createMomentState 5.97 ns 6.05 ns 1.2% slower ±2.4% / ±1.8%
player-skin-sdk.defineBeMusicSkin 139 ns 140 ns 0.4% slower ±0.8% / ±2.6%
player-skin-sdk.describeCourseCard 136 ns 136 ns 0.1% slower ±0.5% / ±0.2%
player-skin-sdk.easeOutBack 6.11 ns 6.15 ns 0.7% slower ±2.3% / ±2.4%
player-skin-sdk.easeOutCubic 6.05 ns 6.01 ns 0.6% faster ±1.7% / ±2.1%
player-skin-sdk.effectProfile 5.99 ns 6.02 ns 0.4% slower ±2.7% / ±2.1%
player-skin-sdk.flashingGreatColor 8.82 ns 8.86 ns 0.4% slower ±0.2% / ±0.4%
player-skin-sdk.formatBPMRange 9.58 ns 9.44 ns 1.5% faster ±1.3% / ±2.0%
player-skin-sdk.formatChartLength 25.6 ns 25.8 ns 0.7% slower ±0.5% / ±1.1%
player-skin-sdk.formatPlayVariantLabel 576 ns 579 ns 0.5% slower ±0.3% / ±2.9%
player-skin-sdk.hash01 5.95 ns 5.96 ns ±0.0% ±2.3% / ±1.9%
player-skin-sdk.holdSeed 8.38 ns 8.30 ns 1.0% faster ±1.2% / ±1.6%
player-skin-sdk.holdSparks 1.80 µs 1.79 µs 0.4% faster ±0.4% / ±1.1%
player-skin-sdk.impulse 6.01 ns 5.98 ns 0.4% faster ±2.0% / ±2.6%
player-skin-sdk.isFlashingGreat 5.94 ns 6.03 ns 1.6% slower ±2.2% / ±1.9%
player-skin-sdk.isScratchLaneForVariant 6.55 ns 6.66 ns 1.6% slower ±3.5% / ±2.9%
player-skin-sdk.isSupportedBeMusicSkinAPIVersion 5.93 ns 5.93 ns ±0.0% ±2.9% / ±1.8%
player-skin-sdk.judgeDisplayWord 5.92 ns 5.98 ns 1.1% slower ±2.3% / ±2.4%
player-skin-sdk.loadingDots 25.7 ns 25.5 ns 0.7% faster ±0.4% / ±0.7%
player-skin-sdk.longNoteCentreLineAlpha 6.31 ns 6.30 ns 0.1% faster ±2.3% / ±2.2%
player-skin-sdk.momentProgress 5.96 ns 5.97 ns 0.1% slower ±2.7% / ±2.7%
player-skin-sdk.punchScale 6.32 ns 6.33 ns 0.2% slower ±1.8% / ±1.8%
player-skin-sdk.resolveBeMusicLaneKind 7.15 ns 7.20 ns 0.7% slower ±2.7% / ±2.1%
player-skin-sdk.resolveBeMusicSelectLayout 6.74 ns 6.71 ns 0.4% faster ±2.4% / ±3.7%
player-skin-sdk.resolveBeMusicSkinSettings 61.9 ns 62.1 ns 0.3% slower ±0.1% / ±0.1%
player-skin-sdk.resolveBeMusicStage 8.91 ns 8.72 ns 2.1% faster ±2.2% / ±2.6%
player-skin-sdk.resolveChartStats 12.2 ns 12.2 ns 0.5% slower ±1.1% / ±0.9%
player-skin-sdk.resolveChartTags 5.94 ns 5.91 ns 0.5% faster ±2.1% / ±1.3%
player-skin-sdk.resolveFallbackLaneLayout 3.12 µs 3.06 µs 1.8% faster ±1.4% / ±1.4%
player-skin-sdk.resolveFallbackPlayfieldSpan 27.6 ns 27.5 ns 0.4% faster ±0.4% / ±0.3%
player-skin-sdk.resolveFluidStage 6.23 ns 6.28 ns 0.7% slower ±2.0% / ±2.0%
player-skin-sdk.resolveFluidStageSize 8.46 ns 8.50 ns 0.5% slower ±2.2% / ±2.2%
player-skin-sdk.resolveGameplayLaneGeometry 4.27 µs 4.19 µs 1.8% faster ±1.5% / ±1.6%
player-skin-sdk.resolveGameplayLayout 4.35 µs 4.31 µs 0.9% faster ±0.6% / ±1.0%
player-skin-sdk.resolveLaneRuns 415 ns 416 ns 0.2% slower ±0.6% / ±0.9%
player-skin-sdk.resolveMilestoneArea 7.01 ns 6.98 ns 0.5% faster ±2.6% / ±2.3%
player-skin-sdk.resolvePortraitLaneLayout 3.41 µs 3.34 µs 2.0% faster ±1.6% / ±2.7%
player-skin-sdk.resolveResultLamp 32.0 ns 32.3 ns 0.6% slower ±0.6% / ±1.5%
player-skin-sdk.resolveResultTrackRows 579 ns 576 ns 0.5% faster ±0.5% / ±0.5%
player-skin-sdk.resolveResultVerdict 6.04 ns 5.98 ns 1.0% faster ±1.8% / ±2.8%
player-skin-sdk.resolveSkinlessLaneLayout 2.81 µs 2.75 µs 2.0% faster ±1.3% / ±1.2%
player-skin-sdk.resolveStageBGARect 10.6 ns 10.6 ns 0.1% slower ±0.9% / ±0.6%
player-skin-sdk.resolveStageOrientation 6.69 ns 6.75 ns 0.9% slower ±3.1% / ±2.9%
player-skin-sdk.resolveTouchLaneLayout 3.62 µs 3.53 µs 2.5% faster ±1.0% / ±1.4%
player-skin-sdk.rollUpValue 6.24 ns 6.28 ns 0.6% slower ±2.4% / ±2.5%
player-skin-sdk.selectListRows 218 ns 231 ns 6.1% slower ±3.3% / ±4.8%
player-skin-sdk.shouldPreserveFallbackSideWidth 5.97 ns 5.95 ns 0.4% faster ±1.5% / ±2.7%
player-skin-sdk.stageProgress 6.04 ns 6.03 ns 0.2% faster ±2.0% / ±1.9%
player-skin-sdk.supportsPortraitLayout 5.93 ns 5.95 ns 0.3% slower ±2.4% / ±1.8%
player-skin-sdk.supportsTouchLayout 5.98 ns 5.94 ns 0.6% faster ±2.7% / ±2.1%
player-skin-sdk.updateMoments 25.4 ns 25.6 ns 0.5% slower ±34.4% / ±0.6%
player-skin-sdk.uses____LaneWidths 5.90 ns 5.98 ns 1.3% slower ±1.9% / ±2.2%
player-skin-sdk.validateBeMusicSkin 133 ns 133 ns 0.4% faster ±1.2% / ±1.4%
player-skin-sdk.validateBeMusicSkinSettings 260 ns 260 ns ±0.0% ±0.4% / ±1.2%
player-terminal.appendFreeZoneInputChannels 4.90 µs 4.77 µs 2.6% faster ±1.1% / ±1.6%
player-terminal.beginKittyKeyboardProtocolOptIn 31.4 ns 30.9 ns 1.4% faster ±6.9% / ±6.6%
player-terminal.beginStatefulKeyboardProtocolOptIn 46.7 ns 47.5 ns 1.6% slower ±8.4% / ±19.2%
player-terminal.beginWin32InputModeOptIn 29.4 ns 31.6 ns 7.2% slower ±10.1% / ±3.2%
player-terminal.BgaANSIRenderer 17.5 µs 17.4 µs 0.4% faster ±0.9% / ±0.3%
player-terminal.createBgaANSIRenderer 3.27 µs 3.35 µs 2.3% slower (I/O) ±4.1% / ±1.4%
player-terminal.createInputTokenToChannelsMap 3.47 µs 3.42 µs 1.5% faster ±0.4% / ±1.2%
player-terminal.createLaneBindings 2.82 µs 2.80 µs 0.7% faster ±1.1% / ±1.1%
player-terminal.formatJudgeComboDisplay 277 ns 278 ns 0.4% slower ±2.1% / ±1.5%
player-terminal.formatMeasureSignature 103 ns 103 ns 0.1% faster ±1.1% / ±1.5%
player-terminal.loadStageFileANSIImage 101 ns 103 ns 1.6% slower (I/O) ±1.5% / ±1.8%
player-terminal.loadStageFileANSILines 166 ns 164 ns 1.1% faster (I/O) ±1.3% / ±0.4%
player-terminal.loadTerminalANSIImage 1.02 ms 1.01 ms 0.5% faster (I/O) ±0.7% / ±1.6%
player-terminal.PlayerTUI 734 ns 725 ns 1.2% faster ±4.7% / ±2.2%
player-terminal.resolveAnimatedHighSpeedValue 9.53 ns 9.50 ns 0.3% faster ±1.9% / ±1.9%
player-terminal.resolveInputTokenEvent 5.19 µs 5.22 µs 0.6% slower ±1.1% / ±0.8%
player-terminal.resolveLaneDisplayMode 1.57 µs 1.57 µs 0.1% slower ±1.1% / ±1.2%
player-ui.defineBeMusicElements 635 ns 618 ns 2.6% faster ±5.3% / ±4.6%
player-ui.formatPlaybackTime 43.1 ns 43.3 ns 0.5% slower ±0.4% / ±0.6%
player-ui.paintPlayfieldParts 58.9 µs 59.0 µs 0.1% slower ±0.6% / ±2.8%
player-ui.previewContentBottom 6.84 ns 6.88 ns 0.6% slower ±3.4% / ±3.1%
player-ui.resolvePlayfieldParts 2.23 µs 2.22 µs 0.3% faster ±1.7% / ±0.2%
player-ui.resolvePreviewInfoBox 14.9 ns 11.4 ns 23.8% faster 🟢 ±0.1% / ±1.3%
player-ui.resolvePreviewPortrait 46.9 ns 13.3 ns 71.7% faster 🟢 ±3.8% / ±0.2%
player-ui.resolveSeekTarget 6.06 ns 6.27 ns 3.5% slower ±1.6% / ±20.8%
player-ui.setBeMusicTheme 19.3 ns 19.3 ns ±0.0% ±0.1% / ±0.3%
shared-utils.async.settleWithTimeout 890 ns 854 ns 4.0% faster ±1.6% / ±0.7%
shared-utils.basename 704 ns 709 ns 0.7% slower ±2.4% / ±2.5%
shared-utils.clamp 5.99 ns 5.94 ns 0.7% faster ±2.0% / ±2.0%
shared-utils.clampSignedUnit 6.09 ns 5.96 ns 2.1% faster ±1.5% / ±2.3%
shared-utils.cli.isCLIEntryPoint 1.08 µs 1.07 µs 1.3% faster ±0.5% / ±1.1%
shared-utils.compareFractions 6.02 ns 6.01 ns 0.1% faster ±2.1% / ±2.1%
shared-utils.createAbortError 2.01 µs 2.00 µs 0.2% faster ±0.8% / ±0.9%
shared-utils.createFileLogger 206 µs 209 µs 1.3% slower (I/O) ±3.3% / ±6.6%
shared-utils.createNoopLogger 104 ns 103 ns 1.2% faster ±1.1% / ±0.5%
shared-utils.dirname 708 ns 707 ns 0.1% faster ±0.1% / ±1.0%
shared-utils.extname 313 ns 322 ns 2.7% slower ±0.8% / ±2.4%
shared-utils.findCaseInsensitiveMapPath 28.2 ns 28.1 ns 0.3% faster ±1.0% / ±2.1%
shared-utils.floatToInt16 5.99 ns 6.02 ns 0.4% slower ±2.0% / ±2.8%
shared-utils.gcd 11.3 ns 11.2 ns 0.2% faster ±0.3% / ±0.1%
shared-utils.hash.sha256Hex 1.85 µs 1.85 µs ±0.0% ±1.3% / ±1.3%
shared-utils.hash.sha256HexAsync 47.9 µs 48.3 µs 0.8% slower ±3.8% / ±2.0%
shared-utils.hash.sha256HexOfBytes 1.35 µs 1.38 µs 2.3% slower ±0.7% / ±4.0%
shared-utils.isAbortError 1.95 µs 1.95 µs 0.2% faster ±0.4% / ±0.3%
shared-utils.isAudioAssetPath 104 ns 104 ns 0.1% faster ±0.4% / ±0.6%
shared-utils.isMaliciousAssetPath 320 ns 320 ns ±0.0% ±0.9% / ±0.3%
shared-utils.lcm 9.37 ns 9.40 ns 0.4% slower ±0.4% / ±0.2%
shared-utils.loadFileEntryBytes 147 ns 146 ns 0.9% faster ±0.6% / ±0.6%
shared-utils.lookupCaseInsensitiveMapEntry 88.6 ns 88.4 ns 0.1% faster ±0.8% / ±0.3%
shared-utils.normalizeASCIIBase36Code 5.95 ns 5.97 ns 0.4% slower ±2.1% / ±2.1%
shared-utils.normalizeASCIIBase62Code 6.12 ns 6.01 ns 1.8% faster ±1.5% / ±1.3%
shared-utils.normalizeFractionNumerator 6.08 ns 5.99 ns 1.5% faster ±1.7% / ±1.7%
shared-utils.normalizeNonNegativeInt 6.24 ns 5.93 ns 5.0% faster ±2.5% / ±2.2%
shared-utils.normalizePath 780 ns 781 ns 0.1% slower ±0.2% / ±0.3%
shared-utils.normalizePositiveInt 5.99 ns 5.99 ns 0.1% slower ±2.1% / ±1.9%
shared-utils.normalizeSortedUniqueNonNegativeIntegers 225 ns 224 ns 0.2% faster ±0.7% / ±0.2%
shared-utils.optional-node-module.loadOptionalNodeModule 23.2 µs 22.6 µs 2.7% faster ±2.7% / ±3.5%
shared-utils.png.decodePNGToRGBA8 77.4 µs 78.4 µs 1.2% slower ±4.0% / ±7.9%
shared-utils.readFilesIntoEntryMap 2.31 µs 2.32 µs 0.3% slower (I/O) ±1.5% / ±0.9%
shared-utils.resolveCLIPath 41.4 ns 41.5 ns 0.1% slower ±0.2% / ±0.2%
shared-utils.resolveFirstExistingPath 88.2 µs 85.7 µs 2.9% faster (I/O) ±4.6% / ±3.3%
shared-utils.resolveSampleSliceEnvelope 6.22 ns 6.15 ns 1.2% faster ±2.2% / ±2.6%
shared-utils.runWithConcurrency 1.06 µs 1.05 µs 0.9% faster ±0.6% / ±1.0%
shared-utils.sampleSliceEnvelopeGain 6.03 ns 6.05 ns 0.4% slower ±2.2% / ±1.8%
shared-utils.throwIfAborted 5.97 ns 5.94 ns 0.5% faster ±2.2% / ±2.0%
shared-utils.transformStereoPCM 19.4 µs 19.5 µs 0.4% slower ±0.4% / ±8.3%
shared-utils.workerize.invokeWorkerizedFunction 676 ns 782 ns 15.6% slower · ±4.7% / ±6.1%
shared-utils.workerize.workerize 11.3 ms 11.0 ms 1.9% faster (I/O) ±2.5% / ±1.9%
shared-utils.writeStereoPCM16LE 141 ns 140 ns 0.8% faster ±1.1% / ±2.5%
skin-beatoraja.applyBeatorajaOffsetAlpha 30.8 ns 30.8 ns 0.1% faster ±0.4% / ±0.4%
skin-beatoraja.asLoadedBytes 7.47 ns 7.46 ns 0.2% faster ±2.3% / ±2.5%
skin-beatoraja.beatorajaFloatValueSlotCount 8.27 ns 8.43 ns 1.9% slower ±2.8% / ±2.1%
skin-beatoraja.beatorajaGaugeModeFromString 6.67 ns 6.86 ns 2.8% slower ±3.1% / ±3.2%
skin-beatoraja.bombTimerId 7.62 ns 7.65 ns 0.4% slower ±2.4% / ±2.4%
skin-beatoraja.buildBaseOpSet 160 ns 160 ns ±0.0% ±4.8% / ±4.8%
skin-beatoraja.buildDefaultSkinConfigFiles 23.7 ns 23.6 ns 0.4% faster ±1.3% / ±0.6%
skin-beatoraja.buildDefaultSkinConfigOptions 84.8 ns 84.7 ns ±0.0% ±0.2% / ±1.3%
skin-beatoraja.bundleBeatorajaSources 26.3 µs 26.2 µs 0.5% faster ±0.2% / ±0.3%
skin-beatoraja.centerToAnchor 7.82 ns 7.77 ns 0.7% faster ±2.4% / ±1.9%
skin-beatoraja.collectBeatorajaLuaModules 1.17 µs 1.20 µs 1.8% slower ±0.2% / ±1.9%
skin-beatoraja.comboTimerId 6.25 ns 6.18 ns 1.2% faster ±2.7% / ±2.8%
skin-beatoraja.composeBeatorajaFloatValueCells 1.22 µs 1.22 µs 0.1% faster ±0.3% / ±0.9%
skin-beatoraja.composeBeatorajaFloatValueShift 1.19 µs 1.20 µs 0.6% slower ±0.7% / ±0.2%
skin-beatoraja.composeBeatorajaValueCells 683 ns 677 ns 0.8% faster ±1.2% / ±1.5%
skin-beatoraja.composeBeatorajaValueShift 7.65 ns 7.69 ns 0.5% slower ±2.1% / ±2.1%
skin-beatoraja.computeBeatorajaGaugeAnimation 11.4 ns 11.5 ns 0.8% slower ±0.3% / ±0.6%
skin-beatoraja.computeJudgeExistOps 47.0 ns 47.1 ns 0.3% slower ±0.4% / ±1.9%
skin-beatoraja.defaultOpForBeatorajaSkinProperty 14.4 ns 14.6 ns 1.6% slower ±0.9% / ±1.3%
skin-beatoraja.describeBeatorajaLuaError 6.23 ns 6.32 ns 1.4% slower ±1.9% / ±2.0%
skin-beatoraja.describeMissingWildcardDirectory 1.65 µs 1.63 µs 0.8% faster ±0.7% / ±0.3%
skin-beatoraja.detectBeatorajaSkinFormat 63.8 ns 63.6 ns 0.2% faster ±0.6% / ±0.2%
skin-beatoraja.discoverBeatorajaTheme 1.95 ms 1.95 ms 0.4% faster ±1.3% / ±3.9%
skin-beatoraja.endOfNoteTimerId 6.32 ns 6.25 ns 1.1% faster ±2.7% / ±2.9%
skin-beatoraja.evaluateBeatorajaCustomEvents 461 ns 459 ns 0.5% faster ±1.7% / ±1.8%
skin-beatoraja.evaluateBeatorajaCustomTimers 403 ns 400 ns 0.7% faster ±1.2% / ±1.9%
skin-beatoraja.evaluateBeatorajaLuaBoolean 458 ns 457 ns 0.3% faster ±2.3% / ±0.9%
skin-beatoraja.evaluateBeatorajaLuaNumber 457 ns 457 ns 0.2% slower ±0.7% / ±1.5%
skin-beatoraja.evaluateBeatorajaLuaSkin 942 µs 976 µs 3.6% slower ±2.5% / ±6.6%
skin-beatoraja.evaluateBeatorajaLuaString 698 ns 703 ns 0.8% slower ±3.0% / ±3.9%
skin-beatoraja.expandBeatorajaJudgeDestinations 3.06 µs 3.10 µs 1.3% slower ±1.0% / ±0.9%
skin-beatoraja.expandBeatorajaWildcard 1.96 µs 1.97 µs 0.2% slower ±0.6% / ±0.4%
skin-beatoraja.extractBeatorajaSkinHeader 14.2 ns 14.2 ns ±0.0% ±10.7% / ±0.6%
skin-beatoraja.findCaseInsensitivePath 33.8 ns 33.1 ns 2.1% faster ±1.2% / ±1.6%
skin-beatoraja.flattenBeatorajaElements 1.99 µs 2.00 µs 0.2% slower ±0.5% / ±0.8%
skin-beatoraja.floatValueFrameAt 7.52 ns 7.67 ns 2.0% slower ±3.6% / ±2.1%
skin-beatoraja.gaugeExBase 7.32 ns 7.29 ns 0.5% faster ±2.8% / ±2.9%
skin-beatoraja.hcnActiveTimerId 6.00 ns 6.07 ns 1.1% slower ±1.7% / ±1.4%
skin-beatoraja.hcnDamageTimerId 5.96 ns 6.01 ns 0.7% slower ±2.6% / ±2.0%
skin-beatoraja.imageFrameAt 8.43 ns 8.36 ns 0.8% faster ±1.4% / ±2.6%
skin-beatoraja.imageRefFrame 8.25 ns 8.43 ns 2.2% slower ±1.2% / ±1.8%
skin-beatoraja.isBeatorajaLuaFunctionValue 10.2 ns 10.2 ns 0.1% slower ±2.9% / ±2.4%
skin-beatoraja.isElementVisible 31.2 ns 31.2 ns 0.1% faster ±0.3% / ±0.3%
skin-beatoraja.isPerfectJudge 23.3 ns 23.4 ns 0.2% slower ±0.1% / ±0.6%
skin-beatoraja.judgeOpForKind 50.4 ns 50.0 ns 1.0% faster ±0.5% / ±0.9%
skin-beatoraja.judgeTimerId 6.20 ns 6.32 ns 1.8% slower ±2.6% / ±3.4%
skin-beatoraja.keyOffTimerId 7.57 ns 7.56 ns 0.2% faster ±2.5% / ±2.3%
skin-beatoraja.keyOnTimerId 7.53 ns 7.54 ns 0.2% slower ±2.9% / ±2.5%
skin-beatoraja.listBeatorajaSourcePaths 22.4 µs 22.5 µs 0.4% slower ±0.6% / ±0.2%
skin-beatoraja.lnHoldTimerId 7.56 ns 7.52 ns 0.6% faster ±2.5% / ±2.8%
skin-beatoraja.loadAssetBytes 232 ns 230 ns 0.7% faster ±0.8% / ±0.5%
skin-beatoraja.loadBeatorajaPlaySkin 660 µs 661 µs 0.2% slower ±0.2% / ±0.8%
skin-beatoraja.loadBeatorajaSkin 1.08 ms 1.08 ms 0.5% faster ±6.4% / ±10.7%
skin-beatoraja.lookupBytesCaseInsensitive 104 ns 101 ns 2.7% faster ±3.2% / ±2.4%
skin-beatoraja.normalizeBeatorajaCustomEvents 148 ns 149 ns 0.8% slower ±2.6% / ±1.9%
skin-beatoraja.normalizeBeatorajaCustomTimers 33.9 ns 34.5 ns 1.8% slower ±1.3% / ±3.7%
skin-beatoraja.normalizeBeatorajaDestinations 56.1 µs 55.8 µs 0.6% faster ±0.1% / ±1.4%
skin-beatoraja.normalizeBeatorajaFonts 31.8 ns 31.8 ns ±0.0% ±1.4% / ±6.6%
skin-beatoraja.normalizeBeatorajaImages 21.4 µs 21.6 µs 1.3% slower ±0.6% / ±0.2%
skin-beatoraja.normalizeBeatorajaJudgeGraphs 70.5 ns 67.6 ns 4.1% faster ±6.9% / ±1.4%
skin-beatoraja.normalizeBeatorajaJudges 163 ns 163 ns 0.2% slower ±0.3% / ±1.8%
skin-beatoraja.normalizeBeatorajaNote 908 ns 892 ns 1.8% faster ±1.3% / ±2.0%
skin-beatoraja.normalizeBeatorajaPmCharas 113 ns 118 ns 4.0% slower ±2.4% / ±10.5%
skin-beatoraja.normalizeBeatorajaSkinCustomOffsets 81.1 ns 81.5 ns 0.5% slower ±0.5% / ±0.3%
skin-beatoraja.normalizeBeatorajaSliders 165 ns 165 ns 0.2% slower ±4.4% / ±2.4%
skin-beatoraja.normalizeBeatorajaTexts 1.30 µs 1.30 µs ±0.0% ±0.6% / ±0.3%
skin-beatoraja.normalizeBeatorajaTimingDistributionGraphs 193 ns 202 ns 4.9% slower ±0.7% / ±4.5%
skin-beatoraja.normalizeBeatorajaTimingVisualizers 190 ns 197 ns 3.9% slower ±0.8% / ±1.8%
skin-beatoraja.normalizeBeatorajaValues 9.10 µs 9.01 µs 0.9% faster ±0.2% / ±1.0%
skin-beatoraja.parseBeatorajaSkinJSON 321 µs 320 µs 0.2% faster ±0.2% / ±0.5%
skin-beatoraja.parseBeatorajaSkinJSONHeader 318 µs 318 µs 0.1% faster ±0.2% / ±0.4%
skin-beatoraja.parseBeatorajaSongList 3.18 µs 3.21 µs 1.0% slower ±1.0% / ±1.7%
skin-beatoraja.pickBeatorajaNoteRects 27.1 ns 27.1 ns 0.1% faster ±0.7% / ±0.5%
skin-beatoraja.pickBeatorajaPlaySkin 37.4 ns 37.3 ns 0.3% faster ±0.4% / ±0.3%
skin-beatoraja.pickBeatorajaPlaySkinVariant 32.5 ns 33.0 ns 1.3% slower ±0.1% / ±1.1%
skin-beatoraja.playVariantForSkinType 6.51 ns 6.50 ns 0.1% faster ±3.4% / ±2.9%
skin-beatoraja.readFilesIntoBytesMap 20.3 µs 19.0 µs 6.5% faster (I/O) ±5.6% / ±3.8%
skin-beatoraja.relaxBeatorajaJSON 111 µs 111 µs 0.1% slower ±0.2% / ±0.5%
skin-beatoraja.resolveBeatorajaPath 1.15 µs 1.15 µs 0.3% slower ±1.1% / ±0.3%
skin-beatoraja.resolveSourcePath 2.05 µs 2.05 µs ±0.0% ±0.7% / ±0.2%
skin-beatoraja.scene.beatorajaBPMAt 28.0 ns 28.0 ns 0.2% slower ±0.2% / ±0.2%
skin-beatoraja.scene.beatorajaChartTotalReadout 6.02 ns 6.08 ns 0.9% slower ±2.0% / ±1.9%
skin-beatoraja.scene.beatorajaClearLampOp 5.91 ns 5.96 ns 0.7% slower ±2.2% / ±1.6%
skin-beatoraja.scene.beatorajaDifficultyOps 16.8 ns 17.5 ns 3.8% slower ±2.5% / ±5.1%
skin-beatoraja.scene.beatorajaEarlyLateFromTimings 2.91 µs 2.96 µs 1.8% slower ±0.3% / ±0.3%
skin-beatoraja.scene.beatorajaFastSlowOp 11.5 ns 11.8 ns 2.4% slower ±2.5% / ±2.1%
skin-beatoraja.scene.beatorajaGaugePercent 6.67 ns 6.59 ns 1.2% faster ±3.0% / ±2.5%
skin-beatoraja.scene.beatorajaGenericRankOps 40.2 ns 40.4 ns 0.6% slower ±0.3% / ±0.7%
skin-beatoraja.scene.beatorajaJudgeCountBars 6.04 ns 6.06 ns 0.4% slower ±1.8% / ±1.9%
skin-beatoraja.scene.beatorajaJudgeIndex 19.9 ns 19.9 ns 0.1% faster ±0.1% / ±0.8%
skin-beatoraja.scene.beatorajaJudgeRankOp 12.0 ns 11.7 ns 2.1% faster ±9.0% / ±6.8%
skin-beatoraja.scene.beatorajaJudgeStateSlot 19.5 ns 19.5 ns 0.2% slower ±1.5% / ±0.9%
skin-beatoraja.scene.beatorajaKeyModeIndex 18.9 ns 19.0 ns 0.3% slower ±0.8% / ±1.5%
skin-beatoraja.scene.beatorajaKeysFilterIndex 15.2 ns 15.2 ns 0.3% faster ±1.1% / ±2.6%
skin-beatoraja.scene.beatorajaKeysongOp 12.6 ns 13.0 ns 2.5% slower ±2.7% / ±5.1%
skin-beatoraja.scene.beatorajaLaneJudgeImage 6.39 ns 6.27 ns 2.0% faster ±1.2% / ±2.0%
skin-beatoraja.scene.beatorajaLaneJudgeRef 8.38 ns 8.41 ns 0.4% slower ±1.3% / ±1.1%
skin-beatoraja.scene.beatorajaLNModeIndex 5.97 ns 6.01 ns 0.6% slower ±2.5% / ±1.1%
skin-beatoraja.scene.beatorajaMissingCourseStages 126 ns 126 ns ±0.0% ±1.3% / ±1.4%
skin-beatoraja.scene.beatorajaNoteBreakdownBars 11.5 ns 11.6 ns 0.7% slower ±0.8% / ±1.1%
skin-beatoraja.scene.beatorajaNotesJudged 5.94 ns 6.01 ns 1.2% slower ±2.0% / ±1.8%
skin-beatoraja.scene.beatorajaReplayButtonSlot 8.27 ns 8.27 ns 0.1% slower ±2.1% / ±2.5%
skin-beatoraja.scene.beatorajaScoreRate 6.05 ns 6.12 ns 1.2% slower ±2.4% / ±2.4%
skin-beatoraja.scene.beatorajaSortIndex 14.5 ns 14.5 ns 0.1% faster ±1.3% / ±5.1%
skin-beatoraja.scene.beatorajaTimingHistogram 1.32 µs 1.32 µs 0.1% faster ±0.5% / ±0.3%
skin-beatoraja.scene.beatorajaTimingStats 680 ns 669 ns 1.6% faster ±0.9% / ±1.0%
skin-beatoraja.scene.beatorajaWallClockOf 7.41 ns 7.44 ns 0.4% slower ±4.4% / ±1.9%
skin-beatoraja.scene.createBeatorajaJudgeStateGraph 2.29 µs 4.71 µs 106.3% slower · ±35.6% / ±52.6%
skin-beatoraja.scene.discoverBeatorajaSelectBGMPath 102 ns 110 ns 7.7% slower ±2.9% / ±8.7%
skin-beatoraja.scene.discoverBeatorajaSystemSoundPaths 1.58 µs 1.59 µs 0.9% slower ±3.4% / ±0.8%
skin-beatoraja.scene.isBeatorajaCleanHit 20.7 ns 20.8 ns 0.6% slower ±0.3% / ±0.3%
skin-beatoraja.scene.isBeatorajaComboJudge 19.8 ns 19.7 ns 0.1% faster ±0.2% / ±0.5%
skin-beatoraja.scene.joinBeatorajaText 92.6 ns 92.7 ns ±0.0% ±0.2% / ±0.6%
skin-beatoraja.scene.pickBeatorajaThemeBGMPaths 13.3 µs 13.2 µs 0.3% faster ±0.2% / ±0.0%
skin-beatoraja.scene.resolveBeatorajaCharacterTimers 405 ns 408 ns 0.7% slower ±0.6% / ±0.0%
skin-beatoraja.scene.resolveBeatorajaChartText 95.0 ns 95.8 ns 0.9% slower ±0.2% / ±0.6%
skin-beatoraja.scene.resolveBeatorajaChartTraitOps 122 ns 119 ns 2.9% faster ±3.2% / ±1.9%
skin-beatoraja.scene.resolveBeatorajaConstantOps 13.9 ns 12.2 ns 12.4% faster · ±14.6% / ±2.5%
skin-beatoraja.scene.resolveBeatorajaCourseBarOps 207 ns 207 ns ±0.0% ±0.2% / ±0.5%
skin-beatoraja.scene.resolveBeatorajaCourseConstraintOps 163 ns 163 ns ±0.0% ±0.3% / ±1.5%
skin-beatoraja.scene.resolveBeatorajaCourseStageOps 35.4 ns 35.7 ns 0.8% slower ±1.9% / ±3.2%
skin-beatoraja.scene.resolveBeatorajaCourseText 8.80 ns 8.79 ns 0.1% faster ±2.3% / ±2.0%
skin-beatoraja.scene.resolveBeatorajaCoverOps 40.5 ns 38.3 ns 5.4% faster ±4.8% / ±3.6%
skin-beatoraja.scene.resolveBeatorajaDecideGraphValue 7.14 ns 7.08 ns 0.8% faster ±2.6% / ±3.3%
skin-beatoraja.scene.resolveBeatorajaDecideOps 51.4 ns 51.9 ns 0.9% slower ±0.6% / ±2.2%
skin-beatoraja.scene.resolveBeatorajaFrameTimers 78.3 ns 81.7 ns 4.3% slower ±7.9% / ±6.2%
skin-beatoraja.scene.resolveBeatorajaGaugePolyline 17.7 µs 18.5 µs 4.2% slower ±3.9% / ±4.4%
skin-beatoraja.scene.resolveBeatorajaGaugeState 7.20 ns 7.34 ns 1.9% slower ±3.2% / ±2.0%
skin-beatoraja.scene.resolveBeatorajaHCNTimers 108 ns 109 ns 0.9% slower ±1.4% / ±3.6%
skin-beatoraja.scene.resolveBeatorajaJudgeEffect 207 ns 207 ns 0.4% faster ±2.0% / ±0.4%
skin-beatoraja.scene.resolveBeatorajaJudgeStateMove 21.8 ns 22.0 ns 1.0% slower ±0.6% / ±0.9%
skin-beatoraja.scene.resolveBeatorajaLanePlacement 6.04 ns 6.27 ns 3.8% slower ±2.1% / ±1.8%
skin-beatoraja.scene.resolveBeatorajaLaneTimers 63.4 ns 62.5 ns 1.3% faster ±0.9% / ±1.7%
skin-beatoraja.scene.resolveBeatorajaOptionButton 136 ns 136 ns 0.3% slower ±1.1% / ±1.2%
skin-beatoraja.scene.resolveBeatorajaOptionIndex 7.79 ns 7.75 ns 0.6% faster ±2.4% / ±2.4%
skin-beatoraja.scene.resolveBeatorajaPlayGraphValue 6.12 ns 6.03 ns 1.5% faster ±2.7% / ±1.6%
skin-beatoraja.scene.resolveBeatorajaPlayJudgeGraph 6.32 ns 6.34 ns 0.4% slower ±2.0% / ±2.0%
skin-beatoraja.scene.resolveBeatorajaPlayOptionIndex 104 ns 104 ns 0.7% faster ±0.7% / ±1.0%
skin-beatoraja.scene.resolveBeatorajaPlayScoreOps 256 ns 258 ns 0.8% slower ±0.0% / ±1.5%
skin-beatoraja.scene.resolveBeatorajaPlaySliderValue 6.29 ns 6.14 ns 2.3% faster ±18.5% / ±19.3%
skin-beatoraja.scene.resolveBeatorajaPlayStartOps 197 ns 195 ns 1.0% faster ±1.0% / ±4.1%
skin-beatoraja.scene.resolveBeatorajaPlayText 8.73 ns 8.71 ns 0.2% faster ±4.4% / ±2.3%
skin-beatoraja.scene.resolveBeatorajaResultGaugePercent 6.30 ns 6.28 ns 0.3% faster ±2.0% / ±2.0%
skin-beatoraja.scene.resolveBeatorajaResultGaugeState 11.5 ns 11.4 ns 0.5% faster ±1.5% / ±1.8%
skin-beatoraja.scene.resolveBeatorajaResultGraphValue 6.00 ns 6.26 ns 4.3% slower ±2.0% / ±19.7%
skin-beatoraja.scene.resolveBeatorajaResultJudgeGraph 6.05 ns 6.09 ns 0.7% slower ±2.3% / ±2.5%
skin-beatoraja.scene.resolveBeatorajaResultNumber 41.3 ns 42.2 ns 2.1% slower ±0.3% / ±2.9%
skin-beatoraja.scene.resolveBeatorajaResultOps 510 ns 516 ns 1.0% slower ±1.3% / ±1.2%
skin-beatoraja.scene.resolveBeatorajaResultPolyline 17.1 µs 18.7 µs 9.2% slower 🔴 ±2.6% / ±4.5%
skin-beatoraja.scene.resolveBeatorajaResultReplayOps 81.8 ns 81.4 ns 0.6% faster ±2.8% / ±0.6%
skin-beatoraja.scene.resolveBeatorajaResultText 97.4 ns 97.0 ns 0.4% faster ±0.8% / ±0.1%
skin-beatoraja.scene.resolveBeatorajaScoreNumber 23.6 ns 23.2 ns 1.3% faster ±0.6% / ±0.3%
skin-beatoraja.scene.resolveBeatorajaScorePolyline 13.2 ns 13.1 ns 0.2% faster ±2.0% / ±2.3%
skin-beatoraja.scene.resolveBeatorajaScoreTimers 59.4 ns 59.6 ns 0.3% slower ±2.1% / ±1.2%
skin-beatoraja.scene.resolveBeatorajaSeekTimers 90.1 ns 89.6 ns 0.6% faster ±2.7% / ±1.0%
skin-beatoraja.scene.resolveBeatorajaSelectBarOps 445 ns 444 ns 0.2% faster ±0.7% / ±0.5%
skin-beatoraja.scene.resolveBeatorajaSelectNumber 25.5 ns 26.1 ns 2.5% slower ±18.4% / ±20.6%
skin-beatoraja.scene.resolveBeatorajaSelectRefValue 9.07 ns 9.06 ns ±0.0% ±2.1% / ±2.3%
skin-beatoraja.scene.resolveBeatorajaSelectReplayOps 53.7 ns 53.8 ns 0.3% slower ±0.1% / ±0.5%
skin-beatoraja.scene.resolveBeatorajaSelectSliderValue 6.03 ns 5.96 ns 1.2% faster ±2.1% / ±2.3%
skin-beatoraja.scene.resolveBeatorajaSelectText 159 ns 162 ns 1.8% slower ±1.1% / ±0.3%
skin-beatoraja.scene.resolveBeatorajaSkinText 6.71 ns 6.68 ns 0.6% faster ±2.4% / ±2.9%
skin-beatoraja.scene.withBeatorajaCourseStageOps 167 ns 176 ns 5.3% slower ±2.4% / ±2.3%
skin-beatoraja.scene.writeBeatorajaPlayOffset 9.90 ns 9.67 ns 2.3% faster ±2.1% / ±2.4%
skin-beatoraja.sceneForSkinType 13.3 ns 13.2 ns 0.9% faster ±0.7% / ±1.0%
skin-beatoraja.valueFrameAt 8.43 ns 8.14 ns 3.5% faster ±2.4% / ±2.1%
skin-lr2.decodeDDSImageData 140 ns 140 ns 0.4% faster ±1.1% / ±1.2%
skin-lr2.discoverLR2Themes 6.90 µs 6.88 µs 0.2% faster ±0.7% / ±0.3%
skin-lr2.extractDxaArchivesAsFlatFiles 99.1 ns 96.6 ns 2.5% faster ±1.8% / ±2.5%
skin-lr2.isLR2SpecialGraphic 9.57 ns 9.70 ns 1.3% slower ±2.6% / ±2.0%
skin-lr2.isTGAImage 18.5 ns 18.4 ns 0.3% faster ±0.3% / ±0.2%
skin-lr2.loadLR2SkinFromFiles 15.3 µs 15.1 µs 1.4% faster ±1.5% / ±0.4%
skin-lr2.loadLR2SkinFromSourceFiles 8.01 µs 8.00 µs 0.2% faster ±0.6% / ±1.6%
skin-lr2.loadLR2SystemSound 3.19 µs 3.24 µs 1.5% slower ±0.4% / ±0.8%
skin-lr2.loadLR2ThemeBGM 3.18 µs 3.23 µs 1.5% slower ±4.9% / ±1.0%
skin-lr2.loadLR2ThemeSkinsFromFiles 71.0 µs 70.3 µs 0.9% faster ±1.4% / ±2.5%
skin-lr2.parseLR2Font 1.46 µs 1.45 µs 0.7% faster ±2.8% / ±1.3%
skin-lr2.peekLR2SkinInformationType 1.48 µs 1.48 µs 0.2% faster ±1.9% / ±1.4%
skin-lr2.pickLR2PlaySkin 1.23 µs 1.24 µs 0.6% slower ±1.0% / ±1.8%
skin-lr2.pickLR2PlaySkinVariant 1.21 µs 1.21 µs 0.2% slower ±1.4% / ±1.4%
skin-lr2.pickLR2SystemSoundFile 162 ns 162 ns 0.3% faster ±0.3% / ±0.4%
skin-lr2.pickLR2ThemeBGMFile 151 ns 151 ns 0.1% slower ±0.3% / ±0.2%
skin-lr2.readDxaArchive 7.31 ns 7.34 ns 0.5% slower ±2.2% / ±1.9%
skin-lr2.state.isLR2AutoLane 11.6 ns 11.8 ns 1.6% slower ±2.5% / ±1.8%
skin-lr2.state.lr2ShowsCourseCombo 5.98 ns 5.95 ns 0.6% faster ±2.6% / ±1.8%
skin-lr2.state.pickLR2BarBody 16.4 ns 16.6 ns 1.3% slower ±1.5% / ±4.8%
skin-lr2.state.resolveLR2BarLamp 6.06 ns 6.14 ns 1.2% slower ±1.7% / ±1.9%
skin-lr2.state.resolveLR2BarLevel 7.02 ns 7.17 ns 2.0% slower ±2.7% / ±2.3%
skin-lr2.state.resolveLR2ChartFeatures 11.8 ns 11.5 ns 2.0% faster ±3.3% / ±0.7%
skin-lr2.state.resolveLR2CourseConnectionText 11.3 ns 11.4 ns 0.5% slower ±2.3% / ±2.1%
skin-lr2.state.resolveLR2CourseDraftInfo 26.1 ns 26.1 ns ±0.0% ±4.4% / ±4.0%
skin-lr2.state.resolveLR2CourseMakerAction 9.22 ns 9.21 ns 0.1% faster ±3.2% / ±2.4%
skin-lr2.state.resolveLR2CourseMakerButtonState 31.4 ns 31.7 ns 1.0% slower ±0.8% / ±5.3%
skin-lr2.state.resolveLR2CourseMakerOps 62.1 ns 61.2 ns 1.4% faster ±4.9% / ±4.2%
skin-lr2.state.resolveLR2CourseMakerText 6.59 ns 6.59 ns ±0.0% ±3.9% / ±6.0%
skin-lr2.state.resolveLR2CourseNumber 8.91 ns 8.88 ns 0.4% faster ±2.0% / ±2.5%
skin-lr2.state.resolveLR2CourseOps 37.5 ns 37.2 ns 0.9% faster ±4.5% / ±3.1%
skin-lr2.state.resolveLR2CourseStageDifficultyOps 141 ns 132 ns 6.1% faster ±5.3% / ±2.0%
skin-lr2.state.resolveLR2CourseText 10.1 ns 10.1 ns 0.1% faster ±2.1% / ±1.8%
skin-lr2.state.resolveLR2DecideState 245 ns 250 ns 2.0% slower ±1.3% / ±3.7%
skin-lr2.state.resolveLR2DecideTimers 60.2 ns 61.1 ns 1.5% slower ±0.2% / ±2.9%
skin-lr2.state.resolveLR2GaugeRangeOp 11.8 ns 11.9 ns 0.8% slower ±2.4% / ±1.8%
skin-lr2.state.resolveLR2GaugeTypeOps 16.9 ns 17.5 ns 3.4% slower ±1.9% / ±11.3%
skin-lr2.state.resolveLR2GraphReveal 6.07 ns 6.04 ns 0.4% faster ±2.1% / ±1.8%
skin-lr2.state.resolveLR2JudgeCombo 6.49 ns 6.31 ns 2.8% faster ±2.4% / ±2.7%
skin-lr2.state.resolveLR2KeyModeOp 41.3 ns 40.6 ns 1.8% faster ±0.9% / ±1.1%
skin-lr2.state.resolveLR2LampOp 21.8 ns 22.7 ns 4.2% slower ±2.1% / ±4.8%
skin-lr2.state.resolveLR2NonstopStage 20.7 ns 20.4 ns 1.4% faster ±3.2% / ±0.6%
skin-lr2.state.resolveLR2PlayKeyModeOp 26.8 ns 26.4 ns 1.4% faster ±1.2% / ±0.6%
skin-lr2.state.resolveLR2PlayState 1.10 µs 1.10 µs 0.4% faster ±0.4% / ±0.1%
skin-lr2.state.resolveLR2RandomMixButtonState 13.0 ns 13.1 ns 0.8% slower ±1.4% / ±1.3%
skin-lr2.state.resolveLR2RandomMixText 17.0 ns 17.0 ns ±0.0% ±0.4% / ±1.2%
skin-lr2.state.resolveLR2RankOp 18.4 ns 16.3 ns 11.2% faster · ±10.8% / ±2.3%
skin-lr2.state.resolveLR2ResultState 1.13 µs 1.13 µs ±0.0% ±0.4% / ±0.8%
skin-lr2.state.resolveLR2ResultTimers 151 ns 151 ns 0.1% slower ±0.7% / ±0.6%
skin-lr2.state.resolveLR2SelectButton 13.1 ns 13.4 ns 2.9% slower ±11.9% / ±10.5%
skin-lr2.state.resolveLR2SelectState 1.84 µs 1.82 µs 0.9% faster ±2.6% / ±0.2%
skin-lr2.state.resolveLR2SelectTimers 149 ns 151 ns 1.5% slower ±2.3% / ±2.7%
skin-lr2.state.stepLR2JudgeTiming 6.69 ns 6.69 ns 0.1% slower ±2.4% / ±2.2%
skin-lr2.stringToLR2CharCodes 105 ns 104 ns 0.7% faster ±0.9% / ±0.7%
skin-lr2.unicodeToLR2CharCode 26.3 ns 26.4 ns 0.3% slower ±0.2% / ±1.0%

Removed exports (1)

  • player-ui.previewJudgementInset
Within noise (16): past the threshold, but the runs overlap
API Base Head Change Run spread (base / head)
player-browser.buildAudioBus 4.01 µs 1.78 µs 55.7% faster ±74.7% / ±29.5%
skin-beatoraja.scene.createBeatorajaJudgeStateGraph 2.29 µs 4.71 µs 106.3% slower ±35.6% / ±52.6%
chart-editor.listNotes 5.67 µs 4.14 µs 26.9% faster ±20.4% / ±0.9%
chart-editor.setMetadata 6.40 µs 4.92 µs 23.1% faster ±16.8% / ±0.3%
player-browser.createResultScene 71.2 µs 57.1 µs 19.8% faster ±17.1% / ±61.6%
player-browser.setMasterVolume 473 µs 583 µs 23.3% slower ±45.9% / ±41.3%
chart-writer.stringifyBMS 50.0 µs 42.3 µs 15.4% faster ±10.3% / ±1.1%
skin-beatoraja.scene.resolveBeatorajaConstantOps 13.9 ns 12.2 ns 12.4% faster ±14.6% / ±2.5%
shared-utils.workerize.invokeWorkerizedFunction 676 ns 782 ns 15.6% slower ±4.7% / ±6.1%
skin-lr2.state.resolveLR2RankOp 18.4 ns 16.3 ns 11.2% faster ±10.8% / ±2.3%
player-engine.replay.resolveRulesetResultLamp 40.8 ns 46.2 ns 13.2% slower ±6.7% / ±7.0%
player-scene-model.playResultFromCourseRun 736 ns 821 ns 11.5% slower ±0.8% / ±7.1%

…and 4 more.

I/O-bound, not judged (19)

These cases touch the filesystem, so their time follows the OS cache and the disk more than the code.

API Base Head Change Run spread (base / head)
chart-audio-renderer.renderChartFile 6.53 ms 6.10 ms 6.6% faster ±3.1% / ±4.9%
chart-audio-renderer.renderJSON 3.93 ms 3.79 ms 3.4% faster ±2.5% / ±3.7%
chart-audio-renderer.renderSingleSample 8.10 µs 8.13 µs 0.4% slower ±0.3% / ±1.2%
chart-audio-renderer.writeAudioFile 185 µs 193 µs 4.4% slower ±7.1% / ±6.2%
chart-editor.exportChart 251 µs 237 µs 5.6% faster ±10.1% / ±0.8%
chart-editor.importChart 120 µs 125 µs 3.7% slower ±5.3% / ±1.3%
chart-editor.loadJSONFile 143 µs 139 µs 2.7% faster ±1.8% / ±1.9%
chart-editor.saveJSONFile 234 µs 230 µs 1.6% faster ±8.0% / ±16.8%
chart-parser.parseChartFile 124 µs 118 µs 5.0% faster ±2.2% / ±7.3%
player-browser.readFilesIntoBytesMap 4.62 µs 4.59 µs 0.7% faster ±1.1% / ±0.5%
player-terminal.createBgaANSIRenderer 3.27 µs 3.35 µs 2.3% slower ±4.1% / ±1.4%
player-terminal.loadStageFileANSIImage 101 ns 103 ns 1.6% slower ±1.5% / ±1.8%
player-terminal.loadStageFileANSILines 166 ns 164 ns 1.1% faster ±1.3% / ±0.4%
player-terminal.loadTerminalANSIImage 1.02 ms 1.01 ms 0.5% faster ±0.7% / ±1.6%
shared-utils.createFileLogger 206 µs 209 µs 1.3% slower ±3.3% / ±6.6%
shared-utils.readFilesIntoEntryMap 2.31 µs 2.32 µs 0.3% slower ±1.5% / ±0.9%
shared-utils.resolveFirstExistingPath 88.2 µs 85.7 µs 2.9% faster ±4.6% / ±3.3%
shared-utils.workerize.workerize 11.3 ms 11.0 ms 1.9% faster ±2.5% / ±1.9%
skin-beatoraja.readFilesIntoBytesMap 20.3 µs 19.0 µs 6.5% faster ±5.6% / ±3.8%
Excluded: too fast to time (77)

A timed sample lasted 1 µs or less on at least one side (usually a base commit from before calls were batched), so its time is timer noise and no change is shown.

API Base Head
chart-model.createMeasureBoundariesBeats 74.0 ns 74.0 ns
chart-model.mirrorBeatAtTempoReversal 6.23 ns 6.24 ns
chart-model.parseBmsARGB 264 ns 264 ns
chart-model.parseBMSExBMP 624 ns 600 ns
chart-model.resolveChartMainBPM 116 ns 107 ns
player-browser.applyBeatorajaStretchRect 28.4 ns 29.6 ns
player-browser.checkBrowserCompat 163 ns 168 ns
player-browser.createRandomMixEntry 13.7 ns 13.7 ns
player-browser.destinationToSpriteProps 88.0 ns 85.6 ns
player-browser.GameplayRecorder 104 ns 141 ns
player-browser.SceneController 256 ns 256 ns
player-browser.setBrowserWorkerCount 38.4 ns 38.9 ns

…and 65 more.

Run details
Measure Value
Median change (all compared cases) +0.15%
Mean change +0.61%
Overall verdict (median vs. threshold) unchanged
Compared / within noise / I/O-bound / unchanged 885 / 16 / 19 / 841
Benchmarked / skipped (head) 962 / 35
Time / warmup per case 50 ms / 25 ms
Node / platform v26.12.1 / linux

@nulltask
nulltask merged commit 206eedd into devel Oct 31, 2026
10 of 11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Full E2E suite fails on CI: timing-sensitive tests on Synesthesia

1 participant