diff --git a/JetStreamDriver.js b/JetStreamDriver.js index d12c4259..3ea440d8 100644 --- a/JetStreamDriver.js +++ b/JetStreamDriver.js @@ -2521,6 +2521,19 @@ let BENCHMARKS = [ worstCaseCount: 2, tags: ["Default", "Wasm", "dotnet"], }), + // J2CL + new AsyncBenchmark({ + name: "j2cl-box2d-wasm", + 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..8fdb128a --- /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 JetStream.getBinary(JetStream.preload.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..8ab7a6ab --- /dev/null +++ b/wasm/j2cl-box2d/build.log @@ -0,0 +1,5 @@ +Built on 2025-08-20 17:36:29+02:00 +Cloning into 'j2cl'... +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 new file mode 100755 index 00000000..36d04957 --- /dev/null +++ b/wasm/j2cl-box2d/build.sh @@ -0,0 +1,32 @@ +#!/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" +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 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 00000000..26c4380c Binary files /dev/null and b/wasm/j2cl-box2d/build/Box2dBenchmark_j2wasm_binary.wasm differ 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