From b0f5f0f13b99e57ea4d4c4c47f41e871a77c88a9 Mon Sep 17 00:00:00 2001 From: Daniel Lehmann Date: Wed, 13 Aug 2025 15:29:05 +0200 Subject: [PATCH 1/4] Add Box2D workload compiled with J2CL/J2Wasm to WasmGC Right now, it requires an additional entrypoint in the upstream j2cl benchmark to avoid explicit warmup and perform a constant amount of work (see add-fixed-run-count-api.patch). Since JSC seems to not implement JS-string builtins yet, I also added a workaround (they never get called in this workload anyway), which we can hopefully remove later. --- JetStreamDriver.js | 15 +++- wasm/j2cl-box2d/.gitignore | 1 + wasm/j2cl-box2d/add-fixed-run-count-api.patch | 77 ++++++++++++++++++ wasm/j2cl-box2d/benchmark.js | 39 +++++++++ wasm/j2cl-box2d/build.log | 5 ++ wasm/j2cl-box2d/build.sh | 31 +++++++ .../build/Box2dBenchmark_j2wasm_binary.wasm | Bin 0 -> 81878 bytes .../build/Box2dBenchmark_j2wasm_entry.js | 21 +++++ 8 files changed, 188 insertions(+), 1 deletion(-) create mode 100644 wasm/j2cl-box2d/.gitignore create mode 100644 wasm/j2cl-box2d/add-fixed-run-count-api.patch create mode 100644 wasm/j2cl-box2d/benchmark.js create mode 100644 wasm/j2cl-box2d/build.log create mode 100755 wasm/j2cl-box2d/build.sh create mode 100755 wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.wasm create mode 100755 wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_entry.js diff --git a/JetStreamDriver.js b/JetStreamDriver.js index d1ef7964..2f079940 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2398,7 +2398,20 @@ let BENCHMARKS = [ iterations: 15, worstCaseCount: 2, tags: ["Default", "Wasm", "dotnet"], - }) + }), + // J2CL + new AsyncBenchmark({ + name: "j2cl-box2d", + files: [ + "./wasm/j2cl-box2d/benchmark.js", + "./wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_entry.js", + ], + preload: { + wasmBinary: "./wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.wasm", + }, + iterations: 40, + tags: ["Default", "Wasm"], + }), ]; diff --git a/wasm/j2cl-box2d/.gitignore b/wasm/j2cl-box2d/.gitignore new file mode 100644 index 00000000..eb6778db --- /dev/null +++ b/wasm/j2cl-box2d/.gitignore @@ -0,0 +1 @@ +/j2cl/ diff --git a/wasm/j2cl-box2d/add-fixed-run-count-api.patch b/wasm/j2cl-box2d/add-fixed-run-count-api.patch new file mode 100644 index 00000000..dcea4c32 --- /dev/null +++ b/wasm/j2cl-box2d/add-fixed-run-count-api.patch @@ -0,0 +1,77 @@ +diff --git a/benchmarking/java/com/google/j2cl/benchmarking/benchmarks.bzl b/benchmarking/java/com/google/j2cl/benchmarking/benchmarks.bzl +index 04c4c72007..601cafdcb5 100644 +--- a/benchmarking/java/com/google/j2cl/benchmarking/benchmarks.bzl ++++ b/benchmarking/java/com/google/j2cl/benchmarking/benchmarks.bzl +@@ -95,6 +95,7 @@ def benchmark(name, deps = [], data = [], jvm_only = False, perfgate_test_tags = + "%s.%sLauncher#execute" % (benchmark_java_package, name), + "%s.%sLauncher#prepareForRunOnce" % (benchmark_java_package, name), + "%s.%sLauncher#runOnce" % (benchmark_java_package, name), ++ "%s.%sLauncher#runFixedCount" % (benchmark_java_package, name), + ], + ) + +diff --git a/benchmarking/java/com/google/j2cl/benchmarking/templates.bzl b/benchmarking/java/com/google/j2cl/benchmarking/templates.bzl +index b75b8567dd..8e083f9aa2 100644 +--- a/benchmarking/java/com/google/j2cl/benchmarking/templates.bzl ++++ b/benchmarking/java/com/google/j2cl/benchmarking/templates.bzl +@@ -34,6 +34,17 @@ public class #benchmarkName#Launcher { + benchmark.run(); + benchmark = null; // Make sure it is only executed once. + } ++ ++ public static void runFixedCount(int count) { ++ AbstractBenchmark bench = new #benchmarkName#(); ++ bench.setupOneTime(); ++ for (int i = 0; i < count; i++) { ++ bench.setup(); ++ bench.run(); ++ bench.tearDown(); ++ } ++ bench.tearDownOneTime(); ++ } + } + """ + +@@ -54,7 +65,12 @@ goog.module('#benchmarkName#_launcher') + + const j2wasm = goog.require('#wasm_module_name#'); + +-if (typeof read == 'undefined') { ++if (typeof isJetStreamDriver !== 'undefined') { ++ // Running as a JetStream benchmark; expose "instantiateAsync" to JetStream driver. ++ goog.global['instantiateAsync'] = async function(buffer) { ++ return j2wasm.instantiate(await j2wasm.compile(buffer)); ++ } ++} else if (typeof read == 'undefined') { + // Running on browser, fetch the file from server. + j2wasm.instantiateStreaming("#wasm_url#") + .then((instance) => Object.assign(goog.global, instance.exports)); +diff --git a/build_defs/internal_do_not_use/j2wasm_application.bzl b/build_defs/internal_do_not_use/j2wasm_application.bzl +index 36d3abaacd..211319deb9 100644 +--- a/build_defs/internal_do_not_use/j2wasm_application.bzl ++++ b/build_defs/internal_do_not_use/j2wasm_application.bzl +@@ -50,6 +50,15 @@ async function compileStreaming(urlOrResponse) { + return WebAssembly.compileStreaming(response, options); + } + ++/** ++ * @param {!BufferSource} moduleBuffer ++ * @return {!Promise} ++ * @suppress {checkTypes} Externs are missing options parameter (phase 2) ++ */ ++async function compile(moduleBuffer) { ++ return WebAssembly.compile(moduleBuffer, options); ++} ++ + /** + * @param {!WebAssembly.Module} module + * @return {!Promise} +@@ -91,7 +100,7 @@ function prepareImports(module) { + return imports; + } + +-exports = {compileStreaming, instantiate, instantiateStreaming, instantiateBlocking}; ++exports = {compile, compileStreaming, instantiate, instantiateStreaming, instantiateBlocking}; + """ + + def _impl_j2wasm_application(ctx): diff --git a/wasm/j2cl-box2d/benchmark.js b/wasm/j2cl-box2d/benchmark.js new file mode 100644 index 00000000..db6fbd2d --- /dev/null +++ b/wasm/j2cl-box2d/benchmark.js @@ -0,0 +1,39 @@ +// Copyright 2025 the V8 project authors. All rights reserved. +// Use of this source code is governed by a BSD-style license that can be +// found in the LICENSE file. + +// Hook into the J2Cl application runner, enables explicit instantiation via `instantiateAsync` below. +const isJetStreamDriver = true; + +// Polyfills for shells. See j2cl/bazel-j2cl/benchmarking/java/com/google/j2cl/benchmarking/templates.bzl +class TextDecoder { + decode(buffer) { + return String.fromCharCode.apply(null, new Uint8Array(buffer)); + } +} +// The following polyfills are just required for imports but not actually used. +function unused_import() { + throw new Error('not supported, should be an unused import'); +} +var atob = unused_import; +var btoa = unused_import; +var gc = unused_import; + +class Benchmark { + wasmBinary; + wasmInstanceExports; + + async init() { + this.wasmBinary = await getBinary(wasmBinary); + } + + async runIteration() { + // Compile once in the first iteration.` + if (!this.wasmInstanceExports) { + this.wasmInstanceExports = (await instantiateAsync(this.wasmBinary)).exports; + } + + const internalIterations = 5; + this.wasmInstanceExports.runFixedCount(internalIterations); + } +} diff --git a/wasm/j2cl-box2d/build.log b/wasm/j2cl-box2d/build.log new file mode 100644 index 00000000..f5fc6cff --- /dev/null +++ b/wasm/j2cl-box2d/build.log @@ -0,0 +1,5 @@ +Built on 2025-08-13 15:23:53+02:00 +Cloning into 'j2cl'... +4da35354d9 [KT] Rewrite our name sanitization logic to escape invalid character. +Copying generated files into build/ +Build success diff --git a/wasm/j2cl-box2d/build.sh b/wasm/j2cl-box2d/build.sh new file mode 100755 index 00000000..185a714e --- /dev/null +++ b/wasm/j2cl-box2d/build.sh @@ -0,0 +1,31 @@ +#!/bin/bash + +set -eo pipefail + +# Cleanup old files. +rm -rf build/ +rm -rf j2cl/ + +BUILD_LOG="$(realpath build.log)" +echo -e "Built on $(date --rfc-3339=seconds)" | tee "$BUILD_LOG" + +# Build the benchmark from source. +git clone git@github.com:google/j2cl.git |& tee -a "$BUILD_LOG" +pushd j2cl/ +git log -1 --oneline | tee -a "$BUILD_LOG" +git apply ../add-fixed-run-count-api.patch | tee -a "$BUILD_LOG" +BUILD_SRC_DIR="benchmarking/java/com/google/j2cl/benchmarks/octane/" +pushd "$BUILD_SRC_DIR" +bazel build //benchmarking/java/com/google/j2cl/benchmarks/octane:Box2dBenchmark_local-j2wasm-v8 +popd +popd + +echo "Copying generated files into build/" | tee -a "$BUILD_LOG" +mkdir -p build/ | tee -a "$BUILD_LOG" +BUILD_OUT_DIR="j2cl/bazel-bin/$BUILD_SRC_DIR" +cp $BUILD_OUT_DIR/Box2dBenchmark_j2wasm_entry.js build/ | tee -a "$BUILD_LOG" +# FIXME: Remove this workaround, once Safari/JSC implements JS-string builtins. +# Since these imports/builtins are never called in the workload, they should not have any effect on runtime. +sed -i 's/imports:/"wasm:js-string":{fromCharCodeArray:unused_import,concat:unused_import,equals:unused_import,compare:unused_import,length:unused_import,charCodeAt:unused_import,substring:unused_import},imports:/g' build/Box2dBenchmark_j2wasm_entry.js +cp $BUILD_OUT_DIR/Box2dBenchmark_j2wasm_binary.wasm build/ | tee -a "$BUILD_LOG" +echo "Build success" | tee -a "$BUILD_LOG" diff --git a/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.wasm b/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.wasm new file mode 100755 index 0000000000000000000000000000000000000000..26c4380c0b9feb2a4b55d12653199dc4717b5e53 GIT binary patch literal 81878 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 ZZ@$oG0hcb}-{Pe;{9n1%YPVgs_#4!MJHP+{ literal 0 HcmV?d00001 diff --git a/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_entry.js b/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_entry.js new file mode 100755 index 00000000..7dca4248 --- /dev/null +++ b/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_entry.js @@ -0,0 +1,21 @@ +/* + + Copyright The Closure Library Authors. + Copyright The Closure Compiler Authors. + SPDX-License-Identifier: Apache-2.0 +*/ +function g(){this.j=!1;this.h=null;this.l=void 0;this.g=1;this.o=0;this.i=null}function k(a){if(a.j)throw new TypeError("Generator is already running");a.j=!0}g.prototype.m=function(a){this.l=a};function l(a,b){a.i={s:b,u:!0};a.g=a.o}g.prototype.return=function(a){this.i={return:a};this.g=this.o};function m(a){this.g=new g;this.h=a}function n(a,b){k(a.g);var c=a.g.h;if(c)return p(a,"return"in c?c["return"]:function(d){return{value:d,done:!0}},b,a.g.return);a.g.return(b);return q(a)} +function p(a,b,c,d){try{var e=b.call(a.g.h,c);if(!(e instanceof Object))throw new TypeError("Iterator result "+e+" is not an object");if(!e.done)return a.g.j=!1,e;var h=e.value}catch(f){return a.g.h=null,l(a.g,f),q(a)}a.g.h=null;d.call(a.g,h);return q(a)}function q(a){for(;a.g.g;)try{var b=a.h(a.g);if(b)return a.g.j=!1,{value:b.value,done:!1}}catch(c){a.g.l=void 0,l(a.g,c)}a.g.j=!1;if(a.g.i){b=a.g.i;a.g.i=null;if(b.u)throw b.s;return{value:b.return,done:!0}}return{value:void 0,done:!0}} +function r(a){this.next=function(b){k(a.g);a.g.h?b=p(a,a.g.h.next,b,a.g.m):(a.g.m(b),b=q(a));return b};this.throw=function(b){k(a.g);a.g.h?b=p(a,a.g.h["throw"],b,a.g.m):(l(a.g,b),b=q(a));return b};this.return=function(b){return n(a,b)};this[Symbol.iterator]=function(){return this}}function t(a){function b(d){return a.next(d)}function c(d){return a.throw(d)}return new Promise(function(d,e){function h(f){f.done?d(f.value):Promise.resolve(f.value).then(b,c).then(h,e)}h(a.next())})} +function u(a){return t(new r(new m(a)))}var v=this||self;function w(a){return String.fromCodePoint(a).toLowerCase().codePointAt(0)}function x(a){return String.fromCodePoint(a).toUpperCase().codePointAt(0)}function y(a){return String.fromCharCode(a).toLowerCase().charCodeAt(0)}function z(a){return String.fromCharCode(a).toUpperCase().charCodeAt(0)};function A(a,b){console[a](b)};function B(a){return/^\s*[+-]?(NaN|Infinity|((\d+\.?\d*)|(\.\d+))([eE][+-]?\d+)?[dDfF]?)\s*$/.test(a)}function C(a,b){return a%b};function D(a,b){if(a instanceof Object)try{a.__j2wasm$exception=b}catch(c){}}function E(a){var b;return(b=a.__j2wasm$exception)!=null?b:null};function F(a,b){return a.toLowerCase()==b.toLowerCase()}function G(a,b){a=a.toLowerCase();b=b.toLowerCase();return a==b?0:a Date: Wed, 20 Aug 2025 17:36:52 +0200 Subject: [PATCH 2/4] add -wasm suffix to benchmark name --- JetStreamDriver.js | 2 +- wasm-cli.js | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/JetStreamDriver.js b/JetStreamDriver.js index 2f079940..2fea2524 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2401,7 +2401,7 @@ let BENCHMARKS = [ }), // J2CL new AsyncBenchmark({ - name: "j2cl-box2d", + name: "j2cl-box2d-wasm", files: [ "./wasm/j2cl-box2d/benchmark.js", "./wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_entry.js", diff --git a/wasm-cli.js b/wasm-cli.js index f563f20b..522f65a9 100644 --- a/wasm-cli.js +++ b/wasm-cli.js @@ -37,6 +37,7 @@ testList = [ "Dart-flute-wasm", "zlib-wasm", "Kotlin-compose-wasm", + "j2cl-box2d-wasm" ]; // Reuse the full CLI runner, just with the subset of Wasm line items above. From ba341674340198284ef39d687dbe415ed76b49b4 Mon Sep 17 00:00:00 2001 From: Daniel Lehmann Date: Wed, 20 Aug 2025 17:37:14 +0200 Subject: [PATCH 3/4] copy symbolmap to build dir as well --- wasm/j2cl-box2d/build.log | 4 +- wasm/j2cl-box2d/build.sh | 1 + ...Benchmark_j2wasm_binary.binaryen.symbolmap | 251 ++++++++++++++++++ 3 files changed, 254 insertions(+), 2 deletions(-) create mode 100755 wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.binaryen.symbolmap diff --git a/wasm/j2cl-box2d/build.log b/wasm/j2cl-box2d/build.log index f5fc6cff..8ab7a6ab 100644 --- a/wasm/j2cl-box2d/build.log +++ b/wasm/j2cl-box2d/build.log @@ -1,5 +1,5 @@ -Built on 2025-08-13 15:23:53+02:00 +Built on 2025-08-20 17:36:29+02:00 Cloning into 'j2cl'... -4da35354d9 [KT] Rewrite our name sanitization logic to escape invalid character. +fbbe1e6db2 [J2KT] Remove dangling readable files which were added by accident. Copying generated files into build/ Build success diff --git a/wasm/j2cl-box2d/build.sh b/wasm/j2cl-box2d/build.sh index 185a714e..36d04957 100755 --- a/wasm/j2cl-box2d/build.sh +++ b/wasm/j2cl-box2d/build.sh @@ -28,4 +28,5 @@ cp $BUILD_OUT_DIR/Box2dBenchmark_j2wasm_entry.js build/ | tee -a "$BUILD_LOG" # Since these imports/builtins are never called in the workload, they should not have any effect on runtime. sed -i 's/imports:/"wasm:js-string":{fromCharCodeArray:unused_import,concat:unused_import,equals:unused_import,compare:unused_import,length:unused_import,charCodeAt:unused_import,substring:unused_import},imports:/g' build/Box2dBenchmark_j2wasm_entry.js cp $BUILD_OUT_DIR/Box2dBenchmark_j2wasm_binary.wasm build/ | tee -a "$BUILD_LOG" +cp $BUILD_OUT_DIR/Box2dBenchmark_j2wasm_binary.binaryen.symbolmap build/ | tee -a "$BUILD_LOG" echo "Build success" | tee -a "$BUILD_LOG" diff --git a/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.binaryen.symbolmap b/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.binaryen.symbolmap new file mode 100755 index 00000000..1cd86c1e --- /dev/null +++ b/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.binaryen.symbolmap @@ -0,0 +1,251 @@ +0:m_indexOf__java_lang_String_NativeString__int__int@java.lang.String.NativeString +1:m_lastIndexOf__java_lang_String_NativeString__int__int@java.lang.String.NativeString +2:m_replace__javaemul_internal_NativeRegExp__java_lang_String_NativeString__java_lang_String_NativeString@java.lang.String.NativeString +3:m_performanceNow__double@java.lang.System +4:m_createJsError__java_lang_String_NativeString__javaemul_internal_ThrowableUtils_JsObject@javaemul.internal.Exceptions +5:m___java_lang_String_NativeString__java_lang_String_NativeString@javaemul.internal.NativeRegExp +6:m_generateClassName__java_lang_String_NativeString@java.lang.Class +7:m_fromNumber__int__int__java_lang_String_NativeString@java.lang.IntegralToString +8:m_sin__double__double@java.lang.Math +9:m_fromNumber__double__java_lang_String_NativeString@java.lang.RealToString +10:m_fromNumber__float__java_lang_String_NativeString@java.lang.RealToString +11:m_setJavaThrowableImpl__javaemul_internal_ThrowableUtils_JsObject__javaemul_internal_WasmExtern__void@javaemul.internal.ThrowableUtils +12:f___benchmarking_result__com_google_j2cl_benchmarking_framework_BenchmarkExecutor_External__void@com.google.j2cl.benchmarking.framework.BenchmarkExecutor.Global +13:m_nativeGc__void@com.google.j2cl.benchmarking.framework.Platform +14:fromCharCodeArray +15:concat +16:equals +17:compare +18:length +19:charCodeAt +20:substring +21:m_hashCode__int@java.lang.Object +22:m_toString__java_lang_String@java.lang.Object +23:m_nanoTime__long@java.lang.System +24:m_privateInitError__javaemul_internal_ThrowableUtils_JsObject__void_$pp_java_lang@java.lang.Throwable +25:m_toString__java_lang_String@java.lang.Throwable +26:m_hasNext__boolean@java.util.ArrayListBase.1 +27:m_next__java_lang_Object@java.util.ArrayListBase.1 +28:$getClassImpl__java_lang_Class@java.util.ArrayListBase.1 +29:m_mergeSort__arrayOf_java_lang_Object__arrayOf_java_lang_Object__int__int__int__java_util_Comparator__void@javaemul.internal.MergeSorter +30:m_getName__java_lang_String@java.lang.Class +31:m_stripToLastOccurrenceOf__java_lang_String__java_lang_String__java_lang_String@java.lang.Class +32:m_toString__java_lang_String@java.lang.Class +33:m_getClassName__java_lang_String_$p_java_lang_Class@java.lang.Class +34:m_repeatString__java_lang_String__int__java_lang_String@java.lang.Class +35:$getClassImpl__java_lang_Class@java.lang.Class +36:m_intToString_$private__int__int__java_lang_String@java.lang.IntegralToString +37:m_doubleToString__double__java_lang_String@java.lang.RealToString +38:m_valueOf__float__java_lang_String@java.lang.String +39:m_hashCode__int@java.lang.String +40:m_toString__java_lang_String@java.lang.String +41:m_compareTo__java_lang_Object__int@java.lang.String +42:$getClassImpl__java_lang_Class@java.lang.String +43:m_hashCode__int@java.util.HashMap.HashMapEntry +44:m_toString__java_lang_String@java.util.HashMap.HashMapEntry +45:$getClassImpl__java_lang_Class@java.util.HashMap.HashMapEntry +46:m_hasNext__boolean@java.util.HashMap.HashIterator +47:m_hasNext__boolean@java.util.LinkedHashMap.LinkedHashIterator +48:m_cloneImpl__java_lang_Object__int__int__java_lang_Object@javaemul.internal.ArrayHelper +49:m_createRecursively__arrayOf_int__int__int__java_lang_Object@javaemul.internal.WasmArray +50:m_hashCode__int@java.lang.Double +51:m_toString__java_lang_String@java.lang.Double +52:m_compareTo__java_lang_Object__int@java.lang.Double +53:$getClassImpl__java_lang_Class@java.lang.Double +54:m_valueOf__int__java_lang_Integer@java.lang.Integer +55:m_hashCode__int@java.lang.Integer +56:m_toString__java_lang_String@java.lang.Integer +57:m_compareTo__java_lang_Object__int@java.lang.Integer +58:$getClassImpl__java_lang_Class@java.lang.Integer +59:m_hashCode__int@java.lang.Long +60:m_toString__java_lang_String@java.lang.Long +61:m_compareTo__java_lang_Object__int@java.lang.Long +62:$getClassImpl__java_lang_Class@java.lang.Long +63:m_get__java_lang_Object__java_lang_Object@java.util.Collections.EmptyMap +64:m_hasNext__boolean@java.util.LinkedList.ListIteratorImpl +65:m_next__java_lang_Object@java.util.LinkedList.ListIteratorImpl +66:$getClassImpl__java_lang_Class@java.util.LinkedList.ListIteratorImpl +67:m_secondaryHash_$private__int__int@java.util.HashMap +68:m_get__java_lang_Object__java_lang_Object@java.util.HashMap +69:m_remove__java_lang_Object__java_lang_Object@java.util.HashMap +70:m_next__java_lang_Object@java.util.HashMap.EntryIterator +71:$getClassImpl__java_lang_Class@java.util.HashMap.EntryIterator +72:$getClassImpl__java_lang_Class@java.util.LinkedHashMap.LinkedEntry +73:m_next__java_lang_Object@java.util.LinkedHashMap.EntryIterator +74:$getClassImpl__java_lang_Class@java.util.LinkedHashMap.EntryIterator +75:$getClassImpl__java_lang_Class@javaemul.internal.WasmArray.OfObject +76:$create__@java.lang.AssertionError +77:$getClassImpl__java_lang_Class@java.lang.AssertionError +78:m_get__java_lang_Object__java_lang_Object@java.util.LinkedHashMap +79:$getClassImpl__java_lang_Class@java.lang.IllegalArgumentException +80:m_get__int__java_lang_Object@java.util.AbstractSequentialList +81:m_iterator__java_util_Iterator@java.util.AbstractSequentialList +82:m_remove__int__java_lang_Object@java.util.AbstractSequentialList +83:m_get__int__java_lang_Object@java.util.ArrayListBase +84:m_iterator__java_util_Iterator@java.util.ArrayListBase +85:m_remove__int__java_lang_Object@java.util.ArrayListBase +86:m_size__int@java.util.ArrayListBase +87:$getClassImpl__java_lang_Class@java.lang.ArrayIndexOutOfBoundsException +88:$ctor__void_$p_java_util_LinkedList@java.util.LinkedList +89:m_add__java_lang_Object__boolean@java.util.LinkedList +90:m_listIterator__int__java_util_ListIterator@java.util.LinkedList +91:m_size__int@java.util.LinkedList +92:m_add__java_lang_Object__boolean@java.util.ArrayList +93:m_combine__org_jbox2d_collision_AABB__org_jbox2d_collision_AABB__void@org.jbox2d.collision.AABB +94:m_toString__java_lang_String@org.jbox2d.collision.AABB +95:$getClassImpl__java_lang_Class@org.jbox2d.collision.AABB +96:m_clipSegmentToLine_$private__arrayOf_org_jbox2d_collision_Collision_ClipVertex__arrayOf_org_jbox2d_collision_Collision_ClipVertex__org_jbox2d_common_Vec2__float__int__int@org.jbox2d.collision.Collision +97:m_edgeSeparation__org_jbox2d_collision_shapes_PolygonShape__org_jbox2d_common_Transform__int__org_jbox2d_collision_shapes_PolygonShape__org_jbox2d_common_Transform__float@org.jbox2d.collision.Collision +98:m_findMaxSeparation__org_jbox2d_collision_Collision_EdgeResults__org_jbox2d_collision_shapes_PolygonShape__org_jbox2d_common_Transform__org_jbox2d_collision_shapes_PolygonShape__org_jbox2d_common_Transform__void@org.jbox2d.collision.Collision +99:m_set__org_jbox2d_collision_Collision_ClipVertex__void@org.jbox2d.collision.Collision.ClipVertex +100:$getClassImpl__java_lang_Class@org.jbox2d.collision.Collision.ClipVertex +101:m_set__org_jbox2d_collision_Distance_SimplexVertex__void@org.jbox2d.collision.Distance.SimplexVertex +102:$getClassImpl__java_lang_Class@org.jbox2d.collision.Distance.SimplexVertex +103:$create__@org.jbox2d.collision.Distance.SimplexCache +104:m_getClosestPoint__org_jbox2d_common_Vec2__void@org.jbox2d.collision.Distance.Simplex +105:m_getMetric__float@org.jbox2d.collision.Distance.Simplex +106:$create__@org.jbox2d.collision.Distance.DistanceProxy +107:m_set__org_jbox2d_collision_shapes_Shape__int__void@org.jbox2d.collision.Distance.DistanceProxy +108:m_getSupport__org_jbox2d_common_Vec2__int@org.jbox2d.collision.Distance.DistanceProxy +109:$create__@org.jbox2d.collision.DistanceInput +110:$create__@org.jbox2d.collision.Manifold +111:$getClassImpl__java_lang_Class@org.jbox2d.collision.ManifoldPoint +112:m_evaluate__int__int__float__float@org.jbox2d.collision.SeparationFunction +113:m_bufferMove__int__void@org.jbox2d.collision.broadphase.BroadPhase +114:m_allocateNode__org_jbox2d_collision_broadphase_DynamicTreeNode_$p_org_jbox2d_collision_broadphase_DynamicTree@org.jbox2d.collision.broadphase.DynamicTree +115:m_freeNode__org_jbox2d_collision_broadphase_DynamicTreeNode__void_$p_org_jbox2d_collision_broadphase_DynamicTree@org.jbox2d.collision.broadphase.DynamicTree +116:m_insertLeaf__int__void_$p_org_jbox2d_collision_broadphase_DynamicTree@org.jbox2d.collision.broadphase.DynamicTree +117:m_balance__org_jbox2d_collision_broadphase_DynamicTreeNode__org_jbox2d_collision_broadphase_DynamicTreeNode_$p_org_jbox2d_collision_broadphase_DynamicTree@org.jbox2d.collision.broadphase.DynamicTree +118:m_push__org_jbox2d_collision_broadphase_DynamicTreeNode__void@org.jbox2d.collision.broadphase.DynamicTree.TreeNodeStack +119:$create__int@org.jbox2d.collision.broadphase.DynamicTreeNode +120:$getClassImpl__java_lang_Class@org.jbox2d.collision.broadphase.DynamicTreeNode +121:m_compareTo__java_lang_Object__int@org.jbox2d.collision.broadphase.Pair +122:$getClassImpl__java_lang_Class@org.jbox2d.collision.broadphase.Pair +123:m_toString__java_lang_String@org.jbox2d.common.Mat22 +124:m_hashCode__int@org.jbox2d.common.Mat22 +125:$getClassImpl__java_lang_Class@org.jbox2d.common.Mat22 +126:m_hashCode__int@org.jbox2d.common.Mat33 +127:$getClassImpl__java_lang_Class@org.jbox2d.common.Mat33 +128:m_toString__java_lang_String@org.jbox2d.common.Rot +129:m_set__float__org_jbox2d_common_Rot@org.jbox2d.common.Rot +130:m_mulToOutUnsafe__org_jbox2d_common_Rot__org_jbox2d_common_Vec2__org_jbox2d_common_Vec2__void@org.jbox2d.common.Rot +131:m_mulTransUnsafe__org_jbox2d_common_Rot__org_jbox2d_common_Vec2__org_jbox2d_common_Vec2__void@org.jbox2d.common.Rot +132:$getClassImpl__java_lang_Class@org.jbox2d.common.Rot +133:m_normalize__void@org.jbox2d.common.Sweep +134:m_set__org_jbox2d_common_Sweep__org_jbox2d_common_Sweep@org.jbox2d.common.Sweep +135:m_getTransform__org_jbox2d_common_Transform__float__void@org.jbox2d.common.Sweep +136:m_mulToOut__org_jbox2d_common_Transform__org_jbox2d_common_Vec2__org_jbox2d_common_Vec2__void@org.jbox2d.common.Transform +137:m_mulToOutUnsafe__org_jbox2d_common_Transform__org_jbox2d_common_Vec2__org_jbox2d_common_Vec2__void@org.jbox2d.common.Transform +138:m_normalize__float@org.jbox2d.common.Vec2 +139:m_toString__java_lang_String@org.jbox2d.common.Vec2 +140:m_hashCode__int@org.jbox2d.common.Vec2 +141:$getClassImpl__java_lang_Class@org.jbox2d.common.Vec2 +142:m_toString__java_lang_String@org.jbox2d.common.Vec3 +143:m_hashCode__int@org.jbox2d.common.Vec3 +144:$getClassImpl__java_lang_Class@org.jbox2d.common.Vec3 +145:m_createFixture__org_jbox2d_dynamics_FixtureDef__org_jbox2d_dynamics_Fixture@org.jbox2d.dynamics.Body +146:m_setAwake__boolean__void@org.jbox2d.dynamics.Body +147:m_synchronizeFixtures__void@org.jbox2d.dynamics.Body +148:m_synchronizeTransform__void@org.jbox2d.dynamics.Body +149:m_advance__float__void@org.jbox2d.dynamics.Body +150:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.Body +151:m_findNewContacts__void@org.jbox2d.dynamics.ContactManager +152:m_destroy__org_jbox2d_dynamics_contacts_Contact__void@org.jbox2d.dynamics.ContactManager +153:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.FixtureProxy +154:$create__@org.jbox2d.dynamics.Island +155:m_init__int__int__int__org_jbox2d_callbacks_ContactListener__void@org.jbox2d.dynamics.Island +156:m_addType__org_jbox2d_pooling_IDynamicStack__org_jbox2d_collision_shapes_ShapeType__org_jbox2d_collision_shapes_ShapeType__void_$p_org_jbox2d_dynamics_World@org.jbox2d.dynamics.World +157:m_createBody__org_jbox2d_dynamics_BodyDef__org_jbox2d_dynamics_Body@org.jbox2d.dynamics.World +158:$ctor__org_jbox2d_pooling_IWorldPool__void_$p_org_jbox2d_dynamics_contacts_Contact@org.jbox2d.dynamics.contacts.Contact +159:m_init__org_jbox2d_dynamics_Fixture__int__org_jbox2d_dynamics_Fixture__int__void@org.jbox2d.dynamics.contacts.Contact +160:m_update__org_jbox2d_callbacks_ContactListener__void@org.jbox2d.dynamics.contacts.Contact +161:$create__@org.jbox2d.dynamics.contacts.ContactPositionConstraint +162:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.ContactPositionConstraint +163:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.ContactRegister +164:$create__@org.jbox2d.dynamics.contacts.ContactSolver +165:m_init__org_jbox2d_dynamics_contacts_ContactSolver_ContactSolverDef__void@org.jbox2d.dynamics.contacts.ContactSolver +166:m_initializeVelocityConstraints__void@org.jbox2d.dynamics.contacts.ContactSolver +167:m_solveVelocityConstraints__void@org.jbox2d.dynamics.contacts.ContactSolver +168:m_initialize__org_jbox2d_dynamics_contacts_ContactPositionConstraint__org_jbox2d_common_Transform__org_jbox2d_common_Transform__int__void@org.jbox2d.dynamics.contacts.PositionSolverManifold +169:$create__@org.jbox2d.dynamics.contacts.ContactVelocityConstraint +170:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.ContactVelocityConstraint +171:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.ContactVelocityConstraint.VelocityConstraintPoint +172:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.Position +173:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.Velocity +174:$create__@org.jbox2d.common.Timer +175:m_reset__void@org.jbox2d.common.Timer +176:m_getMilliseconds__float@org.jbox2d.common.Timer +177:$ctor__int__void_$p_org_jbox2d_pooling_normal_MutableStack@org.jbox2d.pooling.normal.MutableStack +178:m_extendStack__int__void_$p_org_jbox2d_pooling_normal_MutableStack@org.jbox2d.pooling.normal.MutableStack +179:m_pop__java_lang_Object@org.jbox2d.pooling.normal.MutableStack +180:$ctor__int__int__void_$p_org_jbox2d_pooling_normal_OrderedStack@org.jbox2d.pooling.normal.OrderedStack +181:$create_$private__@org.jbox2d.collision.shapes.EdgeShape +182:m_computeAABB__org_jbox2d_collision_AABB__org_jbox2d_common_Transform__int__void@org.jbox2d.collision.shapes.EdgeShape +183:$create_$private__@org.jbox2d.collision.shapes.PolygonShape +184:m_computeAABB__org_jbox2d_collision_AABB__org_jbox2d_common_Transform__int__void@org.jbox2d.collision.shapes.PolygonShape +185:m_sin__float__float@org.jbox2d.common.MathUtils +186:m_sinLUT_$private__float__float@org.jbox2d.common.MathUtils +187:m_cos__float__float@org.jbox2d.common.MathUtils +188:m_abs__float__float@org.jbox2d.common.MathUtils +189:m_max__int__int__int@org.jbox2d.common.MathUtils +190:m_min__float__float__float@org.jbox2d.common.MathUtils +191:m_clamp__float__float__float__float@org.jbox2d.common.MathUtils +192:m_distance__org_jbox2d_common_Vec2__org_jbox2d_common_Vec2__float@org.jbox2d.common.MathUtils +193:m_init__org_jbox2d_dynamics_Fixture__int__org_jbox2d_dynamics_Fixture__int__void@org.jbox2d.dynamics.contacts.ChainAndCircleContact +194:m_evaluate__org_jbox2d_collision_Manifold__org_jbox2d_common_Transform__org_jbox2d_common_Transform__void@org.jbox2d.dynamics.contacts.ChainAndCircleContact +195:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.ChainAndCircleContact +196:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.ChainAndPolygonContact +197:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.CircleContact +198:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.EdgeAndCircleContact +199:m_evaluate__org_jbox2d_collision_Manifold__org_jbox2d_common_Transform__org_jbox2d_common_Transform__void@org.jbox2d.dynamics.contacts.EdgeAndPolygonContact +200:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.EdgeAndPolygonContact +201:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.PolygonAndCircleContact +202:m_evaluate__org_jbox2d_collision_Manifold__org_jbox2d_common_Transform__org_jbox2d_common_Transform__void@org.jbox2d.dynamics.contacts.PolygonContact +203:$getClassImpl__java_lang_Class@org.jbox2d.dynamics.contacts.PolygonContact +204:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.1 +205:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.1 +206:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.2 +207:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.2 +208:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.3 +209:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.3 +210:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.4 +211:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.4 +212:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.5 +213:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.5 +214:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.6 +215:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.6 +216:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.7 +217:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.7 +218:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.8 +219:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.8 +220:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.9 +221:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.9 +222:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.10 +223:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.10 +224:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.11 +225:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.11 +226:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.12 +227:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.12 +228:m_newInstance__java_lang_Object@org.jbox2d.pooling.normal.DefaultWorldPool.13 +229:$getClassImpl__java_lang_Class@org.jbox2d.pooling.normal.DefaultWorldPool.13 +230:m_execute_$private__com_google_j2cl_benchmarking_framework_AbstractBenchmark__com_google_j2cl_benchmarking_framework_Clock__int__int__long__com_google_j2cl_benchmarking_framework_BenchmarkResult@com.google.j2cl.benchmarking.framework.BenchmarkExecutor +231:m_log__java_lang_String__arrayOf_java_lang_Object__void@com.google.j2cl.benchmarking.framework.BenchmarkExecutor +232:m_useResult__java_lang_Object__void@com.google.j2cl.benchmarking.framework.BenchmarkExecutor +233:m_utilizeMap__java_util_Map__void@com.google.j2cl.benchmarking.framework.CollectionUtilizer +234:m_utilizeList__java_util_List__void@com.google.j2cl.benchmarking.framework.CollectionUtilizer +235:m_size__int@com.google.j2cl.benchmarking.framework.CollectionUtilizer.1 +236:m_add__java_lang_Object__boolean@com.google.j2cl.benchmarking.framework.CollectionUtilizer.1 +237:m_get__int__java_lang_Object@com.google.j2cl.benchmarking.framework.CollectionUtilizer.1 +238:m_size__int@com.google.j2cl.benchmarking.framework.CollectionUtilizer.2 +239:m_add__java_lang_Object__boolean@com.google.j2cl.benchmarking.framework.CollectionUtilizer.2 +240:m_get__int__java_lang_Object@com.google.j2cl.benchmarking.framework.CollectionUtilizer.2 +241:m_run__java_lang_Object@com.google.j2cl.benchmarks.octane.Box2dBenchmark +242:m_execute__$export__java_lang_String_NativeString@com.google.j2cl.benchmarks.octane.Box2dBenchmarkLauncher +243:m_prepareForRunOnce__$export__void@com.google.j2cl.benchmarks.octane.Box2dBenchmarkLauncher +244:m_runFixedCount__$export__int__void@com.google.j2cl.benchmarks.octane.Box2dBenchmarkLauncher +245:m_runOnce__$export__void@com.google.j2cl.benchmarks.octane.Box2dBenchmarkLauncher +246:byn-split-outlined-A$$clinit__void__@java.lang.Integer.BoxedValues +247:byn-split-outlined-A$$clinit__void__@org.jbox2d.common.MathUtils +248:byn-split-outlined-A$$clinit__void__@org.jbox2d.collision.Distance +249:byn-split-outlined-A$$clinit__void__@org.jbox2d.collision.TimeOfImpact +250:byn-split-outlined-A$$clinit__void__@com.google.j2cl.benchmarking.framework.BenchmarkExecutor From ab0c2eb94af3857e62ffd3bc0931b4c6ebff81ec Mon Sep 17 00:00:00 2001 From: Daniel Lehmann Date: Wed, 20 Aug 2025 17:41:20 +0200 Subject: [PATCH 4/4] fix for new JetStream global object in driver --- wasm/j2cl-box2d/benchmark.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/wasm/j2cl-box2d/benchmark.js b/wasm/j2cl-box2d/benchmark.js index db6fbd2d..8fdb128a 100644 --- a/wasm/j2cl-box2d/benchmark.js +++ b/wasm/j2cl-box2d/benchmark.js @@ -24,7 +24,7 @@ class Benchmark { wasmInstanceExports; async init() { - this.wasmBinary = await getBinary(wasmBinary); + this.wasmBinary = await JetStream.getBinary(JetStream.preload.wasmBinary); } async runIteration() {