Skip to content

Include static hermes results in benchmark report#328

Merged
ZihanChen-MSFT merged 5 commits into
microsoft:mainfrom
ZihanChen-MSFT:benchmark-static
May 12, 2026
Merged

Include static hermes results in benchmark report#328
ZihanChen-MSFT merged 5 commits into
microsoft:mainfrom
ZihanChen-MSFT:benchmark-static

Conversation

@ZihanChen-MSFT
Copy link
Copy Markdown

@ZihanChen-MSFT ZihanChen-MSFT commented May 12, 2026

Summary

With a few formatting

Test Plan

It also tests about report generation when local benchmark data has extra items than baseline.

Microsoft Reviewers: Open in CodeFlow

- bench_and_report.ts now runs both dynamic and static benchmarks,
  writing bench_dynamic_result.json and bench_static_result.json, then
  merges them into bench_result.json (static entries suffixed with
  " (static)"); the merged file is the only one that carries a timestamp.
- report.ts rounds the per-group millisecond sums in the collapsible
  summary to integers, and appends a +/- percentage delta to the summary
  title when comparing exactly two inputs.
- .gitignore picks up the two new intermediate JSON files.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@ZihanChen-MSFT ZihanChen-MSFT requested a review from a team as a code owner May 12, 2026 00:15
ZihanChen-MSFT and others added 4 commits May 11, 2026 18:05
Without these the static benchmark phase invokes hermes.exe as if it
were shermes.exe and bails on the first compile with "Unknown command
line argument '-o'". The workflow now builds the shermes target and
passes a separate --static-binary so bench_and_report.ts feeds the
dynamic and static phases their respective binaries.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
shermes spawns clang to link a native executable, and clang on Windows
needs LIB/INCLUDE/PATH from vcvarsall to find link.exe and the MSVC
runtime libs. build.js sets those inside its own process for the build
step, but the env doesn't survive into the subsequent bash step where
the benchmarks run. Without this, the static phase fails on the first
benchmark with LNK1181.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous attempt used ilammy/msvc-dev-cmd@v1, which microsoft/
hermes-windows does not allow (the workflow exited with startup_failure
in 0s). Replace it with an inline cmd step that discovers the VS
installation through vswhere, sources vcvarsall.bat, and exports the
relevant env vars (PATH, LIB, INCLUDE, LIBPATH) to GITHUB_ENV so the
subsequent bash bench step inherits them.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
The previous attempt built only the 'shermes' target, which produces
shermes.exe but not the runtime libraries (hermesvm, shermes_console,
their static counterparts) that the generated native executables link
against. The static phase consequently failed on the first benchmark
with LNK1181. tools/shermes/CMakeLists.txt provides 'shermes-dep' as a
meta-target that pulls in shermes plus all the libraries needed at
link time, so switch the build to that.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@github-actions
Copy link
Copy Markdown

Benchmark Results

Total benchmarks: 204

Inputs: baseline/baseline.json, bench_result.json

v8 (3354ms, 6247ms) +86.2%
v8 hermes (CI) hermes (CI)
v8-crypto 616ms 607.2ms
v8-deltablue 747.6ms 755.6ms
v8-raytrace 133.2ms 128.4ms
v8-regexp 676.4ms 604ms
v8-richards 949ms 942.2ms
v8-splay 231.8ms 232.2ms
v8-crypto (static) - 454ms
v8-deltablue (static) - 664.4ms
v8-raytrace (static) - 99.4ms
v8-regexp (static) - 771ms
v8-richards (static) - 786.2ms
v8-splay (static) - 202.2ms
test-suites (177934ms, 312812ms) +75.8%
test-suites hermes (CI) hermes (CI)
box2d 3028.8ms 2951.4ms
earley-boyer 2574.4ms 2592ms
navier-stokes 5756.4ms 5752.8ms
pdfjs 992.8ms 995.6ms
gbemu 2315.4ms 2299ms
code-load 4546ms 4536.4ms
typescript 3385.4ms 3359.6ms
simpleSum 8806.6ms 8794.8ms
propAccess 2655.8ms 2662.6ms
allocObj 251.2ms 251.2ms
allocObjLit 6341.6ms 6343.6ms
allocNewObj 20213.2ms 20032ms
allocArray 248.8ms 251ms
allocNewArray 35223.6ms 35157.2ms
arrayRead 119.2ms 118.6ms
arrayReadByIndex 543ms 536.8ms
largeArrayRead 781.6ms 791ms
arrayWrite 266.6ms 258.6ms
largeArrayWrite 2164.8ms 2164.2ms
interp-dispatch 2848.6ms 2918ms
wb-perf 8196.6ms 8219.4ms
arrayReverse 40.8ms 40.2ms
arrayMap 1495ms 1450.4ms
arrayIndexOf 153.4ms 143.2ms
arrayLastIndexOf 154.6ms 148.8ms
arrayEvery 2173ms 2172.6ms
arraySome 2174ms 2174.8ms
arrayFill 2367.8ms 2365.2ms
arrayFilter 1813.4ms 1825.8ms
arrayFind 3191.2ms 3457.2ms
arrayFindIndex 3251.6ms 3199.8ms
arrayPop 1072.2ms 1035ms
arrayReduce 2007.6ms 1994.6ms
arrayReduceRight 2008ms 1996.2ms
arrayShift 2051ms 2048ms
arrayUnshift 2083.2ms 2081ms
arrayIncludes 1219.6ms 1219.6ms
arrayFrom 1109.8ms 1107.2ms
arrayCopyWithin 1557.2ms 1488.8ms
stringFromCharCode 94.4ms 93.4ms
arraySlice 808.8ms 797.6ms
arraySplice 27ms 30.4ms
arrayOf 1075.6ms 1053.8ms
stringCharAt 1266.4ms 1271ms
stringMatch 2947.2ms 2841.8ms
stringSearch 2858.6ms 2849.6ms
stringStartsWith 601.2ms 593ms
stringEndsWith 561ms 534.6ms
stringIncludes 1545.4ms 1485ms
stringIndexOf 1508.4ms 1501.6ms
stringLastIndexOf 1758.2ms 1739.4ms
stringSplit 865.6ms 809.8ms
stringSlice 507.8ms 493.8ms
stringPadStart 2916.2ms 2909ms
stringPadEnd 2985.4ms 2910.8ms
regExpMatch 1513.6ms 1505.2ms
regExpSearch 1216.8ms 1223.4ms
regExpToString 1205.6ms 1205ms
stringReplace 1438.8ms 1367.8ms
regExpReplace 882.8ms 870.8ms
regExpFlags 927.8ms 928.6ms
regExpSplit 1320ms 1270.4ms
numberArrayReadWrite 2412.6ms 2398ms
protoCache 3504.8ms 3497.6ms
box2d (static) - 1808.6ms
earley-boyer (static) - 1895.6ms
navier-stokes (static) - 3415.8ms
pdfjs (static) - 804.6ms
gbemu (static) - 1780ms
code-load (static) - 4255.2ms
typescript (static) - 2714.2ms
simpleSum (static) - 937.6ms
propAccess (static) - 2297.6ms
allocObj (static) - 0.2ms
allocObjLit (static) - 4159.4ms
allocNewObj (static) - 15842ms
allocArray (static) - 0.2ms
allocNewArray (static) - 28314.2ms
arrayRead (static) - 74.2ms
arrayReadByIndex (static) - 451.4ms
largeArrayRead (static) - 551.6ms
arrayWrite (static) - 173.8ms
largeArrayWrite (static) - 1571ms
interp-dispatch (static) - 1916ms
wb-perf (static) - 8984.6ms
arrayReverse (static) - 36ms
arrayMap (static) - 1063.2ms
arrayIndexOf (static) - 127.2ms
arrayLastIndexOf (static) - 138.2ms
arrayEvery (static) - 1412ms
arraySome (static) - 1417ms
arrayFill (static) - 1955.8ms
arrayFilter (static) - 1061.2ms
arrayFind (static) - 2289.4ms
arrayFindIndex (static) - 2234.2ms
arrayPop (static) - 885.8ms
arrayReduce (static) - 1326.8ms
arrayReduceRight (static) - 1319.6ms
arrayShift (static) - 1510.6ms
arrayUnshift (static) - 1596.8ms
arrayIncludes (static) - 961.8ms
arrayFrom (static) - 1055.6ms
arrayCopyWithin (static) - 1111.4ms
stringFromCharCode (static) - 77.2ms
arraySlice (static) - 579.4ms
arraySplice (static) - 27.4ms
arrayOf (static) - 872.8ms
stringCharAt (static) - 1096ms
stringMatch (static) - 2228.4ms
stringSearch (static) - 2222ms
stringStartsWith (static) - 486.4ms
stringEndsWith (static) - 459.4ms
stringIncludes (static) - 1436.4ms
stringIndexOf (static) - 1444.8ms
stringLastIndexOf (static) - 1953.2ms
stringSplit (static) - 651.2ms
stringSlice (static) - 450ms
stringPadStart (static) - 2292.8ms
stringPadEnd (static) - 2285.4ms
regExpMatch (static) - 1478.6ms
regExpSearch (static) - 1224.2ms
regExpToString (static) - 1237.2ms
stringReplace (static) - 1387.4ms
regExpReplace (static) - 813.8ms
regExpFlags (static) - 810.4ms
regExpSplit (static) - 1102.2ms
numberArrayReadWrite (static) - 2042.6ms
protoCache (static) - 3586.4ms
micros (32446ms, 61591ms) +89.8%
micros hermes (CI) hermes (CI)
getNodeById.js 5157.6ms 5089.2ms
setInsert.js 2699.6ms 3447.8ms
stringify-number.js 1897.8ms 1858.8ms
typed-array-sort.js 22690.8ms 22492.6ms
getNodeById.js (static) - 3930.6ms
setInsert.js (static) - 2832.2ms
stringify-number.js (static) - 1652.2ms
typed-array-sort.js (static) - 20287.4ms
jit-benches (6261ms, 8583ms) +37.1%
jit-benches hermes (CI) hermes (CI)
idisp.js 2825.8ms 2838.4ms
idispn.js 3435.4ms 3386.6ms
idisp.js (static) - 1905.6ms
idispn.js (static) - 452.4ms
many-subclasses (48717ms, 73105ms) +50.1%
many-subclasses hermes (CI) hermes (CI)
many.js 19401.2ms 18866ms
many-sh-1.js 7433.6ms 7328.4ms
many-sh-2.js 7473.2ms 7268.6ms
many-sh-3.js 7176.8ms 7055.6ms
many-sh-4.js 7232.4ms 7209.2ms
many.js (static) - 15988ms
many-sh-1.js (static) - 2288ms
many-sh-2.js (static) - 2393.6ms
many-sh-3.js (static) - 2358.6ms
many-sh-4.js (static) - 2348.8ms
map-objects (2027ms, 3616ms) +78.4%
map-objects hermes (CI) hermes (CI)
map-objects-untyped.js 1037.6ms 1020ms
map-objects-typed.js 989.6ms 959ms
map-objects-untyped.js (static) - 908.2ms
map-objects-typed.js (static) - 728.8ms
map-strings (2415ms, 4323ms) +79.0%
map-strings hermes (CI) hermes (CI)
map-strings-untyped.js 1234.2ms 1192.4ms
map-strings-typed.js 1180.8ms 1138.6ms
map-strings-untyped.js (static) - 1092.2ms
map-strings-typed.js (static) - 900.2ms
nbody (2478ms, 3427ms) +38.3%
nbody hermes (CI) hermes (CI)
original/nbody.js 882.2ms 852.2ms
fully-typed/nbody.js 723.4ms 711.4ms
fully-typed/nbody.ts 872ms 833.8ms
original/nbody.js (static) - 450ms
fully-typed/nbody.js (static) - 130.8ms
fully-typed/nbody.ts (static) - 449.2ms
string-switch (1335ms, 6548ms) +390.3%
string-switch (string-switch/plain) hermes (CI) hermes (CI)
bench.js 1335.4ms 1312.8ms
bench.js (static) - 5235.2ms
raytracer (3319ms, 5604ms) +68.9%
raytracer (raytracer/original) hermes (CI) hermes (CI)
bench-raytracer.js 1606.6ms 1555.8ms
raytracer.ts 1712ms 1669.8ms
bench-raytracer.js (static) - 1185.6ms
raytracer.ts (static) - 1192.8ms
MiniReact (17368ms, 30006ms) +72.8%
MiniReact hermes (CI) hermes (CI)
no-objects/out/simple-stripped.js 2309.6ms 2242.8ms
no-objects/out/simple-lowered.js 2308ms 2270ms
no-objects/out/music-stripped.js 42.4ms 43.6ms
no-objects/out/music-lowered.js 47ms 48ms
no-deps/stripped/MiniReact.js 5203.4ms 5000.8ms
no-deps/MiniReact.js 5119.8ms 4929.8ms
no-objects/out/simple.js 2290.8ms 2227.2ms
no-objects/out/music.js 46.6ms 48.8ms
no-objects/out/simple-stripped.js (static) - 1721ms
no-objects/out/simple-lowered.js (static) - 1729.6ms
no-objects/out/music-stripped.js (static) - 19.8ms
no-objects/out/music-lowered.js (static) - 19.8ms
no-deps/stripped/MiniReact.js (static) - 4027.6ms
no-deps/MiniReact.js (static) - 3956.4ms
no-objects/out/simple.js (static) - 1701.2ms
no-objects/out/music.js (static) - 19.4ms
widgets (7554ms, 12874ms) +70.4%
widgets hermes (CI) hermes (CI)
simple-classes/widgets.js 1804.2ms 1752.2ms
original/es5/widgets.js 2865ms 2758.6ms
single-file/es5/widgets.js 2885.2ms 2756.4ms
simple-classes/widgets.js (static) - 1010.8ms
original/es5/widgets.js (static) - 2304.6ms
single-file/es5/widgets.js (static) - 2291ms

@ZihanChen-MSFT ZihanChen-MSFT enabled auto-merge (squash) May 12, 2026 09:48
@ZihanChen-MSFT ZihanChen-MSFT disabled auto-merge May 12, 2026 09:54
@ZihanChen-MSFT ZihanChen-MSFT enabled auto-merge (squash) May 12, 2026 09:54
@ZihanChen-MSFT ZihanChen-MSFT merged commit 6b709b4 into microsoft:main May 12, 2026
14 checks passed
@ZihanChen-MSFT ZihanChen-MSFT deleted the benchmark-static branch May 14, 2026 00:51
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.

2 participants