Skip to content

ci: keep completed performance reports visible as PRs advance - #1633

Draft
mrousavy wants to merge 1 commit into
mainfrom
perf/report-completed-commits
Draft

ci: keep completed performance reports visible as PRs advance#1633
mrousavy wants to merge 1 commit into
mainfrom
perf/report-completed-commits

Conversation

@mrousavy

@mrousavy mrousavy commented Sep 7, 2026

Copy link
Copy Markdown
Member

Completed performance results are currently skipped when the PR's head or base advances before publishing. Keep those results visible until a newer completed report replaces them, with a trusted label linking the exact measured commits and workflow attempt. Closed PRs still skip comments; advanced or superseded reports still skip Bencher history.

Order updates by the source workflow's run number, then attempt. Resolve the existing comment's source through GitHub and require a successful completed attempt from the same PR source repository and branch, including when migrating older comments. An old run finishing late—or being rerun after a newer run—cannot replace newer results. Per-source concurrency with GitHub's documented queue: max serializes the read/update sequence without dropping the previous pending publication.

Builds on merged #1623, which already shows the report in the run summary. This PR changes the trusted publishing policy; it takes effect after reaching main. It does not execute artifact code or change the rendered report's contents.

Validation: 133 performance-tool tests pass, including completion-order permutations, reruns, repeated publication, advanced/closed PRs, legacy comments, forged ordering metadata and fork/branch provenance. TypeScript, ESLint and diff checks pass. Actionlint 1.7.12 passes with only its unsupported concurrency.queue diagnostic excluded; a workflow test checks the exact queue configuration against GitHub's documented syntax.

@vercel

vercel Bot commented Sep 7, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
nitro-docs Ready Ready Preview Sep 7, 2026 7:02pm UTC

Request Review

@nitro-modules-bot

Copy link
Copy Markdown

Performance Report

⚠️ Advisory: Results do not fail this PR.

iOS

Benchmark Before After Difference
C++ large array (1,024) 47.60 µs 50.00 µs 🔴 +5.03% slower
C++ synchronousCallback() 214.2 ns 190.1 ns 🟢 -11.24% faster
C++ nested Car struct 2.55 µs 2.39 µs 🟢 -6.26% faster
Swift bounce(1 MiB) 255.5 ns 238.7 ns 🟢 -6.59% faster
Swift copy(1 MiB) 69.28 µs 65.39 µs 🟢 -5.61% faster
Swift synchronousCallback() 217.8 ns 206.9 ns 🟢 -5.01% faster
Swift create() 27.78 µs 30.04 µs 🔴 +8.16% slower
Swift optional trailing string 154.6 ns 171.4 ns 🔴 +10.88% slower
Swift deferred worker Promise (includes trigger call) 23.35 µs 21.27 µs 🟢 -8.89% faster
TurboModule addNumbers() 1.02 µs 922.2 ns 🟢 -9.97% faster
All Benchmarks
Benchmark Before After Difference
JavaScript addNumbers() 24.3 ns 23.4 ns 🟢 -3.8% faster
C++ bounce(1 MiB) 241.0 ns 245.3 ns 🔴 +1.79% slower
C++ bounce(4 KiB) 238.8 ns 241.7 ns 🔴 +1.23% slower
C++ bounce native-owned buffer (1 MiB) 3.70 µs 3.78 µs 🔴 +2.11% slower
C++ bounce native-owned buffer (4 KiB) 391.4 ns 395.9 ns 🔴 +1.14% slower
C++ copy(1 MiB) 75.45 µs 76.01 µs 🔴 +0.75% slower
C++ copy(4 KiB) 1.01 µs 1.01 µs 🟢 -0.2% faster
C++ small array (16) 910.6 ns 933.5 ns 🔴 +2.51% slower
C++ create() 429.0 ns 431.7 ns 🔴 +0.61% slower
C++ returnExisting() 202.9 ns 202.9 ns 🟢 -0% faster
C++ typed map (8 entries) 1.76 µs 1.79 µs 🔴 +1.37% slower
C++ optional trailing string 151.0 ns 151.1 ns 🔴 +0.07% slower
C++ addNumbers() 90.5 ns 86.5 ns 🟢 -4.44% faster
C++ simpleFunc() 71.6 ns 68.3 ns 🟢 -4.61% faster
C++ deferred worker Promise (includes trigger call) 23.35 µs 22.81 µs 🟢 -2.33% faster
C++ immediatePromise() 844.4 ns 840.9 ns 🟢 -0.41% faster
C++ number property get/set 131.6 ns 132.7 ns 🔴 +0.8% slower
C++ short ASCII string 130.7 ns 135.5 ns 🔴 +3.7% slower
C++ Unicode string 287.3 ns 277.9 ns 🟢 -3.25% faster
C++ number | string variant 129.8 ns 135.4 ns 🔴 +4.27% slower
Swift bounce(4 KiB) 237.4 ns 235.4 ns 🟢 -0.85% faster
Swift bounce native-owned buffer (1 MiB) 3.47 µs 3.49 µs 🔴 +0.56% slower
Swift bounce native-owned buffer (4 KiB) 376.6 ns 375.9 ns 🟢 -0.19% faster
Swift copy(4 KiB) 982.7 ns 1.02 µs 🔴 +3.62% slower
Swift large array (1,024) 50.57 µs 49.62 µs 🟢 -1.87% faster
Swift small array (16) 1.05 µs 1.02 µs 🟢 -2.38% faster
Swift returnExisting() 267.1 ns 264.9 ns 🟢 -0.81% faster
Swift typed map (8 entries) 2.61 µs 2.49 µs 🟢 -4.68% faster
Swift addNumbers() 77.7 ns 75.8 ns 🟢 -2.46% faster
Swift simpleFunc() 60.3 ns 63.0 ns 🔴 +4.43% slower
Swift immediatePromise() 1.24 µs 1.22 µs 🟢 -1.87% faster
Swift number property get/set 141.6 ns 138.6 ns 🟢 -2.13% faster
Swift short ASCII string 158.7 ns 162.8 ns 🔴 +2.57% slower
Swift Unicode string 352.2 ns 348.7 ns 🟢 -1% faster
Swift nested Car struct 2.42 µs 2.46 µs 🔴 +1.62% slower
Swift number | string variant 212.3 ns 209.9 ns 🟢 -1.16% faster

Android

Benchmark Before After Difference
JavaScript addNumbers() 22.3 ns 21.1 ns 🟢 -5.59% faster
C++ copy(1 MiB) 24.64 µs 29.66 µs 🔴 +20.37% slower
C++ returnExisting() 220.2 ns 204.6 ns 🟢 -7.09% faster
C++ addNumbers() 82.7 ns 97.6 ns 🔴 +18.08% slower
C++ short ASCII string 139.7 ns 131.4 ns 🟢 -5.96% faster
C++ number | string variant 126.8 ns 143.5 ns 🔴 +13.18% slower
Kotlin copy(1 MiB) 292.67 µs 275.91 µs 🟢 -5.72% faster
Kotlin copy(4 KiB) 4.10 µs 5.01 µs 🔴 +22.22% slower
Kotlin synchronousCallback() 934.0 ns 1.14 µs 🔴 +22.02% slower
Kotlin create() 1.53 µs 1.39 µs 🟢 -8.95% faster
Kotlin simpleFunc() 97.6 ns 90.7 ns 🟢 -7.13% faster
Kotlin number property get/set 210.4 ns 222.1 ns 🔴 +5.56% slower
Kotlin short ASCII string 438.4 ns 415.5 ns 🟢 -5.23% faster
Kotlin Unicode string 663.2 ns 696.7 ns 🔴 +5.05% slower
All Benchmarks
Benchmark Before After Difference
C++ bounce(1 MiB) 426.5 ns 429.5 ns 🔴 +0.71% slower
C++ bounce(4 KiB) 410.3 ns 401.6 ns 🟢 -2.11% faster
C++ bounce native-owned buffer (1 MiB) 3.36 µs 3.26 µs 🟢 -2.99% faster
C++ bounce native-owned buffer (4 KiB) 440.4 ns 447.0 ns 🔴 +1.5% slower
C++ copy(4 KiB) 763.1 ns 736.6 ns 🟢 -3.49% faster
C++ large array (1,024) 37.39 µs 37.74 µs 🔴 +0.94% slower
C++ small array (16) 749.2 ns 782.6 ns 🔴 +4.46% slower
C++ synchronousCallback() 292.1 ns 300.8 ns 🔴 +2.96% slower
C++ create() 569.6 ns 548.8 ns 🟢 -3.66% faster
C++ typed map (8 entries) 1.66 µs 1.58 µs 🟢 -4.6% faster
C++ optional trailing string 138.4 ns 145.2 ns 🔴 +4.92% slower
C++ simpleFunc() 67.9 ns 67.8 ns 🟢 -0.23% faster
C++ deferred worker Promise (includes trigger call) 21.50 µs 22.21 µs 🔴 +3.3% slower
C++ immediatePromise() 810.5 ns 777.6 ns 🟢 -4.06% faster
C++ number property get/set 144.9 ns 145.9 ns 🔴 +0.67% slower
C++ Unicode string 233.5 ns 236.7 ns 🔴 +1.4% slower
C++ nested Car struct 2.08 µs 2.09 µs 🔴 +0.55% slower
Kotlin bounce(1 MiB) 1.03 µs 1.02 µs 🟢 -0.88% faster
Kotlin bounce(4 KiB) 985.4 ns 974.5 ns 🟢 -1.11% faster
Kotlin bounce native-owned buffer (1 MiB) 3.99 µs 4.01 µs 🔴 +0.55% slower
Kotlin bounce native-owned buffer (4 KiB) 1.12 µs 1.12 µs 🔴 +0.06% slower
Kotlin large array (1,024) 39.24 µs 39.64 µs 🔴 +1.04% slower
Kotlin small array (16) 995.2 ns 1.02 µs 🔴 +2.01% slower
Kotlin returnExisting() 527.8 ns 526.2 ns 🟢 -0.29% faster
Kotlin typed map (8 entries) 6.21 µs 5.92 µs 🟢 -4.64% faster
Kotlin optional trailing string 318.6 ns 323.3 ns 🔴 +1.47% slower
Kotlin addNumbers() 109.5 ns 110.3 ns 🔴 +0.7% slower
Kotlin deferred worker Promise (includes trigger call) 30.94 µs 31.16 µs 🔴 +0.72% slower
Kotlin immediatePromise() 2.42 µs 2.33 µs 🟢 -3.92% faster
Kotlin nested Car struct 4.24 µs 4.22 µs 🟢 -0.55% faster
Kotlin number | string variant 385.3 ns 390.7 ns 🔴 +1.41% slower
TurboModule addNumbers() 214.8 ns 224.6 ns 🔴 +4.57% slower

Benchmarking Code Diff 2e815f49...0fd15aa4 (view raw output)

Raw measurements: performance-report-1 (JSON artifact). Run 34153977762, attempt 1. Download requires GitHub access.

Android: measurements, attempt 1, apps, attempt 1.
iOS: measurements, attempt 1, apps, attempt 1.

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.

1 participant