perf(array): reuse live callback argument roots - #1236
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub. 1 Skipped Deployment
|
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: 📒 Files selected for processing (6)
Included review availability: 8 reviews are currently available. Your included PR review attempts over the past 7 days set your current allowance at 10 reviews per hour. 📝 WalkthroughWalkthroughArray callback dispatch now relies on argument collections for callback-related GC roots instead of per-call temporary roots. Generator restoration remains exception-safe. Documentation, regression coverage, benchmark configuration, and audit evidence were added. ChangesArray callback root optimization
Estimated code review effort: 3 (Moderate) | ~20 minutes Merge Risk: ⚪ Minimal · up to Array callback dispatch now reuses live argument roots while preserving callback behavior and generator restoration. No current merge-blocking risk remains. 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
Comment |
Web Tooling Benchmark
18 pinned Web Tooling workloads; 18 workloads produced at least one Goccia sample. Raw results from 1 sample per workload; full stdout/stderr for failures and min/max/CV stay in the |
JetStream 3 Performance Barometer
Geomean reference ratio: QuickJS 26.23×; Node.js 287.82×. 1.00× means aligned; values above 1.00× mean Goccia was proportionally slower after normalizing JetStream’s higher-is-better score. This is a directional barometer across runtimes with different goals, not a product ranking. Raw samples and failure details remain in the |
Benchmark Results440 benchmarks · PR vs same-runner Interpreted: 🟢 63 improved · 🔴 18 regressed · 359 unchanged · avg +1.6% Typical per-run noise (median variance): interpreted ±1.9%, bytecode ±2.2%. Deltas within noise overlap and read as unchanged. arraybuffer.js — Interp: 14 unch. · avg +0.8% · Bytecode: 🟢 7, 7 unch. · avg +1.8%
arrays.js — Interp: 🟢 11, 🔴 1, 7 unch. · avg +9.7% · Bytecode: 🟢 11, 8 unch. · avg +14.6%
async-await.js — Interp: 6 unch. · avg +1.7% · Bytecode: 🟢 1, 5 unch. · avg +2.8%
async-generators.js — Interp: 2 unch. · avg -7.9% · Bytecode: 2 unch. · avg +4.8%
atomics.js — Interp: 6 unch. · avg -0.4% · Bytecode: 🟢 2, 4 unch. · avg +1.4%
base64.js — Interp: 🟢 4, 6 unch. · avg +4.0% · Bytecode: 🟢 3, 7 unch. · avg +2.5%
classes.js — Interp: 🟢 2, 29 unch. · avg +0.0% · Bytecode: 🟢 3, 28 unch. · avg +0.4%
closures.js — Interp: 11 unch. · avg -1.4% · Bytecode: 🟢 1, 10 unch. · avg -1.5%
collections.js — Interp: 🟢 2, 10 unch. · avg +3.2% · Bytecode: 🟢 2, 10 unch. · avg +1.4%
csv.js — Interp: 13 unch. · avg -0.7% · Bytecode: 🔴 1, 12 unch. · avg -0.4%
destructuring.js — Interp: 🟢 8, 🔴 1, 13 unch. · avg +4.0% · Bytecode: 🟢 6, 🔴 1, 15 unch. · avg +6.4%
fibonacci.js — Interp: 🟢 2, 6 unch. · avg +3.5% · Bytecode: 🟢 1, 🔴 1, 6 unch. · avg -2.0%
float16array.js — Interp: 🟢 3, 🔴 1, 28 unch. · avg +1.0% · Bytecode: 🟢 1, 31 unch. · avg -0.1%
for-in/for-in.js — Interp: 3 unch. · avg +0.8% · Bytecode: 3 unch. · avg +0.9%
for-of.js — Interp: 🟢 3, 🔴 1, 3 unch. · avg -1.9% · Bytecode: 🟢 1, 6 unch. · avg +0.6%
generators.js — Interp: 🔴 1, 3 unch. · avg -0.6% · Bytecode: 4 unch. · avg +2.3%
intl.js — Interp: 🟢 1, 5 unch. · avg -0.3% · Bytecode: 6 unch. · avg +1.5%
iterators.js — Interp: 🟢 2, 🔴 2, 38 unch. · avg +0.7% · Bytecode: 🟢 17, 25 unch. · avg +3.7%
json.js — Interp: 🟢 1, 22 unch. · avg +0.0% · Bytecode: 23 unch. · avg -0.4%
jsx.jsx — Interp: 21 unch. · avg -0.5% · Bytecode: 🟢 1, 🔴 1, 19 unch. · avg -0.2%
modules.js — Interp: 🔴 1, 8 unch. · avg -0.6% · Bytecode: 🟢 1, 8 unch. · avg +4.8%
numbers.js — Interp: 🔴 1, 11 unch. · avg -0.7% · Bytecode: 12 unch. · avg +2.0%
objects.js — Interp: 8 unch. · avg -3.1% · Bytecode: 8 unch. · avg +1.1%
promises.js — Interp: 🟢 1, 11 unch. · avg +3.5% · Bytecode: 🔴 1, 11 unch. · avg -0.2%
property-access.js — Interp: 🟢 1, 4 unch. · avg -1.2% · Bytecode: 5 unch. · avg +10.2%
regexp.js — Interp: 13 unch. · avg +1.1% · Bytecode: 🔴 2, 11 unch. · avg -1.6%
strings.js — Interp: 🟢 3, 16 unch. · avg +0.4% · Bytecode: 🟢 7, 12 unch. · avg +3.1%
temporal.js — Interp: 6 unch. · avg -0.3% · Bytecode: 🟢 1, 5 unch. · avg +2.9%
tsv.js — Interp: 🟢 4, 5 unch. · avg +2.5% · Bytecode: 9 unch. · avg -2.1%
typed-arrays.js — Interp: 🟢 8, 14 unch. · avg +23.4% · Bytecode: 🟢 15, 7 unch. · avg +8.2%
uint8array-encoding.js — Interp: 🟢 2, 🔴 1, 15 unch. · avg +0.6% · Bytecode: 🟢 2, 🔴 11, 5 unch. · avg +1.9%
weak-collections.js — Interp: 🟢 5, 🔴 8, 2 unch. · avg -16.7% · Bytecode: 🟢 9, 🔴 1, 5 unch. · avg +23.7%
Deterministic profile diffDeterministic profile diff: no significant changes. Measured on ubuntu-latest x64. Each PR run also builds the |
Suite TimingTest Runner (interpreted: 12,819 passed; bytecode: 12,819 passed)
MemoryGC rows aggregate the main thread plus all worker thread-local GCs. Test runner worker shutdown frees thread-local heaps in bulk; that shutdown reclamation is not counted as GC collections or collected objects.
Benchmarks (interpreted: 440; bytecode: 440)
MemoryGC rows aggregate the main thread plus all worker thread-local GCs. Benchmark runner performs explicit between-file collections, so collection and collected-object counts can be much higher than the test runner.
Boot
Empty-script ( Measured on ubuntu-latest x64. |
AWFY Results
Geomean Ratios
14 pinned AWFY benchmarks. Medians from 5 interleaved samples per engine; raw JSON includes min/max/CV and is attached as the |
test262 Conformance
Areas closest to 100%
Per-test deltas (+0 / -0 / timeout +2 / -1)New timeouts (2):
Resolved timeouts (1):
Steady-state failures and timeouts are non-blocking; PASS → non-timeout failure transitions fail the conformance gate. Measured on ubuntu-latest x64, bytecode mode. Areas grouped by the first two test262 path components; minimum 25 attempted tests, areas already at 100% excluded. Δ vs main compares against the most recent cached |
Summary
f33d9c6a061e6cb61dce65ffcf8514da1c051870: the focused 128-value map/reduce workload improves about 21% in both AB/BA orders. Full verified upstream AWFY NBody improves from 17.014174 s to 16.523542 s in execution time (2.88%); separate process CPU improves 2.59%, with disjoint ranges and improvement in every ABBA block. Richards remains neutral. These are individual workload results, not an aggregate suite score.Testing
--jobs=2). Focused Array and callback suites pass 592 tests / 1,170 assertions per executor.74306fec151070fd07157cefeacf19e7e0bcdc89.Formatter passes all 463 Pascal files, the AWFY driver checks pass 59 assertions, and ordinary hooks pass. Exact-head CI is pending; the PR remains draft until it completes. No combined-optimization or cross-architecture speedup is claimed.