diff --git a/benchmarks/native_property_get/README.md b/benchmarks/native_property_get/README.md new file mode 100644 index 0000000000..3452726bde --- /dev/null +++ b/benchmarks/native_property_get/README.md @@ -0,0 +1,49 @@ +# Native property Get probes + +These probes accompany the 2026-09-14 native-side property Get brief. They +separate positive own/prototype reads from non-regex iterator, promise, and +JSON work. Each program checks its result; the runner also compares stdout +with the repository's pinned Node version and rejects an empty result. + +Build the compiler and both static wrappers from the same checkout and +package set. Use an isolated target directory/worktree for each concurrent +build. For the Linux instruction comparison: + +```sh +CARGO_PROFILE_RELEASE_CODEGEN_UNITS=16 \ +CARGO_PROFILE_RELEASE_DEBUG=1 CARGO_PROFILE_RELEASE_STRIP=none \ +cargo build --release --locked -j4 \ + -p perry -p perry-runtime-static -p perry-stdlib-static +python3 benchmarks/native_property_get/measure.py \ + --runtime-dir target/release --out /absolute/path/to/new-results \ + --node /path/to/node-v26.5.1/bin/node +``` + +The output directory must be new. The runner records the source commit, +compiler/archive/probe SHA-256 hashes, three `instructions:u` counts, +instruction-sampled DWARF call stacks, period-weighted folded stacks, and +inclusive Get attribution. Nested Get frames count once in the inclusive +share. Shares are sampling estimates; the stat counts are the performance +comparison. `--debug-symbols` is required when compiling the probes, and +`--no-auto-optimize` pins the runtime archives. LLVM's addr2line is selected +locally when available so host binutils does not choke on runtime DWARF. + +`--smoke` compiles every probe, runs 100 iterations, and compares with Node +without requiring Linux perf. A zero Get attribution is rejected: it can +indicate stripped symbols or a probe that did not exercise the intended path. + +The iterator reuses its result object. It avoids large retained arrays and +therefore does not depend on resolving the concurrent #10215 investigation. +The thenable and toJSON probes use positive lookups because main already +optimizes many negative probes for those names. + +Measured results, scope, and validation are in [REPORT.md](REPORT.md). To replay +the fault injections with no other builds reading this worktree: + +```sh +python3 benchmarks/native_property_get/faults.py --out /absolute/path/to/new-fault-results +``` + +The three mutants must fail their named test assertions, and restored sources +must pass the eight focused tests. The GC custody inventory classifies the +forced-slow boolean as test-only; production binaries contain no switch. diff --git a/benchmarks/native_property_get/REPORT.md b/benchmarks/native_property_get/REPORT.md new file mode 100644 index 0000000000..614dc6217f --- /dev/null +++ b/benchmarks/native_property_get/REPORT.md @@ -0,0 +1,137 @@ +# Native-side property Get: measured ordinary-data path + +Base: `9fda98df68d9fac3c08b2385fae007aa9f5278df` (main, 0.5.1563). +Date: 2026-09-14. Measurements: Linux x86_64, perrymaster, AMD Ryzen 7 7700X. + +## Change and safety boundary + +`Reflect.get`, the named-field ABI, and the native borrowed-name getter share +an inlinable positive lookup. It classifies the pointer once per chain link, +requires an arena-backed GC object with an ordinary shape and an admitted +ordinary class ID, checks the accessor-key Bloom summary, then reads the +current shape's own data slot. It follows explicit ordinary prototypes or +already-rooted synthetic class prototype pointers for at most 32 links. +It does not infer absence: every unproven case falls through to the original +Get implementation. Keys remain borrowed throughout this callback-free, +JS-allocation-free lookup; the consult-only keys index cannot build or collect. + +No new GC roots or pointer caches are introduced. The `toJSON` caller retains +its handle scope, reuses the rooted canonical key, and uses the new canonical +key Get API. Default builtin prototype resolution remains on the slow path: +it can initialize objects and observe replacement through globalThis. + +Own/prototype accessors, proxies, private-looking names, `constructor`, declared +classes, process.env, mapped arguments, element-bearing objects, and native +exotics decline. In particular, RegExp expandos and `lastIndex` still use the +existing exotic handler. Inherited null/undefined values conservatively decline +to preserve the current slow resolver's behavior. A distinct Reflect receiver +can use a data hit because no getter or receiver binding is observed. + +This deliberately limits the optimization to ordinary data reads. The measured +improvement does not require exotic bypasses, new per-realm builtin pointers, +or a per-call-site cache. Remaining hot costs include class-ID membership and +prototype registries; those have separate invalidation and collision rules. + +## Instruction evidence + +The base workloads were measured before runtime edits. All five programs check +their checksum and match pinned Node 26.5.1 stdout. Both builds use the same +checkout base, package set, release codegen-units=16, debug=1, strip=none, and +repository unwind/frame-pointer flags. Probe compilation uses +`--no-auto-optimize --debug-symbols` and an explicit `PERRY_RUNTIME_DIR`. +The table uses medians of three `perf stat -e instructions:u` runs, including +startup. It makes no shared-host wall-clock speed claim. + +| Workload | Iterations | Base instructions | Candidate instructions | Reduction | Inclusive Get share, base → candidate | +|---|---:|---:|---:|---:|---:| +| `reflect_own` | 200,000 | 498,582,567 | 143,385,957 | 71.24% | 98.80% → 97.20% | +| `reflect_proto` | 200,000 | 1,369,594,468 | 305,995,648 | 77.66% | 98.90% → 99.35% | +| `iterator` | 200,000 | 886,642,572 | 886,162,527 | 0.05% | 0.68% → 0.79% | +| `thenable` | 20,000 | 365,634,266 | 320,441,221 | 12.36% | 15.50% → 2.66% | +| `tojson` | 100,000 | 742,646,720 | 423,858,278 | 42.93% | 50.71% → 28.22% | + +`iterator` is a user `for…of` iterator that reuses its result object: generic +Get is under 1% of the baseline, so the neutral result is expected. Positive +thenable assimilation and inherited `toJSON` expose the runtime cost clearly. +The synthetic Reflect probes cover own data and two prototype links. + +Attribution uses `perf record -e instructions:u -c 500003 --call-graph +dwarf,16384 -m 64M --no-buildid --no-buildid-cache`, then `perf script --no-inline`. +All ten final profiles reported no lost samples. Folded stacks are weighted by +sample period, and nested Get frames count once in the inclusive share. Shares +are sampling estimates, especially the small iterator share. An earlier smaller +sampling buffer dropped samples; those attribution runs are excluded here. + +The JSON files in `evidence/` record all counts, shares, top inclusive-Get leaf +symbols, probe/binary hashes, and compiler/runtime archive hashes. The compressed +`measurement-receipts.tar.gz` contains raw stat rows, checked stdout, final +folded stacks, perf record logs, and the measured candidate source patch. +The patch records the pre-commit source snapshot; later evidence and harness +reporting edits do not change the measured runtime. Full perf data and linked +probe binaries remain under `/root/native-property-get/` on perrymaster. + +## Correctness and fault injection + +Eight Rust tests compare ordinary reads against a forced slow path and cover +all value kinds, prototype mutation, shadow/delete/freeze, own and inherited +getters, setter-only descriptors, proxies, class statics, private-looking keys, +arrays, Buffer, mapped arguments, RegExp expandos/accessors, long keys, and +spilled/deleted shape slots. Getter counts assert one invocation per Get. +`test-files/test_gap_native_property_get.ts` adds 42 lines of checked parity output, +including distinct receivers, proxy traps/revocation, key-conversion order, +symbols, class/private syntax, Date, typed arrays, and RegExp. + +The test-only forced-slow switch is thread-local; it cannot affect production. +`faults.py` runs healthy tests before and after each serial source-mutation +campaign, restores source files in `finally`, and requires a named assertion +failure (a compile failure does not count). All three mutations were killed by named assertion failures (exit 101): + +| Mutation | Failing test | +|---|---| +| Force every classified Get to decline | `own_data_is_served_and_matches_forced_slow_for_all_value_kinds` | +| Ignore the accessor Bloom guard | `accessor_bloom_guard_preserves_own_and_inherited_getter_calls` | +| Ignore RegExp own `value` expandos in the fallback | `regexp_expandos_and_accessors_remain_on_the_exotic_path` | + +The last mutation exercises the preserved exotic fallback; this change adds no +exotic fast path. The restored eight-test suite passed before and after the +campaign. See `evidence/faults.json` and `fault-logs.tar.gz`. + +## Validation + +- Full runtime unit suite: 3,803 passed, 4 ignored, 0 failed, single-threaded. + Base suite: 3,795 passed, 4 ignored; the known native-stack test passed here. +- `cargo check -p perry-runtime --no-default-features --features full`: passed. +- Clippy all-target diagnostics compared with the captured base: no additions + or removals after normalizing shifted line numbers. Both runs retain the same + 12 pre-existing `approx_constant` errors; see `evidence/clippy-diff.json`. +- `cargo fmt --all --check`, `git diff --check`, and Python syntax checks passed. +- The final measurement harness smoke test passed all five programs on Linux. + The 42-line parity program matches Node on both base and candidate. +- The final full lint replay ran both script and compile tiers: 80 of 83 + commands passed, with three existing failures and two CI-only skips. A new test-only + boolean initially required a custody verdict; the explicit `test_only` entry + fixes that failure, with no added pointer debt. The script-tier replay passes + every executable gate except the pre-existing public benchmark freshness red. + The compile tier also exposes pre-existing unused WebAssembly helpers, an existing test cache assignment, and API + docs drift (`bun-pty`). The unused-helper failures reproduce on a clean base + worktree. All ten API-manifest source files are byte-identical to base, and + the generated diff is saved. See `evidence/base-gate-comparison.json`. +- GC ratchet: all 14 probes match Node, with seven measured repetitions and two + trace passes on both base and candidate. All 126 shared-CI metric medians + (including the probe-specific exclusions) are exactly identical. The checker + passes against a fresh same-host base artifact. The repository's older pinned + artifact fails on both base and candidate; it was not changed or re-pinned. + See `evidence/gc-ratchet-ab.json` and the raw GC receipts. +- GC stress: all 86 corpus programs ran across seven PR arms: 428 PASS, 167 + UNVER (output matched but that arm did not collect), 7 FAIL. Every required + arm passes aggregate liveness. All seven failures are the HTTP/2 pending-event + callback fixture. A fresh-base replay reproduces all seven failures with + byte-identical evidence strings and collector counters. See + `evidence/gc-stress-base-http2.json` and `gc-stress-receipts.tar.gz`. The + single-fixture replay has inert arms as expected; the full candidate corpus + satisfies every arm's liveness requirement. + +Main advanced to `eb13fa188d` while this work was validated, including separate +GC and HTTP fixes. The measurements and A/B receipts deliberately remain on +`9fda98df68`; the merge train must replay the combined tree. This branch does +not absorb or rebaseline those independent changes. diff --git a/benchmarks/native_property_get/evidence/api-docs-drift.patch.gz b/benchmarks/native_property_get/evidence/api-docs-drift.patch.gz new file mode 100644 index 0000000000..2914094f81 Binary files /dev/null and b/benchmarks/native_property_get/evidence/api-docs-drift.patch.gz differ diff --git a/benchmarks/native_property_get/evidence/base-gate-comparison.json b/benchmarks/native_property_get/evidence/base-gate-comparison.json new file mode 100644 index 0000000000..8aa96cceb5 --- /dev/null +++ b/benchmarks/native_property_get/evidence/base-gate-comparison.json @@ -0,0 +1,40 @@ +{ + "base_commit": "9fda98df68d9fac3c08b2385fae007aa9f5278df", + "warnings": { + "base": [ + "error: function `registered_extern_handle` is never used", + "error: function `wasm_memory_descriptor_maximum` is never used" + ], + "candidate": [ + "error: function `registered_extern_handle` is never used", + "error: function `wasm_memory_descriptor_maximum` is never used" + ], + "base_test_warnings": [ + "warning: value assigned to `cache` is never read", + "warning: function `register_extern_wrapper` is never used", + "warning: function `registered_extern_handle` is never used", + "warning: function `wasm_memory_descriptor_maximum` is never used" + ], + "candidate_test_warnings": [ + "warning: value assigned to `cache` is never read", + "warning: function `register_extern_wrapper` is never used", + "warning: function `registered_extern_handle` is never used", + "warning: function `wasm_memory_descriptor_maximum` is never used" + ] + }, + "api_manifest_source_identical": true, + "api_manifest_files": [ + "crates/perry-api-manifest/Cargo.toml", + "crates/perry-api-manifest/src/emit.rs", + "crates/perry-api-manifest/src/entries.rs", + "crates/perry-api-manifest/src/entries/part_1.rs", + "crates/perry-api-manifest/src/entries/part_2.rs", + "crates/perry-api-manifest/src/entries/part_3.rs", + "crates/perry-api-manifest/src/entries/part_4.rs", + "crates/perry-api-manifest/src/lib.rs", + "crates/perry-api-manifest/src/native_abi.rs", + "crates/perry-api-manifest/tests/stub_inventory.rs" + ], + "api_docs_drift": "Generated docs add bun-pty from unchanged manifest; saved in api-docs-drift.patch.gz.", + "public_freshness_base": "public baseline error: public artifact benchmark inputs changed; regenerate it with ./benchmarks/run_public_baseline.sh" +} diff --git a/benchmarks/native_property_get/evidence/baseline-build.json b/benchmarks/native_property_get/evidence/baseline-build.json new file mode 100644 index 0000000000..d24f64d7e8 --- /dev/null +++ b/benchmarks/native_property_get/evidence/baseline-build.json @@ -0,0 +1,16 @@ +{ + "commit": "9fda98df68d9fac3c08b2385fae007aa9f5278df", + "node": "v26.5.1", + "artifacts": { + "perry": "5c3d79c951b6d10ebb394f01d8e4258445567433060e025a900a58eb79c15f71", + "libperry_runtime.a": "d4d6cfef4cc9c076fb00dedf99c56b5be9cab5f4a4813c1b097fd41f47ff18b6", + "libperry_stdlib.a": "871746c24fbedff2fc2076fec4ae598a38a79efabdff96ab1cec835457ff2203" + }, + "probes": { + "reflect_own": "be47a8c4951b74b7eb1303afd1b02ed929b954f485cf7f0d10194968c1f29cba", + "reflect_proto": "45e82bd599efdcff78032103ec31d87ad087afdf7bdc7438b4abf91142b8b2c3", + "iterator": "da8ac63a3918d5aede6185b823e94d896dab89327a2b2718278a8355df1240a4", + "thenable": "f418d2de753b6baef4d2cad9fba2dd7d41d44e460f9da74fad84778b0c6374ec", + "tojson": "139928fda9c0e8f2c2d1a38feb4ac8f18ef14d8dad13114b325b06650e2155e0" + } +} diff --git a/benchmarks/native_property_get/evidence/baseline.json b/benchmarks/native_property_get/evidence/baseline.json new file mode 100644 index 0000000000..e1cc3171d9 --- /dev/null +++ b/benchmarks/native_property_get/evidence/baseline.json @@ -0,0 +1,428 @@ +{ + "reflect_own": { + "iterations": 200000, + "instructions": [ + 498582567, + 498582572, + 498582459 + ], + "median": 498582567, + "get_inclusive_percent": 98.79518072289157, + "get_leaf_percent_of_program": [ + [ + "js_reflect_get", + 12.951807228915662 + ], + [ + "js_object_get_field_by_name", + 10.943775100401606 + ], + [ + "perry_runtime::object::field_get_set::get_field_by_name_tail::get_field_by_name_object_tail", + 9.337349397590362 + ], + [ + "perry_runtime::object::class_registry::parent_static::is_class_object_ptr", + 9.337349397590362 + ], + [ + "js_to_primitive", + 9.036144578313253 + ], + [ + "::copy_of_key", + 4.216867469879518 + ], + [ + "perry_runtime::async_hooks::is_async_resource_handle", + 4.116465863453815 + ], + [ + "core::str::converts::from_utf8", + 3.6144578313253013 + ], + [ + "perry_runtime::closure::dynamic_props::is_closure_ptr", + 2.8112449799196786 + ], + [ + "perry_runtime::object::arguments::is_arguments_object", + 2.710843373493976 + ], + [ + "perry_runtime::proxy::target_get_property_key", + 2.710843373493976 + ], + [ + "perry_runtime::object::shapes::shape_live_inline_slot_count_by_id", + 2.710843373493976 + ], + [ + "perry_runtime::object::class_meta_registry::get_parent_class_id", + 2.610441767068273 + ], + [ + "perry_runtime::buffer::header::is_registered_buffer", + 2.108433734939759 + ], + [ + "perry_runtime::object::field_get_set::has_property::closure_dynamic_prop_by_key", + 1.7068273092369477 + ], + [ + "perry_runtime::proxy::reflect_value_is_object", + 1.7068273092369477 + ], + [ + "perry_runtime::temporal::is_temporal_cell_addr", + 1.5060240963855422 + ], + [ + "perry_runtime::typedarray_props::typed_array_addr_from_value", + 1.5060240963855422 + ], + [ + "perry_runtime::date::is_date_cell_addr", + 1.5060240963855422 + ], + [ + "trunc", + 1.104417670682731 + ] + ], + "sampled_instructions": 498002988, + "binary_sha256": "e2c4b05f839d026a5c5f5bd3d49f5e647855b1f45a23a5c49d0f04fd179b9082" + }, + "reflect_proto": { + "iterations": 200000, + "instructions": [ + 1369594500, + 1369593934, + 1369594468 + ], + "median": 1369594468, + "get_inclusive_percent": 98.90470974808325, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::class_meta_registry::get_parent_class_id", + 16.502373128879153 + ], + [ + "js_object_get_field_by_name", + 10.076670317634173 + ], + [ + "perry_runtime::object::class_registry::state::class_decl_prototype_object", + 7.6305220883534135 + ], + [ + "perry_runtime::object::field_get_set::get_field_by_name_tail::get_field_by_name_object_tail", + 7.484483388097846 + ], + [ + "js_reflect_get", + 4.490690032858708 + ], + [ + "perry_runtime::object::class_registry::prototype_objects::resolve_proto_chain_field_inner", + 4.417670682730924 + ], + [ + "core::str::converts::from_utf8", + 3.833515881708653 + ], + [ + "perry_runtime::async_hooks::is_async_resource_handle", + 3.687477181453085 + ], + [ + "perry_runtime::closure::dynamic_props::is_closure_ptr", + 3.4684191310697337 + ], + [ + "trunc", + 2.9937933552391383 + ], + [ + "perry_runtime::object::arguments::is_arguments_object", + 2.8112449799196786 + ], + [ + "perry_runtime::object::class_registry::parent_static::is_class_object_ptr", + 2.7747353048557866 + ], + [ + "perry_runtime::buffer::header::is_registered_buffer", + 2.701715954728003 + ], + [ + "::copy_of_key", + 2.701715954728003 + ], + [ + "perry_runtime::temporal::is_temporal_cell_addr", + 2.701715954728003 + ], + [ + "js_to_primitive", + 2.3366192040890836 + ], + [ + "perry_runtime::proxy::reflect_value_is_object", + 1.8985031033223805 + ], + [ + "perry_runtime::object::class_registry::prototype_objects::class_prototype_object", + 1.8619934282584885 + ], + [ + "perry_runtime::object::prototype_chain::meta_capable_object", + 1.3508579773640015 + ], + [ + "perry_runtime::closure::dynamic_props::closure_get_dynamic_prop", + 1.3143483023001095 + ] + ], + "sampled_instructions": 1369508217, + "binary_sha256": "6defa98c303cff2f955b8611a71b528144ff0697d7c6d4f041cbd10f7f63025b" + }, + "iterator": { + "iterations": 200000, + "instructions": [ + 886642572, + 886643407, + 886642216 + ], + "median": 886642572, + "get_inclusive_percent": 0.676818950930626, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::field_get_set::get_field_by_name_tail::get_field_by_name_object_tail", + 0.11280315848843768 + ], + [ + "perry_runtime::object::prototype_chain::meta_capable_object", + 0.11280315848843768 + ], + [ + "perry_runtime::object::class_registry::parent_static::is_class_object_ptr", + 0.11280315848843768 + ], + [ + "mi_free", + 0.05640157924421884 + ], + [ + "js_array_get_f64", + 0.05640157924421884 + ], + [ + "js_object_get_field_by_name", + 0.05640157924421884 + ], + [ + "perry_runtime::object::field_get_set::accessors::array_subclass_prototype_field", + 0.05640157924421884 + ], + [ + "__memmove_avx512_unaligned_erms", + 0.05640157924421884 + ], + [ + "::from_utf8_lossy", + 0.05640157924421884 + ] + ], + "sampled_instructions": 886505319, + "binary_sha256": "46bc863ba75b118f1193d2a3fb4cfc22c1deb50ab23a56f58b573b217b62bb50" + }, + "thenable": { + "iterations": 20000, + "instructions": [ + 365635735, + 365634266, + 365626025 + ], + "median": 365634266, + "get_inclusive_percent": 15.500685871056241, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::field_get_set::get_field_by_name_tail::get_field_by_name_object_tail", + 1.7832647462277091 + ], + [ + "js_object_get_field_by_name", + 1.7832647462277091 + ], + [ + "perry_runtime::object::object_ops::keys_array::own_key_present", + 1.0973936899862826 + ], + [ + "js_dynamic_object_get_property", + 0.9602194787379973 + ], + [ + "perry_runtime::object::class_meta_registry::get_parent_class_id", + 0.823045267489712 + ], + [ + "core::str::converts::from_utf8", + 0.6858710562414266 + ], + [ + "perry_runtime::buffer::header::is_registered_buffer", + 0.411522633744856 + ], + [ + "perry_runtime::date::is_date_cell_addr", + 0.411522633744856 + ], + [ + ">>>::with::<::drop::{closure#0}, ()>", + 0.411522633744856 + ], + [ + "perry_runtime::object::class_registry::parent_static::is_class_object_ptr", + 0.411522633744856 + ], + [ + "perry_runtime::object::field_get_set::has_property::closure_dynamic_prop_by_key", + 0.411522633744856 + ], + [ + "perry_runtime::object::keys_lookup::keys_array_dense_slots", + 0.411522633744856 + ], + [ + "perry_runtime::object::object_keys_array", + 0.411522633744856 + ], + [ + "perry_runtime::temporal::is_temporal_cell_addr", + 0.411522633744856 + ], + [ + "perry_runtime::map::is_registered_map", + 0.27434842249657065 + ], + [ + "perry_runtime::object::field_get_set::enumeration::canonical_array_index", + 0.27434842249657065 + ], + [ + "perry_runtime::object::field_get_set::get_field_by_name_async::async_resource_property", + 0.27434842249657065 + ], + [ + "perry_runtime::arena::allocators::arena_alloc", + 0.27434842249657065 + ], + [ + ">>>>::read", + 0.27434842249657065 + ], + [ + "perry_runtime::async_hooks::is_async_resource_handle", + 0.27434842249657065 + ] + ], + "sampled_instructions": 364502187, + "binary_sha256": "d4fba118c00d48a015b0cd5b29238b10cc85306cdf7202f95f456e58c7366791" + }, + "tojson": { + "iterations": 100000, + "instructions": [ + 742647158, + 742646366, + 742646720 + ], + "median": 742646720, + "get_inclusive_percent": 50.707070707070706, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::class_meta_registry::get_parent_class_id", + 6.734006734006734 + ], + [ + "perry_runtime::object::field_get_set::get_field_by_name_tail::get_field_by_name_object_tail", + 6.127946127946128 + ], + [ + "js_object_get_field_by_name", + 5.3872053872053876 + ], + [ + "perry_runtime::object::class_registry::state::class_decl_prototype_object", + 3.771043771043771 + ], + [ + "perry_runtime::closure::dynamic_props::is_closure_ptr", + 3.2323232323232323 + ], + [ + "::copy_of_key", + 3.0976430976430978 + ], + [ + "perry_runtime::async_hooks::is_async_resource_handle", + 2.356902356902357 + ], + [ + "perry_runtime::object::class_registry::prototype_objects::resolve_proto_chain_field_inner", + 2.2222222222222223 + ], + [ + "perry_runtime::object::class_registry::parent_static::is_class_object_ptr", + 1.8181818181818181 + ], + [ + "core::str::converts::from_utf8", + 1.6161616161616161 + ], + [ + "perry_runtime::buffer::header::is_registered_buffer", + 1.5488215488215489 + ], + [ + "perry_runtime::temporal::is_temporal_cell_addr", + 1.2794612794612794 + ], + [ + "perry_runtime::date::is_date_cell_addr", + 1.2121212121212122 + ], + [ + "perry_runtime::object::arguments::is_arguments_object", + 0.9427609427609428 + ], + [ + "::hash_one::<&i32>", + 0.8754208754208754 + ], + [ + "perry_runtime::async_hooks::try_async_resource_property_dispatch", + 0.8754208754208754 + ], + [ + "trunc", + 0.8080808080808081 + ], + [ + "perry_runtime::object::object_keys_array", + 0.8080808080808081 + ], + [ + "perry_runtime::typedarray_props::typed_array_addr_from_value", + 0.8080808080808081 + ], + [ + "perry_runtime::object::field_get_set::has_property::closure_dynamic_prop_by_key", + 0.8080808080808081 + ] + ], + "sampled_instructions": 742504455, + "binary_sha256": "fbde7ea49d88679942de1296eadd260ba780e8b352e1794567d17d428f3de268" + } +} diff --git a/benchmarks/native_property_get/evidence/candidate-build.json b/benchmarks/native_property_get/evidence/candidate-build.json new file mode 100644 index 0000000000..c2ccb129d7 --- /dev/null +++ b/benchmarks/native_property_get/evidence/candidate-build.json @@ -0,0 +1,17 @@ +{ + "commit": "9fda98df68d9fac3c08b2385fae007aa9f5278df", + "node": "v26.5.1", + "source_patch_sha256": "3311791400a786a77d4c0a612dfdeffe16834ddaad24abdd15ec9783563bbc8d", + "artifacts": { + "perry": "0a1de70b4120ca8a578495031cd47c23f368dd1af87ba740bee1e95422353641", + "libperry_runtime.a": "ee64fc51d1cf58565c79edd88e0c449888920df0fddf69048ae7e0e2e612e0d1", + "libperry_stdlib.a": "66b042e43daa18f116074ce891ddd93ac8cff8f4055dfb11bbb3a69291b665ed" + }, + "probes": { + "reflect_own": "be47a8c4951b74b7eb1303afd1b02ed929b954f485cf7f0d10194968c1f29cba", + "reflect_proto": "45e82bd599efdcff78032103ec31d87ad087afdf7bdc7438b4abf91142b8b2c3", + "iterator": "da8ac63a3918d5aede6185b823e94d896dab89327a2b2718278a8355df1240a4", + "thenable": "f418d2de753b6baef4d2cad9fba2dd7d41d44e460f9da74fad84778b0c6374ec", + "tojson": "139928fda9c0e8f2c2d1a38feb4ac8f18ef14d8dad13114b325b06650e2155e0" + } +} diff --git a/benchmarks/native_property_get/evidence/candidate.json b/benchmarks/native_property_get/evidence/candidate.json new file mode 100644 index 0000000000..1a04a75ddb --- /dev/null +++ b/benchmarks/native_property_get/evidence/candidate.json @@ -0,0 +1,280 @@ +{ + "reflect_own": { + "iterations": 200000, + "instructions": [ + 143386174, + 143385957, + 143385319 + ], + "median": 143385957, + "get_inclusive_percent": 97.2027972027972, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::class_registry::class_meta::is_anon_shape_class_id", + 44.40559440559441 + ], + [ + "perry_runtime::object::native_get::try_data_get_bytes", + 36.01398601398601 + ], + [ + "perry_runtime::object::keys_lookup::keys_array_dense_slots", + 6.643356643356643 + ], + [ + "core::str::converts::from_utf8", + 4.195804195804196 + ], + [ + "perry_runtime::object::keys_lookup::keys_find_slot_by_bytes", + 2.4475524475524475 + ], + [ + "perry_runtime::object::field_get_set::accessors::object_field_at_with_live", + 2.097902097902098 + ], + [ + "js_reflect_get", + 0.6993006993006993 + ], + [ + ">>,)>>::call_once", + 0.6993006993006993 + ] + ], + "sampled_instructions": 143000858, + "binary_sha256": "827154821308f72122097f731f94852b498ea02ca8579442536fef79a1d05e3b" + }, + "reflect_proto": { + "iterations": 200000, + "instructions": [ + 305995648, + 305995727, + 305995519 + ], + "median": 305995648, + "get_inclusive_percent": 99.34533551554829, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::class_registry::state::class_decl_prototype_object", + 31.42389525368249 + ], + [ + "perry_runtime::object::native_get::try_data_get_bytes", + 24.713584288052374 + ], + [ + "perry_runtime::object::class_registry::class_meta::is_anon_shape_class_id", + 11.129296235679215 + ], + [ + "perry_runtime::object::class_registry::prototype_objects::class_prototype_object", + 8.51063829787234 + ], + [ + "::hash_one::<&i32>", + 6.219312602291326 + ], + [ + "perry_runtime::object::arguments::is_arguments_object", + 4.4189852700491 + ], + [ + "perry_runtime::object::keys_lookup::keys_array_dense_slots", + 4.4189852700491 + ], + [ + "perry_runtime::object::keys_lookup::keys_find_slot_by_bytes", + 2.618657937806874 + ], + [ + "core::str::converts::from_utf8", + 2.127659574468085 + ], + [ + " as core::hash::Hasher>::write", + 1.4729950900163666 + ], + [ + "js_reflect_get", + 1.309328968903437 + ], + [ + ">>,)>>::call_once", + 0.8183306055646481 + ], + [ + "perry_runtime::object::field_get_set::accessors::object_field_at_with_live", + 0.16366612111292964 + ] + ], + "sampled_instructions": 305501833, + "binary_sha256": "b00e40d520ad8dad3928a2211df4dfee7d12a7d63f49a5fe8036792a50cc3f5b" + }, + "iterator": { + "iterations": 200000, + "instructions": [ + 886162527, + 886162328, + 886163743 + ], + "median": 886162527, + "get_inclusive_percent": 0.7900677200902935, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::url::search_params::shape_is_url_search_params", + 0.11286681715575621 + ], + [ + "::from_utf8_lossy", + 0.056433408577878104 + ], + [ + "perry_runtime::typedarray_props::typed_array_addr_from_value", + 0.056433408577878104 + ], + [ + "perry_runtime::object::keys_lookup::keys_find_slot_by_bytes", + 0.056433408577878104 + ], + [ + "perry_runtime::object::prototype_chain::meta_capable_object", + 0.056433408577878104 + ], + [ + "perry_runtime::object::field_get_set::prototype_override::inherited_field_if_overridden", + 0.056433408577878104 + ], + [ + "core::str::converts::from_utf8", + 0.056433408577878104 + ], + [ + "perry_runtime::object::class_meta_registry::get_parent_class_id", + 0.056433408577878104 + ], + [ + "perry_runtime::object::keys_lookup::keys_array_dense_slots", + 0.056433408577878104 + ], + [ + "perry_runtime::buffer::header::is_registered_buffer", + 0.056433408577878104 + ], + [ + "js_object_get_field_by_name", + 0.056433408577878104 + ], + [ + "perry_runtime::object::prototype_chain::object_static_prototype", + 0.056433408577878104 + ], + [ + "perry_runtime::object::field_get_set::accessors::prototype_property_value_with_guard", + 0.056433408577878104 + ] + ], + "sampled_instructions": 886005316, + "binary_sha256": "9a1a0d4c17406b127ddc54655ca55cb7d0af40faf98968c231da0bc927105931" + }, + "thenable": { + "iterations": 20000, + "instructions": [ + 320438913, + 320443434, + 320441221 + ], + "median": 320441221, + "get_inclusive_percent": 2.6604068857589986, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::class_registry::class_meta::is_anon_shape_class_id", + 1.5649452269170578 + ], + [ + "perry_runtime::object::native_get::try_data_get_bytes", + 0.9389671361502347 + ], + [ + "perry_runtime::object::keys_lookup::keys_find_slot_by_bytes", + 0.1564945226917058 + ] + ], + "sampled_instructions": 319501917, + "binary_sha256": "abd61256d1ad0cf5d612c00a87e32e0d56ad833138e75afdcc728e2fa41fdfd9" + }, + "tojson": { + "iterations": 100000, + "instructions": [ + 423858278, + 423858072, + 423858284 + ], + "median": 423858278, + "get_inclusive_percent": 28.217237308146398, + "get_leaf_percent_of_program": [ + [ + "perry_runtime::object::class_registry::state::class_decl_prototype_object", + 7.319952774498229 + ], + [ + "perry_runtime::object::native_get::try_data_get_bytes", + 5.076741440377804 + ], + [ + "perry_runtime::object::class_registry::class_meta::is_anon_shape_class_id", + 5.076741440377804 + ], + [ + "perry_runtime::object::class_registry::prototype_objects::class_prototype_object", + 2.243211334120425 + ], + [ + "perry_runtime::perf_hooks::is_perf_entry_object", + 2.125147579693034 + ], + [ + "core::str::converts::from_utf8", + 2.0070838252656436 + ], + [ + "::hash_one::<&i32>", + 1.770956316410862 + ], + [ + "js_reflect_get", + 0.9445100354191264 + ], + [ + "perry_runtime::object::keys_lookup::keys_array_dense_slots", + 0.5903187721369539 + ], + [ + "perry_runtime::object::keys_lookup::keys_find_slot_by_bytes", + 0.2361275088547816 + ], + [ + "perry_runtime::object::field_get_set::accessors::object_field_at_with_live", + 0.2361275088547816 + ], + [ + ">>,)>>::call_once", + 0.2361275088547816 + ], + [ + "perry_runtime::object::arguments::is_arguments_object", + 0.1180637544273908 + ], + [ + "__memcmp_evex_movbe", + 0.1180637544273908 + ], + [ + " as core::hash::Hasher>::write", + 0.1180637544273908 + ] + ], + "sampled_instructions": 423502541, + "binary_sha256": "8772b57dfb1695585556246aca33a17550b3051f7e679a947ae43b4bb22fc8d7" + } +} diff --git a/benchmarks/native_property_get/evidence/clippy-diff.json b/benchmarks/native_property_get/evidence/clippy-diff.json new file mode 100644 index 0000000000..f68ac0546f --- /dev/null +++ b/benchmarks/native_property_get/evidence/clippy-diff.json @@ -0,0 +1,8 @@ +{ + "comparison": "9fda98df68 vs candidate; cargo clippy -j4 -p perry-runtime --all-targets --message-format=json", + "normalization": "level, code, message, primary filenames; ignores shifted line numbers", + "baseline_diagnostics": 1987, + "candidate_diagnostics": 1987, + "new_diagnostics": [], + "removed_diagnostics": [] +} diff --git a/benchmarks/native_property_get/evidence/clippy-logs.tar.gz b/benchmarks/native_property_get/evidence/clippy-logs.tar.gz new file mode 100644 index 0000000000..0d107143f9 Binary files /dev/null and b/benchmarks/native_property_get/evidence/clippy-logs.tar.gz differ diff --git a/benchmarks/native_property_get/evidence/fault-logs.tar.gz b/benchmarks/native_property_get/evidence/fault-logs.tar.gz new file mode 100644 index 0000000000..db00b7a9fe Binary files /dev/null and b/benchmarks/native_property_get/evidence/fault-logs.tar.gz differ diff --git a/benchmarks/native_property_get/evidence/faults.json b/benchmarks/native_property_get/evidence/faults.json new file mode 100644 index 0000000000..b76475a1b2 --- /dev/null +++ b/benchmarks/native_property_get/evidence/faults.json @@ -0,0 +1,20 @@ +[ + { + "mutation": "fast_path_removed", + "test": "object::native_get::tests::own_data_is_served_and_matches_forced_slow_for_all_value_kinds", + "exit_code": 101, + "assertion_failed": true + }, + { + "mutation": "accessor_guard_removed", + "test": "object::native_get::tests::accessor_bloom_guard_preserves_own_and_inherited_getter_calls", + "exit_code": 101, + "assertion_failed": true + }, + { + "mutation": "exotic_expando_ignored", + "test": "object::native_get::tests::regexp_expandos_and_accessors_remain_on_the_exotic_path", + "exit_code": 101, + "assertion_failed": true + } +] diff --git a/benchmarks/native_property_get/evidence/gc-base-runtime.sha256 b/benchmarks/native_property_get/evidence/gc-base-runtime.sha256 new file mode 100644 index 0000000000..51a2460b2c --- /dev/null +++ b/benchmarks/native_property_get/evidence/gc-base-runtime.sha256 @@ -0,0 +1,3 @@ +fa2df7f3d54bd25eab5e730c3e9ba27549ec980cb146f3ff35c946bd6f8dabcf /root/native-property-get/base-runtime/libperry_runtime.a +70e7bb414429841a2c5b6b99d8013eb7943b5f8f2ca92fea62d77288569d078b /root/native-property-get/base-runtime/libperry_stdlib.a +57778c1bc33a8367ef6e8d0ea0993e61c2d387020a13ed0bc802a90eceeee09e /root/native-property-get/base-runtime/perry diff --git a/benchmarks/native_property_get/evidence/gc-ratchet-ab.json b/benchmarks/native_property_get/evidence/gc-ratchet-ab.json new file mode 100644 index 0000000000..e7d214604b --- /dev/null +++ b/benchmarks/native_property_get/evidence/gc-ratchet-ab.json @@ -0,0 +1,1016 @@ +{ + "base_commit": "9fda98df68d9fac3c08b2385fae007aa9f5278df", + "profile": "shared_ci", + "correctness": "14/14 match Node on base and candidate", + "all_gated_medians_identical": true, + "rows": [ + { + "probe": "01_nursery_churn", + "metric": "heap_used_bytes", + "base_median": 438744, + "candidate_median": 438744, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "heap_total_bytes", + "base_median": 14680064, + "candidate_median": 14680064, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "minor_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "step_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "copied_objects", + "base_median": 6690, + "candidate_median": 6690, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "copied_bytes", + "base_median": 466392, + "candidate_median": 466392, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "promoted_objects", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "promoted_bytes", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "01_nursery_churn", + "metric": "freed_bytes", + "base_median": 11067816, + "candidate_median": 11067816, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "heap_used_bytes", + "base_median": 2562832, + "candidate_median": 2562832, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "heap_total_bytes", + "base_median": 15728640, + "candidate_median": 15728640, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "minor_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "step_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "copied_objects", + "base_median": 37366, + "candidate_median": 37366, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "copied_bytes", + "base_median": 1690264, + "candidate_median": 1690264, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "promoted_objects", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "promoted_bytes", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "02_survivor_promotion", + "metric": "freed_bytes", + "base_median": 8795408, + "candidate_median": 8795408, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "heap_used_bytes", + "base_median": 528, + "candidate_median": 528, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "heap_total_bytes", + "base_median": 12582912, + "candidate_median": 12582912, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "minor_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "step_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "copied_objects", + "base_median": 4107, + "candidate_median": 4107, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "copied_bytes", + "base_median": 197056, + "candidate_median": 197056, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "promoted_objects", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "promoted_bytes", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "03_cross_gen_writes", + "metric": "freed_bytes", + "base_median": 9240008, + "candidate_median": 9240008, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "heap_used_bytes", + "base_median": 536, + "candidate_median": 536, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "heap_total_bytes", + "base_median": 18874368, + "candidate_median": 18874368, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "minor_cycles", + "base_median": 7, + "candidate_median": 7, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "step_cycles", + "base_median": 7, + "candidate_median": 7, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "copied_objects", + "base_median": 2666, + "candidate_median": 2666, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "copied_bytes", + "base_median": 111336, + "candidate_median": 111336, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "promoted_objects", + "base_median": 682, + "candidate_median": 682, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "promoted_bytes", + "base_median": 27320, + "candidate_median": 27320, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "04_dead_after_deep_stack", + "metric": "freed_bytes", + "base_median": 76493952, + "candidate_median": 76493952, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "heap_used_bytes", + "base_median": 544, + "candidate_median": 544, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "heap_total_bytes", + "base_median": 14680064, + "candidate_median": 14680064, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "minor_cycles", + "base_median": 3, + "candidate_median": 3, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "step_cycles", + "base_median": 3, + "candidate_median": 3, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "copied_objects", + "base_median": 14285, + "candidate_median": 14285, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "copied_bytes", + "base_median": 534720, + "candidate_median": 534720, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "promoted_objects", + "base_median": 6154, + "candidate_median": 6154, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "promoted_bytes", + "base_median": 221624, + "candidate_median": 221624, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "05_closure_capture", + "metric": "freed_bytes", + "base_median": 27897872, + "candidate_median": 27897872, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "heap_used_bytes", + "base_median": 1072, + "candidate_median": 1072, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "heap_total_bytes", + "base_median": 22020096, + "candidate_median": 22020096, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "minor_cycles", + "base_median": 4, + "candidate_median": 4, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "step_cycles", + "base_median": 4, + "candidate_median": 4, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "copied_objects", + "base_median": 270, + "candidate_median": 270, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "copied_bytes", + "base_median": 70144, + "candidate_median": 70144, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "promoted_objects", + "base_median": 14, + "candidate_median": 14, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "promoted_bytes", + "base_median": 1072, + "candidate_median": 1072, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "06_string_retention", + "metric": "freed_bytes", + "base_median": 68136816, + "candidate_median": 68136816, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "heap_used_bytes", + "base_median": 1211232, + "candidate_median": 1211232, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "heap_total_bytes", + "base_median": 25165824, + "candidate_median": 25165824, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "minor_cycles", + "base_median": 5, + "candidate_median": 5, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "step_cycles", + "base_median": 5, + "candidate_median": 5, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "copied_objects", + "base_median": 6702, + "candidate_median": 6702, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "copied_bytes", + "base_median": 2636392, + "candidate_median": 2636392, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "promoted_objects", + "base_median": 6154, + "candidate_median": 6154, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "promoted_bytes", + "base_median": 841048, + "candidate_median": 841048, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "07_array_grow_evacuate", + "metric": "freed_bytes", + "base_median": 83570704, + "candidate_median": 83570704, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "heap_used_bytes", + "base_median": 688, + "candidate_median": 688, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "heap_total_bytes", + "base_median": 14680064, + "candidate_median": 14680064, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "minor_cycles", + "base_median": 6, + "candidate_median": 6, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "step_cycles", + "base_median": 6, + "candidate_median": 6, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "copied_objects", + "base_median": 2461, + "candidate_median": 2461, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "copied_bytes", + "base_median": 98472, + "candidate_median": 98472, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "promoted_objects", + "base_median": 14, + "candidate_median": 14, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "promoted_bytes", + "base_median": 592, + "candidate_median": 592, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "08_map_set_sidetables", + "metric": "freed_bytes", + "base_median": 56598904, + "candidate_median": 56598904, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "heap_used_bytes", + "base_median": 443520, + "candidate_median": 443520, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "heap_total_bytes", + "base_median": 14680064, + "candidate_median": 14680064, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "minor_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "step_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "copied_objects", + "base_median": 6673, + "candidate_median": 6673, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "copied_bytes", + "base_median": 462024, + "candidate_median": 462024, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "promoted_objects", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "promoted_bytes", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "09_try_catch_roots", + "metric": "freed_bytes", + "base_median": 10023568, + "candidate_median": 10023568, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "heap_used_bytes", + "base_median": 446776, + "candidate_median": 446776, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "heap_total_bytes", + "base_median": 22020096, + "candidate_median": 22020096, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "minor_cycles", + "base_median": 8, + "candidate_median": 8, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "step_cycles", + "base_median": 8, + "candidate_median": 8, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "copied_objects", + "base_median": 14625, + "candidate_median": 14625, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "copied_bytes", + "base_median": 787792, + "candidate_median": 787792, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "promoted_objects", + "base_median": 6107, + "candidate_median": 6107, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "promoted_bytes", + "base_median": 446368, + "candidate_median": 446368, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "10_store_receiver_across_alloc", + "metric": "freed_bytes", + "base_median": 88640584, + "candidate_median": 88640584, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "heap_used_bytes", + "base_median": 444720, + "candidate_median": 444720, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "heap_total_bytes", + "base_median": 12582912, + "candidate_median": 12582912, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "minor_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "step_cycles", + "base_median": 1, + "candidate_median": 1, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "copied_objects", + "base_median": 6686, + "candidate_median": 6686, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "copied_bytes", + "base_median": 462544, + "candidate_median": 462544, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "promoted_objects", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "promoted_bytes", + "base_median": 0, + "candidate_median": 0, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "11_collect_at_depth", + "metric": "freed_bytes", + "base_median": 8974576, + "candidate_median": 8974576, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "heap_used_bytes", + "base_median": 569448, + "candidate_median": 569448, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "heap_total_bytes", + "base_median": 74448896, + "candidate_median": 74448896, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "minor_cycles", + "base_median": 5, + "candidate_median": 5, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "step_cycles", + "base_median": 5, + "candidate_median": 5, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "copied_objects", + "base_median": 104050, + "candidate_median": 104050, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "copied_bytes", + "base_median": 4162008, + "candidate_median": 4162008, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "promoted_objects", + "base_median": 530030, + "candidate_median": 530030, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "promoted_bytes", + "base_median": 21201208, + "candidate_median": 21201208, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "12_large_live_set", + "metric": "freed_bytes", + "base_median": 63732784, + "candidate_median": 63732784, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "heap_used_bytes", + "base_median": 444976, + "candidate_median": 444976, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "heap_total_bytes", + "base_median": 61865984, + "candidate_median": 61865984, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "minor_cycles", + "base_median": 3, + "candidate_median": 3, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "step_cycles", + "base_median": 3, + "candidate_median": 3, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "copied_objects", + "base_median": 382868, + "candidate_median": 382868, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "copied_bytes", + "base_median": 21804904, + "candidate_median": 21804904, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "promoted_objects", + "base_median": 387152, + "candidate_median": 387152, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "promoted_bytes", + "base_median": 21975560, + "candidate_median": 21975560, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "13_large_eden_survivors", + "metric": "freed_bytes", + "base_median": 108045936, + "candidate_median": 108045936, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "heap_used_bytes", + "base_median": 429408, + "candidate_median": 429408, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "heap_total_bytes", + "base_median": 23068672, + "candidate_median": 23068672, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "minor_cycles", + "base_median": 22, + "candidate_median": 22, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "step_cycles", + "base_median": 23, + "candidate_median": 23, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "copied_objects", + "base_median": 330, + "candidate_median": 330, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "copied_bytes", + "base_median": 1277072, + "candidate_median": 1277072, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "promoted_objects", + "base_median": 405282, + "candidate_median": 405282, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "promoted_bytes", + "base_median": 147967848, + "candidate_median": 147967848, + "base_spread": 0, + "candidate_spread": 0 + }, + { + "probe": "14_grow_then_churn", + "metric": "freed_bytes", + "base_median": 119549744, + "candidate_median": 119549744, + "base_spread": 0, + "candidate_spread": 0 + } + ] +} diff --git a/benchmarks/native_property_get/evidence/gc-ratchet-receipts.tar.gz b/benchmarks/native_property_get/evidence/gc-ratchet-receipts.tar.gz new file mode 100644 index 0000000000..4e0492c2cd Binary files /dev/null and b/benchmarks/native_property_get/evidence/gc-ratchet-receipts.tar.gz differ diff --git a/benchmarks/native_property_get/evidence/gc-stress-base-http2.json b/benchmarks/native_property_get/evidence/gc-stress-base-http2.json new file mode 100644 index 0000000000..8a8ce25067 --- /dev/null +++ b/benchmarks/native_property_get/evidence/gc-stress-base-http2.json @@ -0,0 +1 @@ +{"node":"26.5.1","pressure_mb":"8","complete":true,"shard":{"index":1,"count":1,"corpus_total":1,"corpus_selected":1},"arms":[{"id":"default","requires":"scavenge"},{"id":"safepoint_minor","requires":"scavenge"},{"id":"evac_minor","requires":"move"},{"id":"verify_evac","requires":"scavenge"},{"id":"force_verify","requires":"move"},{"id":"cons_scan_off","requires":"scavenge"},{"id":"shipped_default","requires":"none"}],"cells":[{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"default","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"safepoint_minor","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"evac_minor","result":"FAIL","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":23800,"evidence":"output-mismatch cycles=1 evacuated=0 scavenged=0 reclaimed=23800"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"verify_evac","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"force_verify","result":"FAIL","cycles":1,"evacuated":0,"scavenged":4175,"reclaimed":71400,"evidence":"output-mismatch cycles=1 evacuated=0 scavenged=4175 reclaimed=71400"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"cons_scan_off","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"shipped_default","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"}],"summary":{"pass":0,"unverified":0,"xfail":0,"fail":7}} diff --git a/benchmarks/native_property_get/evidence/gc-stress-receipts.tar.gz b/benchmarks/native_property_get/evidence/gc-stress-receipts.tar.gz new file mode 100644 index 0000000000..de38f1af3c Binary files /dev/null and b/benchmarks/native_property_get/evidence/gc-stress-receipts.tar.gz differ diff --git a/benchmarks/native_property_get/evidence/gc-stress.json b/benchmarks/native_property_get/evidence/gc-stress.json new file mode 100644 index 0000000000..6c852e5bbb --- /dev/null +++ b/benchmarks/native_property_get/evidence/gc-stress.json @@ -0,0 +1 @@ +{"node":"26.5.1","pressure_mb":"8","complete":true,"shard":{"index":1,"count":1,"corpus_total":86,"corpus_selected":86},"arms":[{"id":"default","requires":"scavenge"},{"id":"safepoint_minor","requires":"scavenge"},{"id":"evac_minor","requires":"move"},{"id":"verify_evac","requires":"scavenge"},{"id":"force_verify","requires":"move"},{"id":"cons_scan_off","requires":"scavenge"},{"id":"shipped_default","requires":"none"}],"cells":[{"test":"test_gap_repsel_canonical_i32","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":27520,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=27520"},{"test":"test_gap_repsel_canonical_i32","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4156,"reclaimed":82560,"evidence":"cycles=1 evacuated=0 scavenged=4156 reclaimed=82560"},{"test":"test_gap_repsel_canonical_i32","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_i32","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":7320,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=7320"},{"test":"test_gap_int_valued_ta_locals","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":7320,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=7320"},{"test":"test_gap_int_valued_ta_locals","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_int_valued_ta_locals","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":26544,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=26544"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4136,"reclaimed":79632,"evidence":"cycles=1 evacuated=0 scavenged=4136 reclaimed=79632"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_loop_bounded_i32","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":25208,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=25208"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4157,"reclaimed":75624,"evidence":"cycles=1 evacuated=0 scavenged=4157 reclaimed=75624"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_polymorphic_coexist","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":24992,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=24992"},{"test":"test_gap_specabi_reassign","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4162,"reclaimed":74976,"evidence":"cycles=1 evacuated=0 scavenged=4162 reclaimed=74976"},{"test":"test_gap_specabi_reassign","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_reassign","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4,"reclaimed":1728,"evidence":"cycles=1 evacuated=0 scavenged=4 reclaimed=1728"},{"test":"test_gap_specabi_recursion_escape","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4,"reclaimed":1728,"evidence":"cycles=1 evacuated=0 scavenged=4 reclaimed=1728"},{"test":"test_gap_specabi_recursion_escape","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_recursion_escape","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":6,"reclaimed":2256,"evidence":"cycles=1 evacuated=0 scavenged=6 reclaimed=2256"},{"test":"test_gap_specabi_view_detach","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":6,"reclaimed":2256,"evidence":"cycles=1 evacuated=0 scavenged=6 reclaimed=2256"},{"test":"test_gap_specabi_view_detach","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_view_detach","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"default","result":"PASS","cycles":22,"evacuated":0,"scavenged":302656,"reclaimed":778253744,"evidence":"cycles=22 evacuated=0 scavenged=302656 reclaimed=778253744"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"safepoint_minor","result":"PASS","cycles":22,"evacuated":0,"scavenged":302656,"reclaimed":778253744,"evidence":"cycles=22 evacuated=0 scavenged=302656 reclaimed=778253744"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"evac_minor","result":"PASS","cycles":22,"evacuated":0,"scavenged":290734,"reclaimed":781580080,"evidence":"cycles=22 evacuated=0 scavenged=290734 reclaimed=781580080"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"verify_evac","result":"PASS","cycles":22,"evacuated":0,"scavenged":302656,"reclaimed":778253744,"evidence":"cycles=22 evacuated=0 scavenged=302656 reclaimed=778253744"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"force_verify","result":"PASS","cycles":22,"evacuated":0,"scavenged":290734,"reclaimed":781580080,"evidence":"cycles=22 evacuated=0 scavenged=290734 reclaimed=781580080"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"cons_scan_off","result":"PASS","cycles":22,"evacuated":0,"scavenged":290734,"reclaimed":781580080,"evidence":"cycles=22 evacuated=0 scavenged=290734 reclaimed=781580080"},{"test":"test_gap_specabi_ordinary_param_guards","arm":"shipped_default","result":"PASS","cycles":11,"evacuated":0,"scavenged":295072,"reclaimed":678707712,"evidence":"cycles=11 evacuated=0 scavenged=295072 reclaimed=678707712"},{"test":"test_gap_ta_param_numeric_read","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":33576,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=33576"},{"test":"test_gap_ta_param_numeric_read","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":33576,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=33576"},{"test":"test_gap_ta_param_numeric_read","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":33576,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=33576"},{"test":"test_gap_ta_param_numeric_read","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4181,"reclaimed":100728,"evidence":"cycles=1 evacuated=0 scavenged=4181 reclaimed=100728"},{"test":"test_gap_ta_param_numeric_read","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4181,"reclaimed":100728,"evidence":"cycles=1 evacuated=0 scavenged=4181 reclaimed=100728"},{"test":"test_gap_ta_param_numeric_read","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":33576,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=33576"},{"test":"test_gap_ta_param_numeric_read","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_typedarray_param_read","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":31592,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=31592"},{"test":"test_gap_typedarray_param_read","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":31592,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=31592"},{"test":"test_gap_typedarray_param_read","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":31592,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=31592"},{"test":"test_gap_typedarray_param_read","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4188,"reclaimed":94776,"evidence":"cycles=1 evacuated=0 scavenged=4188 reclaimed=94776"},{"test":"test_gap_typedarray_param_read","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4188,"reclaimed":94776,"evidence":"cycles=1 evacuated=0 scavenged=4188 reclaimed=94776"},{"test":"test_gap_typedarray_param_read","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":31592,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=31592"},{"test":"test_gap_typedarray_param_read","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":71,"reclaimed":17568,"evidence":"cycles=1 evacuated=0 scavenged=71 reclaimed=17568"},{"test":"test_gap_repsel_canonical_str_locals","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":71,"reclaimed":17568,"evidence":"cycles=1 evacuated=0 scavenged=71 reclaimed=17568"},{"test":"test_gap_repsel_canonical_str_locals","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_canonical_str_locals","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":2222616,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=2222616"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":2222616,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=2222616"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":2222616,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=2222616"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":2222616,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=2222616"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":2222616,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=2222616"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":2222616,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=2222616"},{"test":"test_gap_repsel_ptr_shape_locals","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":24896,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=24896"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4142,"reclaimed":74688,"evidence":"cycles=1 evacuated=0 scavenged=4142 reclaimed=74688"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_barriers","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_return_shape","arm":"default","result":"PASS","cycles":5,"evacuated":0,"scavenged":97226,"reclaimed":58552360,"evidence":"cycles=5 evacuated=0 scavenged=97226 reclaimed=58552360"},{"test":"test_gap_repsel_return_shape","arm":"safepoint_minor","result":"PASS","cycles":5,"evacuated":0,"scavenged":97226,"reclaimed":58552360,"evidence":"cycles=5 evacuated=0 scavenged=97226 reclaimed=58552360"},{"test":"test_gap_repsel_return_shape","arm":"evac_minor","result":"PASS","cycles":5,"evacuated":0,"scavenged":97226,"reclaimed":64787920,"evidence":"cycles=5 evacuated=0 scavenged=97226 reclaimed=64787920"},{"test":"test_gap_repsel_return_shape","arm":"verify_evac","result":"PASS","cycles":5,"evacuated":0,"scavenged":126583,"reclaimed":69032112,"evidence":"cycles=5 evacuated=0 scavenged=126583 reclaimed=69032112"},{"test":"test_gap_repsel_return_shape","arm":"force_verify","result":"PASS","cycles":5,"evacuated":0,"scavenged":126583,"reclaimed":69032112,"evidence":"cycles=5 evacuated=0 scavenged=126583 reclaimed=69032112"},{"test":"test_gap_repsel_return_shape","arm":"cons_scan_off","result":"PASS","cycles":5,"evacuated":0,"scavenged":97226,"reclaimed":64787920,"evidence":"cycles=5 evacuated=0 scavenged=97226 reclaimed=64787920"},{"test":"test_gap_repsel_return_shape","arm":"shipped_default","result":"PASS","cycles":2,"evacuated":0,"scavenged":100294,"reclaimed":60576048,"evidence":"cycles=2 evacuated=0 scavenged=100294 reclaimed=60576048"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":58092,"reclaimed":27481872,"evidence":"cycles=3 evacuated=0 scavenged=58092 reclaimed=27481872"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":58092,"reclaimed":27481872,"evidence":"cycles=3 evacuated=0 scavenged=58092 reclaimed=27481872"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":58092,"reclaimed":27481872,"evidence":"cycles=3 evacuated=0 scavenged=58092 reclaimed=27481872"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":34601,"reclaimed":25277088,"evidence":"cycles=3 evacuated=0 scavenged=34601 reclaimed=25277088"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":34601,"reclaimed":25277088,"evidence":"cycles=3 evacuated=0 scavenged=34601 reclaimed=25277088"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":58092,"reclaimed":27481872,"evidence":"cycles=3 evacuated=0 scavenged=58092 reclaimed=27481872"},{"test":"test_gap_repsel_cjs_iife_return_shape","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":31117,"reclaimed":36513504,"evidence":"cycles=1 evacuated=0 scavenged=31117 reclaimed=36513504"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4160,"reclaimed":2951976,"evidence":"cycles=1 evacuated=0 scavenged=4160 reclaimed=2951976"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4160,"reclaimed":2951976,"evidence":"cycles=1 evacuated=0 scavenged=4160 reclaimed=2951976"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_ptr_shape_elements","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":29200,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=29200"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4116,"reclaimed":87600,"evidence":"cycles=1 evacuated=0 scavenged=4116 reclaimed=87600"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_holes_axis","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":65560,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=65560"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4117,"reclaimed":196680,"evidence":"cycles=1 evacuated=0 scavenged=4117 reclaimed=196680"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_inline_tiers","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":48968,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=48968"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4123,"reclaimed":146904,"evidence":"cycles=1 evacuated=0 scavenged=4123 reclaimed=146904"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a_logical_numeric","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":57544,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=57544"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4123,"reclaimed":172632,"evidence":"cycles=1 evacuated=0 scavenged=4123 reclaimed=172632"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_barriers","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":6074736,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=6074736"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":6074736,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=6074736"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":15606,"reclaimed":12794496,"evidence":"cycles=3 evacuated=0 scavenged=15606 reclaimed=12794496"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":6074736,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=6074736"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":15606,"reclaimed":12794496,"evidence":"cycles=3 evacuated=0 scavenged=15606 reclaimed=12794496"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":5271,"reclaimed":6074736,"evidence":"cycles=2 evacuated=0 scavenged=5271 reclaimed=6074736"},{"test":"test_gap_repsel_p4a3_numarray_growth","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":182864,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=182864"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4119,"reclaimed":548592,"evidence":"cycles=1 evacuated=0 scavenged=4119 reclaimed=548592"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4a3_ptr_numarray","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":4164,"reclaimed":2227176,"evidence":"cycles=1 evacuated=0 scavenged=4164 reclaimed=2227176"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4164,"reclaimed":2227176,"evidence":"cycles=1 evacuated=0 scavenged=4164 reclaimed=2227176"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4164,"reclaimed":2227176,"evidence":"cycles=1 evacuated=0 scavenged=4164 reclaimed=2227176"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4164,"reclaimed":2227176,"evidence":"cycles=1 evacuated=0 scavenged=4164 reclaimed=2227176"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4164,"reclaimed":2227176,"evidence":"cycles=1 evacuated=0 scavenged=4164 reclaimed=2227176"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":4164,"reclaimed":2227176,"evidence":"cycles=1 evacuated=0 scavenged=4164 reclaimed=2227176"},{"test":"test_gap_repsel_p4b_field_store_elision","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":27520,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=27520"},{"test":"test_gap_repsel_proven_this_frozen","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4150,"reclaimed":82560,"evidence":"cycles=1 evacuated=0 scavenged=4150 reclaimed=82560"},{"test":"test_gap_repsel_proven_this_frozen","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_proven_this_frozen","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"default","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1235416,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1235416"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"safepoint_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1235416,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1235416"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"evac_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1235416,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1235416"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"verify_evac","result":"PASS","cycles":5,"evacuated":0,"scavenged":77025,"reclaimed":603176,"evidence":"cycles=5 evacuated=0 scavenged=77025 reclaimed=603176"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"force_verify","result":"PASS","cycles":7,"evacuated":0,"scavenged":406462,"reclaimed":867864,"evidence":"cycles=7 evacuated=0 scavenged=406462 reclaimed=867864"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"cons_scan_off","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1235416,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1235416"},{"test":"test_gap_repsel_pshape_tower_delete","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":286440,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=286440"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"default","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1179760,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1179760"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"safepoint_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1179760,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1179760"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"evac_minor","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1179760,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1179760"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"verify_evac","result":"PASS","cycles":5,"evacuated":0,"scavenged":68851,"reclaimed":546840,"evidence":"cycles=5 evacuated=0 scavenged=68851 reclaimed=546840"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"force_verify","result":"PASS","cycles":7,"evacuated":0,"scavenged":402289,"reclaimed":853896,"evidence":"cycles=7 evacuated=0 scavenged=402289 reclaimed=853896"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"cons_scan_off","result":"PASS","cycles":6,"evacuated":0,"scavenged":78643,"reclaimed":1179760,"evidence":"cycles=6 evacuated=0 scavenged=78643 reclaimed=1179760"},{"test":"test_gap_repsel_pshape_tombstone_oldgen_delete","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":284776,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=284776"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":34208,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=34208"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":34208,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=34208"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":34208,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=34208"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4182,"reclaimed":102624,"evidence":"cycles=1 evacuated=0 scavenged=4182 reclaimed=102624"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4182,"reclaimed":102624,"evidence":"cycles=1 evacuated=0 scavenged=4182 reclaimed=102624"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":34208,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=34208"},{"test":"test_gap_gc_ta_ctor_source_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"default","result":"PASS","cycles":10,"evacuated":0,"scavenged":253745,"reclaimed":74477864,"evidence":"cycles=10 evacuated=0 scavenged=253745 reclaimed=74477864"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"safepoint_minor","result":"PASS","cycles":10,"evacuated":0,"scavenged":253745,"reclaimed":74477864,"evidence":"cycles=10 evacuated=0 scavenged=253745 reclaimed=74477864"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"evac_minor","result":"PASS","cycles":10,"evacuated":0,"scavenged":253745,"reclaimed":104954424,"evidence":"cycles=10 evacuated=0 scavenged=253745 reclaimed=104954424"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"verify_evac","result":"PASS","cycles":10,"evacuated":0,"scavenged":245645,"reclaimed":83541176,"evidence":"cycles=10 evacuated=0 scavenged=245645 reclaimed=83541176"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"force_verify","result":"PASS","cycles":10,"evacuated":0,"scavenged":248097,"reclaimed":113731360,"evidence":"cycles=10 evacuated=0 scavenged=248097 reclaimed=113731360"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"cons_scan_off","result":"PASS","cycles":10,"evacuated":0,"scavenged":253745,"reclaimed":104954424,"evidence":"cycles=10 evacuated=0 scavenged=253745 reclaimed=104954424"},{"test":"test_gap_gc_string_literal_operand_rooting","arm":"shipped_default","result":"PASS","cycles":3,"evacuated":0,"scavenged":590263,"reclaimed":19895584,"evidence":"cycles=3 evacuated=0 scavenged=590263 reclaimed=19895584"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"default","result":"PASS","cycles":21,"evacuated":0,"scavenged":483784,"reclaimed":941744704,"evidence":"cycles=21 evacuated=0 scavenged=483784 reclaimed=941744704"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"safepoint_minor","result":"PASS","cycles":21,"evacuated":0,"scavenged":483784,"reclaimed":941744704,"evidence":"cycles=21 evacuated=0 scavenged=483784 reclaimed=941744704"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"evac_minor","result":"PASS","cycles":21,"evacuated":0,"scavenged":391460,"reclaimed":983839760,"evidence":"cycles=21 evacuated=0 scavenged=391460 reclaimed=983839760"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"verify_evac","result":"PASS","cycles":21,"evacuated":0,"scavenged":483784,"reclaimed":941744624,"evidence":"cycles=21 evacuated=0 scavenged=483784 reclaimed=941744624"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"force_verify","result":"PASS","cycles":21,"evacuated":0,"scavenged":391460,"reclaimed":983839760,"evidence":"cycles=21 evacuated=0 scavenged=391460 reclaimed=983839760"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"cons_scan_off","result":"PASS","cycles":21,"evacuated":0,"scavenged":391460,"reclaimed":983839760,"evidence":"cycles=21 evacuated=0 scavenged=391460 reclaimed=983839760"},{"test":"test_gap_repsel_scalar_replaced_locals","arm":"shipped_default","result":"PASS","cycles":12,"evacuated":0,"scavenged":439041,"reclaimed":982858416,"evidence":"cycles=12 evacuated=0 scavenged=439041 reclaimed=982858416"},{"test":"test_gap_repsel_module_init_canonical","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":26800,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=26800"},{"test":"test_gap_repsel_module_init_canonical","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":26800,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=26800"},{"test":"test_gap_repsel_module_init_canonical","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":26800,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=26800"},{"test":"test_gap_repsel_module_init_canonical","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4146,"reclaimed":80400,"evidence":"cycles=1 evacuated=0 scavenged=4146 reclaimed=80400"},{"test":"test_gap_repsel_module_init_canonical","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4146,"reclaimed":80400,"evidence":"cycles=1 evacuated=0 scavenged=4146 reclaimed=80400"},{"test":"test_gap_repsel_module_init_canonical","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":26800,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=26800"},{"test":"test_gap_repsel_module_init_canonical","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_pointer_publish","arm":"default","result":"PASS","cycles":5,"evacuated":0,"scavenged":19144,"reclaimed":77393952,"evidence":"cycles=5 evacuated=0 scavenged=19144 reclaimed=77393952"},{"test":"test_gap_gc_pointer_publish","arm":"safepoint_minor","result":"PASS","cycles":5,"evacuated":0,"scavenged":19144,"reclaimed":77393952,"evidence":"cycles=5 evacuated=0 scavenged=19144 reclaimed=77393952"},{"test":"test_gap_gc_pointer_publish","arm":"evac_minor","result":"PASS","cycles":5,"evacuated":0,"scavenged":19144,"reclaimed":77393952,"evidence":"cycles=5 evacuated=0 scavenged=19144 reclaimed=77393952"},{"test":"test_gap_gc_pointer_publish","arm":"verify_evac","result":"PASS","cycles":5,"evacuated":0,"scavenged":19144,"reclaimed":77393952,"evidence":"cycles=5 evacuated=0 scavenged=19144 reclaimed=77393952"},{"test":"test_gap_gc_pointer_publish","arm":"force_verify","result":"PASS","cycles":5,"evacuated":0,"scavenged":19144,"reclaimed":77393952,"evidence":"cycles=5 evacuated=0 scavenged=19144 reclaimed=77393952"},{"test":"test_gap_gc_pointer_publish","arm":"cons_scan_off","result":"PASS","cycles":5,"evacuated":0,"scavenged":19144,"reclaimed":77393952,"evidence":"cycles=5 evacuated=0 scavenged=19144 reclaimed=77393952"},{"test":"test_gap_gc_pointer_publish","arm":"shipped_default","result":"PASS","cycles":2,"evacuated":0,"scavenged":12679,"reclaimed":71143152,"evidence":"cycles=2 evacuated=0 scavenged=12679 reclaimed=71143152"},{"test":"test_gap_repsel_gc_stress","arm":"default","result":"PASS","cycles":12,"evacuated":0,"scavenged":557915,"reclaimed":468745200,"evidence":"cycles=12 evacuated=0 scavenged=557915 reclaimed=468745200"},{"test":"test_gap_repsel_gc_stress","arm":"safepoint_minor","result":"PASS","cycles":12,"evacuated":0,"scavenged":557915,"reclaimed":468745200,"evidence":"cycles=12 evacuated=0 scavenged=557915 reclaimed=468745200"},{"test":"test_gap_repsel_gc_stress","arm":"evac_minor","result":"PASS","cycles":15,"evacuated":0,"scavenged":553338,"reclaimed":462782912,"evidence":"cycles=15 evacuated=0 scavenged=553338 reclaimed=462782912"},{"test":"test_gap_repsel_gc_stress","arm":"verify_evac","result":"PASS","cycles":16,"evacuated":0,"scavenged":574419,"reclaimed":493711024,"evidence":"cycles=16 evacuated=0 scavenged=574419 reclaimed=493711024"},{"test":"test_gap_repsel_gc_stress","arm":"force_verify","result":"PASS","cycles":16,"evacuated":0,"scavenged":618428,"reclaimed":441028080,"evidence":"cycles=16 evacuated=0 scavenged=618428 reclaimed=441028080"},{"test":"test_gap_repsel_gc_stress","arm":"cons_scan_off","result":"PASS","cycles":15,"evacuated":0,"scavenged":553338,"reclaimed":462782912,"evidence":"cycles=15 evacuated=0 scavenged=553338 reclaimed=462782912"},{"test":"test_gap_repsel_gc_stress","arm":"shipped_default","result":"PASS","cycles":7,"evacuated":0,"scavenged":480130,"reclaimed":463768560,"evidence":"cycles=7 evacuated=0 scavenged=480130 reclaimed=463768560"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":11901,"reclaimed":39628704,"evidence":"cycles=4 evacuated=0 scavenged=11901 reclaimed=39628704"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":11901,"reclaimed":39628704,"evidence":"cycles=4 evacuated=0 scavenged=11901 reclaimed=39628704"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":11901,"reclaimed":39628704,"evidence":"cycles=4 evacuated=0 scavenged=11901 reclaimed=39628704"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":11900,"reclaimed":39629136,"evidence":"cycles=4 evacuated=0 scavenged=11900 reclaimed=39629136"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":11900,"reclaimed":39629136,"evidence":"cycles=4 evacuated=0 scavenged=11900 reclaimed=39629136"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":11901,"reclaimed":39628704,"evidence":"cycles=4 evacuated=0 scavenged=11901 reclaimed=39628704"},{"test":"test_gap_gc_spread_accessor_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":9032,"reclaimed":45685464,"evidence":"cycles=1 evacuated=0 scavenged=9032 reclaimed=45685464"},{"test":"test_gap_gc_static_block_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":15092,"reclaimed":39261768,"evidence":"cycles=4 evacuated=0 scavenged=15092 reclaimed=39261768"},{"test":"test_gap_gc_static_block_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":15092,"reclaimed":39261768,"evidence":"cycles=4 evacuated=0 scavenged=15092 reclaimed=39261768"},{"test":"test_gap_gc_static_block_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":15092,"reclaimed":39261768,"evidence":"cycles=4 evacuated=0 scavenged=15092 reclaimed=39261768"},{"test":"test_gap_gc_static_block_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":15092,"reclaimed":39261768,"evidence":"cycles=4 evacuated=0 scavenged=15092 reclaimed=39261768"},{"test":"test_gap_gc_static_block_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":15092,"reclaimed":39261768,"evidence":"cycles=4 evacuated=0 scavenged=15092 reclaimed=39261768"},{"test":"test_gap_gc_static_block_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":15092,"reclaimed":39261768,"evidence":"cycles=4 evacuated=0 scavenged=15092 reclaimed=39261768"},{"test":"test_gap_gc_static_block_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":7455,"reclaimed":45857400,"evidence":"cycles=1 evacuated=0 scavenged=7455 reclaimed=45857400"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":40131648,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=40131648"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":40131648,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=40131648"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":40131648,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=40131648"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":40131648,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=40131648"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":40131648,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=40131648"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":10087,"reclaimed":40131648,"evidence":"cycles=4 evacuated=0 scavenged=10087 reclaimed=40131648"},{"test":"test_gap_gc_inline_ctor_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":7887,"reclaimed":46238640,"evidence":"cycles=1 evacuated=0 scavenged=7887 reclaimed=46238640"},{"test":"test_gap_gc_catch_param_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":14153,"reclaimed":39335616,"evidence":"cycles=4 evacuated=0 scavenged=14153 reclaimed=39335616"},{"test":"test_gap_gc_catch_param_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":14153,"reclaimed":39335616,"evidence":"cycles=4 evacuated=0 scavenged=14153 reclaimed=39335616"},{"test":"test_gap_gc_catch_param_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":14153,"reclaimed":39335616,"evidence":"cycles=4 evacuated=0 scavenged=14153 reclaimed=39335616"},{"test":"test_gap_gc_catch_param_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":14153,"reclaimed":39335616,"evidence":"cycles=4 evacuated=0 scavenged=14153 reclaimed=39335616"},{"test":"test_gap_gc_catch_param_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":14153,"reclaimed":39335616,"evidence":"cycles=4 evacuated=0 scavenged=14153 reclaimed=39335616"},{"test":"test_gap_gc_catch_param_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":14153,"reclaimed":39335616,"evidence":"cycles=4 evacuated=0 scavenged=14153 reclaimed=39335616"},{"test":"test_gap_gc_catch_param_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":8030,"reclaimed":45800184,"evidence":"cycles=1 evacuated=0 scavenged=8030 reclaimed=45800184"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=31121040"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=31121040"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=31121040"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=31121040"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=31121040"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5368,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5368 reclaimed=31121040"},{"test":"test_gap_gc_closure_this_capture_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3346,"reclaimed":46783680,"evidence":"cycles=1 evacuated=0 scavenged=3346 reclaimed=46783680"},{"test":"test_gap_gc_method_receiver_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":40320048,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=40320048"},{"test":"test_gap_gc_method_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":40320048,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=40320048"},{"test":"test_gap_gc_method_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":40320048,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=40320048"},{"test":"test_gap_gc_method_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":40320048,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=40320048"},{"test":"test_gap_gc_method_receiver_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":40320048,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=40320048"},{"test":"test_gap_gc_method_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":8330,"reclaimed":40320048,"evidence":"cycles=4 evacuated=0 scavenged=8330 reclaimed=40320048"},{"test":"test_gap_gc_method_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3903,"reclaimed":46704384,"evidence":"cycles=1 evacuated=0 scavenged=3903 reclaimed=46704384"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"default","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":208886184,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=208886184"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":208886184,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=208886184"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":208886184,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=208886184"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":208886184,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=208886184"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"force_verify","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":208886184,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=208886184"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":10,"evacuated":0,"scavenged":173994,"reclaimed":208886184,"evidence":"cycles=10 evacuated=0 scavenged=173994 reclaimed=208886184"},{"test":"test_gap_gc_index_get_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":4,"evacuated":0,"scavenged":79719,"reclaimed":187084536,"evidence":"cycles=4 evacuated=0 scavenged=79719 reclaimed=187084536"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":31125504,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=31125504"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":31125504,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=31125504"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":31125504,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=31125504"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":31125504,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=31125504"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":31125504,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=31125504"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":4562,"reclaimed":31125504,"evidence":"cycles=4 evacuated=0 scavenged=4562 reclaimed=31125504"},{"test":"test_gap_gc_closure_call_callee_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3407,"reclaimed":46784976,"evidence":"cycles=1 evacuated=0 scavenged=3407 reclaimed=46784976"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5372,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5372 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3346,"reclaimed":46783680,"evidence":"cycles=1 evacuated=0 scavenged=3346 reclaimed=46783680"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5373,"reclaimed":31121040,"evidence":"cycles=4 evacuated=0 scavenged=5373 reclaimed=31121040"},{"test":"test_gap_gc_closure_call_argument_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3346,"reclaimed":46783680,"evidence":"cycles=1 evacuated=0 scavenged=3346 reclaimed=46783680"},{"test":"test_gap_gc_call_argument_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":16,"reclaimed":3133992,"evidence":"cycles=1 evacuated=0 scavenged=16 reclaimed=3133992"},{"test":"test_gap_gc_call_argument_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":16,"reclaimed":3133992,"evidence":"cycles=1 evacuated=0 scavenged=16 reclaimed=3133992"},{"test":"test_gap_gc_call_argument_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_call_argument_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_next_request_import","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":5285,"reclaimed":2286656,"evidence":"cycles=2 evacuated=0 scavenged=5285 reclaimed=2286656"},{"test":"test_gap_gc_next_request_import","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":5285,"reclaimed":2286656,"evidence":"cycles=2 evacuated=0 scavenged=5285 reclaimed=2286656"},{"test":"test_gap_gc_next_request_import","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":5285,"reclaimed":2286656,"evidence":"cycles=2 evacuated=0 scavenged=5285 reclaimed=2286656"},{"test":"test_gap_gc_next_request_import","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":5285,"reclaimed":2286656,"evidence":"cycles=2 evacuated=0 scavenged=5285 reclaimed=2286656"},{"test":"test_gap_gc_next_request_import","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":10033,"reclaimed":3627256,"evidence":"cycles=3 evacuated=0 scavenged=10033 reclaimed=3627256"},{"test":"test_gap_gc_next_request_import","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":5285,"reclaimed":2286656,"evidence":"cycles=2 evacuated=0 scavenged=5285 reclaimed=2286656"},{"test":"test_gap_gc_next_request_import","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":281168,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=281168"},{"test":"test_gap_gc_rest_argument_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":3085224,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=3085224"},{"test":"test_gap_gc_rest_argument_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":3085224,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=3085224"},{"test":"test_gap_gc_rest_argument_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":3085224,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=3085224"},{"test":"test_gap_gc_rest_argument_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":3085224,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=3085224"},{"test":"test_gap_gc_rest_argument_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":3085224,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=3085224"},{"test":"test_gap_gc_rest_argument_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":406,"reclaimed":3085224,"evidence":"cycles=1 evacuated=0 scavenged=406 reclaimed=3085224"},{"test":"test_gap_gc_rest_argument_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":3135408,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=3135408"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":3135408,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=3135408"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":3135408,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=3135408"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":3135408,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=3135408"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":3135408,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=3135408"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":70,"reclaimed":3135408,"evidence":"cycles=1 evacuated=0 scavenged=70 reclaimed=3135408"},{"test":"test_gap_gc_same_module_call_argument_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_new_instance_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":31032144,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=31032144"},{"test":"test_gap_gc_new_instance_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":31032144,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=31032144"},{"test":"test_gap_gc_new_instance_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":31032144,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=31032144"},{"test":"test_gap_gc_new_instance_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":31032144,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=31032144"},{"test":"test_gap_gc_new_instance_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":31032144,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=31032144"},{"test":"test_gap_gc_new_instance_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":6101,"reclaimed":31032144,"evidence":"cycles=4 evacuated=0 scavenged=6101 reclaimed=31032144"},{"test":"test_gap_gc_new_instance_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":3960,"reclaimed":46697904,"evidence":"cycles=1 evacuated=0 scavenged=3960 reclaimed=46697904"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":14777,"reclaimed":9051096,"evidence":"cycles=2 evacuated=0 scavenged=14777 reclaimed=9051096"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":14777,"reclaimed":9051096,"evidence":"cycles=2 evacuated=0 scavenged=14777 reclaimed=9051096"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":24490,"reclaimed":18974616,"evidence":"cycles=3 evacuated=0 scavenged=24490 reclaimed=18974616"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":14589,"reclaimed":9008688,"evidence":"cycles=2 evacuated=0 scavenged=14589 reclaimed=9008688"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":23546,"reclaimed":19017816,"evidence":"cycles=3 evacuated=0 scavenged=23546 reclaimed=19017816"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":14777,"reclaimed":9051096,"evidence":"cycles=2 evacuated=0 scavenged=14777 reclaimed=9051096"},{"test":"test_gap_gc_assign_string_source_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":31529432,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=31529432"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":31529432,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=31529432"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":36755328,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=36755328"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":31529432,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=31529432"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":3051,"reclaimed":35989464,"evidence":"cycles=4 evacuated=0 scavenged=3051 reclaimed=35989464"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":703,"reclaimed":36755328,"evidence":"cycles=4 evacuated=0 scavenged=703 reclaimed=36755328"},{"test":"test_gap_gc_typeof_string_cache_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":31097568,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=31097568"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":31097568,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=31097568"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":31097568,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=31097568"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":31097568,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=31097568"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":31097568,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=31097568"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":5681,"reclaimed":31097568,"evidence":"cycles=4 evacuated=0 scavenged=5681 reclaimed=31097568"},{"test":"test_gap_gc_closure_call_prev_this_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":2740,"reclaimed":46856688,"evidence":"cycles=1 evacuated=0 scavenged=2740 reclaimed=46856688"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"default","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":1373408,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=1373408"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"safepoint_minor","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":1373408,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=1373408"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4417,"reclaimed":2186664,"evidence":"cycles=1 evacuated=0 scavenged=4417 reclaimed=2186664"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"verify_evac","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":1373408,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=1373408"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4417,"reclaimed":2186664,"evidence":"cycles=1 evacuated=0 scavenged=4417 reclaimed=2186664"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"cons_scan_off","result":"UNVER","cycles":2,"evacuated":0,"scavenged":0,"reclaimed":1373408,"evidence":"cycles=2 evacuated=0 scavenged=0 reclaimed=1373408"},{"test":"test_gap_gc_regexp_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_staging_args_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_staging_args_rooting","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":33648,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=33648"},{"test":"test_gap_gc_staging_args_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":27,"reclaimed":50472,"evidence":"cycles=1 evacuated=0 scavenged=27 reclaimed=50472"},{"test":"test_gap_gc_staging_args_rooting","arm":"verify_evac","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":33648,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=33648"},{"test":"test_gap_gc_staging_args_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":27,"reclaimed":50472,"evidence":"cycles=1 evacuated=0 scavenged=27 reclaimed=50472"},{"test":"test_gap_gc_staging_args_rooting","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":33648,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=33648"},{"test":"test_gap_gc_staging_args_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interval_args_rooting","arm":"default","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":48080,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=48080"},{"test":"test_gap_gc_interval_args_rooting","arm":"safepoint_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":32080,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=32080"},{"test":"test_gap_gc_interval_args_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":48120,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=48120"},{"test":"test_gap_gc_interval_args_rooting","arm":"verify_evac","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":32080,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=32080"},{"test":"test_gap_gc_interval_args_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":12,"reclaimed":48120,"evidence":"cycles=1 evacuated=0 scavenged=12 reclaimed=48120"},{"test":"test_gap_gc_interval_args_rooting","arm":"cons_scan_off","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":32080,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=32080"},{"test":"test_gap_gc_interval_args_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":9615,"reclaimed":14699160,"evidence":"cycles=3 evacuated=0 scavenged=9615 reclaimed=14699160"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":9674,"reclaimed":14699400,"evidence":"cycles=3 evacuated=0 scavenged=9674 reclaimed=14699400"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":10543,"reclaimed":20892648,"evidence":"cycles=3 evacuated=0 scavenged=10543 reclaimed=20892648"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":9674,"reclaimed":14699400,"evidence":"cycles=3 evacuated=0 scavenged=9674 reclaimed=14699400"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":10032,"reclaimed":29584704,"evidence":"cycles=4 evacuated=0 scavenged=10032 reclaimed=29584704"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":9674,"reclaimed":14699400,"evidence":"cycles=3 evacuated=0 scavenged=9674 reclaimed=14699400"},{"test":"test_gap_gc_process_env_cache_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_symbol_local_rooting","arm":"default","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":31949288,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=31949288"},{"test":"test_gap_gc_symbol_local_rooting","arm":"safepoint_minor","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":31949288,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=31949288"},{"test":"test_gap_gc_symbol_local_rooting","arm":"evac_minor","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":31949288,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=31949288"},{"test":"test_gap_gc_symbol_local_rooting","arm":"verify_evac","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":31949288,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=31949288"},{"test":"test_gap_gc_symbol_local_rooting","arm":"force_verify","result":"PASS","cycles":86,"evacuated":0,"scavenged":8170,"reclaimed":31952312,"evidence":"cycles=86 evacuated=0 scavenged=8170 reclaimed=31952312"},{"test":"test_gap_gc_symbol_local_rooting","arm":"cons_scan_off","result":"PASS","cycles":86,"evacuated":0,"scavenged":5,"reclaimed":31949288,"evidence":"cycles=86 evacuated=0 scavenged=5 reclaimed=31949288"},{"test":"test_gap_gc_symbol_local_rooting","arm":"shipped_default","result":"PASS","cycles":85,"evacuated":0,"scavenged":8170,"reclaimed":31952280,"evidence":"cycles=85 evacuated=0 scavenged=8170 reclaimed=31952280"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":10086,"reclaimed":30365064,"evidence":"cycles=4 evacuated=0 scavenged=10086 reclaimed=30365064"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":10086,"reclaimed":30365064,"evidence":"cycles=4 evacuated=0 scavenged=10086 reclaimed=30365064"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":10086,"reclaimed":30365064,"evidence":"cycles=4 evacuated=0 scavenged=10086 reclaimed=30365064"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":10086,"reclaimed":30365064,"evidence":"cycles=4 evacuated=0 scavenged=10086 reclaimed=30365064"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":10086,"reclaimed":30365064,"evidence":"cycles=4 evacuated=0 scavenged=10086 reclaimed=30365064"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":10086,"reclaimed":30365064,"evidence":"cycles=4 evacuated=0 scavenged=10086 reclaimed=30365064"},{"test":"test_gap_gc_dynamic_construct_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":6185,"reclaimed":45917400,"evidence":"cycles=1 evacuated=0 scavenged=6185 reclaimed=45917400"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":108544,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=108544"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4185,"reclaimed":325632,"evidence":"cycles=1 evacuated=0 scavenged=4185 reclaimed=325632"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_inlined_ctor_body_locals_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":8594,"reclaimed":11642328,"evidence":"cycles=2 evacuated=0 scavenged=8594 reclaimed=11642328"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":8594,"reclaimed":11642328,"evidence":"cycles=2 evacuated=0 scavenged=8594 reclaimed=11642328"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":8594,"reclaimed":11642328,"evidence":"cycles=2 evacuated=0 scavenged=8594 reclaimed=11642328"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":8594,"reclaimed":11642328,"evidence":"cycles=2 evacuated=0 scavenged=8594 reclaimed=11642328"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"force_verify","result":"PASS","cycles":2,"evacuated":0,"scavenged":8594,"reclaimed":11642328,"evidence":"cycles=2 evacuated=0 scavenged=8594 reclaimed=11642328"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":8594,"reclaimed":11642328,"evidence":"cycles=2 evacuated=0 scavenged=8594 reclaimed=11642328"},{"test":"test_gap_gc_optional_param_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"default","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":50330880,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=50330880"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"safepoint_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":50330880,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=50330880"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"evac_minor","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":50330880,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=50330880"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"verify_evac","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":50330880,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=50330880"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":50330880,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=50330880"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"cons_scan_off","result":"PASS","cycles":4,"evacuated":0,"scavenged":60,"reclaimed":50330880,"evidence":"cycles=4 evacuated=0 scavenged=60 reclaimed=50330880"},{"test":"test_gap_gc_iterator_drain_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":30,"reclaimed":50328000,"evidence":"cycles=1 evacuated=0 scavenged=30 reclaimed=50328000"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":42634,"reclaimed":89512,"evidence":"cycles=2 evacuated=0 scavenged=42634 reclaimed=89512"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":42634,"reclaimed":89512,"evidence":"cycles=2 evacuated=0 scavenged=42634 reclaimed=89512"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":42634,"reclaimed":89512,"evidence":"cycles=2 evacuated=0 scavenged=42634 reclaimed=89512"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":36033,"reclaimed":469944,"evidence":"cycles=3 evacuated=0 scavenged=36033 reclaimed=469944"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":78667,"reclaimed":471000,"evidence":"cycles=3 evacuated=0 scavenged=78667 reclaimed=471000"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":42634,"reclaimed":89512,"evidence":"cycles=2 evacuated=0 scavenged=42634 reclaimed=89512"},{"test":"test_gap_gc_global_builtin_lookup_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":25164576,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=25164576"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":25164576,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=25164576"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":25164576,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=25164576"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":25164576,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=25164576"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":25164576,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=25164576"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":26,"reclaimed":25164576,"evidence":"cycles=3 evacuated=0 scavenged=26 reclaimed=25164576"},{"test":"test_gap_gc_spread_symbol_iterator_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":66992,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=66992"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4270,"reclaimed":200976,"evidence":"cycles=1 evacuated=0 scavenged=4270 reclaimed=200976"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_loop_clone","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_alloc_point_no_move","arm":"default","result":"PASS","cycles":43,"evacuated":0,"scavenged":11590,"reclaimed":1200966696,"evidence":"cycles=43 evacuated=0 scavenged=11590 reclaimed=1200966696"},{"test":"test_gap_gc_alloc_point_no_move","arm":"safepoint_minor","result":"PASS","cycles":43,"evacuated":0,"scavenged":11590,"reclaimed":1200966696,"evidence":"cycles=43 evacuated=0 scavenged=11590 reclaimed=1200966696"},{"test":"test_gap_gc_alloc_point_no_move","arm":"evac_minor","result":"PASS","cycles":43,"evacuated":0,"scavenged":11590,"reclaimed":1200966696,"evidence":"cycles=43 evacuated=0 scavenged=11590 reclaimed=1200966696"},{"test":"test_gap_gc_alloc_point_no_move","arm":"verify_evac","result":"PASS","cycles":43,"evacuated":0,"scavenged":11590,"reclaimed":1200966696,"evidence":"cycles=43 evacuated=0 scavenged=11590 reclaimed=1200966696"},{"test":"test_gap_gc_alloc_point_no_move","arm":"force_verify","result":"PASS","cycles":43,"evacuated":0,"scavenged":11590,"reclaimed":1200966696,"evidence":"cycles=43 evacuated=0 scavenged=11590 reclaimed=1200966696"},{"test":"test_gap_gc_alloc_point_no_move","arm":"cons_scan_off","result":"PASS","cycles":43,"evacuated":0,"scavenged":11590,"reclaimed":1200966696,"evidence":"cycles=43 evacuated=0 scavenged=11590 reclaimed=1200966696"},{"test":"test_gap_gc_alloc_point_no_move","arm":"shipped_default","result":"PASS","cycles":39,"evacuated":0,"scavenged":12221,"reclaimed":1200967392,"evidence":"cycles=39 evacuated=0 scavenged=12221 reclaimed=1200967392"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"default","result":"PASS","cycles":9,"evacuated":0,"scavenged":35919,"reclaimed":176707584,"evidence":"cycles=9 evacuated=0 scavenged=35919 reclaimed=176707584"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"safepoint_minor","result":"PASS","cycles":9,"evacuated":0,"scavenged":35919,"reclaimed":176707584,"evidence":"cycles=9 evacuated=0 scavenged=35919 reclaimed=176707584"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"evac_minor","result":"PASS","cycles":9,"evacuated":0,"scavenged":35919,"reclaimed":176707584,"evidence":"cycles=9 evacuated=0 scavenged=35919 reclaimed=176707584"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"verify_evac","result":"PASS","cycles":9,"evacuated":0,"scavenged":35919,"reclaimed":176707584,"evidence":"cycles=9 evacuated=0 scavenged=35919 reclaimed=176707584"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"force_verify","result":"PASS","cycles":9,"evacuated":0,"scavenged":35919,"reclaimed":176707584,"evidence":"cycles=9 evacuated=0 scavenged=35919 reclaimed=176707584"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"cons_scan_off","result":"PASS","cycles":9,"evacuated":0,"scavenged":35919,"reclaimed":176707584,"evidence":"cycles=9 evacuated=0 scavenged=35919 reclaimed=176707584"},{"test":"test_gap_gc_class_field_receiver_rooting","arm":"shipped_default","result":"PASS","cycles":5,"evacuated":0,"scavenged":23387,"reclaimed":180415392,"evidence":"cycles=5 evacuated=0 scavenged=23387 reclaimed=180415392"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"default","result":"PASS","cycles":42,"evacuated":0,"scavenged":156760,"reclaimed":1098436200,"evidence":"cycles=42 evacuated=0 scavenged=156760 reclaimed=1098436200"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"safepoint_minor","result":"PASS","cycles":42,"evacuated":0,"scavenged":156760,"reclaimed":1098436200,"evidence":"cycles=42 evacuated=0 scavenged=156760 reclaimed=1098436200"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"evac_minor","result":"PASS","cycles":42,"evacuated":0,"scavenged":156760,"reclaimed":1098436200,"evidence":"cycles=42 evacuated=0 scavenged=156760 reclaimed=1098436200"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"verify_evac","result":"PASS","cycles":42,"evacuated":0,"scavenged":156760,"reclaimed":1098436200,"evidence":"cycles=42 evacuated=0 scavenged=156760 reclaimed=1098436200"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"force_verify","result":"PASS","cycles":42,"evacuated":0,"scavenged":156760,"reclaimed":1098436200,"evidence":"cycles=42 evacuated=0 scavenged=156760 reclaimed=1098436200"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"cons_scan_off","result":"PASS","cycles":42,"evacuated":0,"scavenged":156760,"reclaimed":1098436200,"evidence":"cycles=42 evacuated=0 scavenged=156760 reclaimed=1098436200"},{"test":"test_gap_gc_index_set_bounded_globalthis_ta_rooting","arm":"shipped_default","result":"PASS","cycles":38,"evacuated":0,"scavenged":155182,"reclaimed":1110715920,"evidence":"cycles=38 evacuated=0 scavenged=155182 reclaimed=1110715920"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":10394,"reclaimed":20947824,"evidence":"cycles=3 evacuated=0 scavenged=10394 reclaimed=20947824"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":10394,"reclaimed":20947824,"evidence":"cycles=3 evacuated=0 scavenged=10394 reclaimed=20947824"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":10394,"reclaimed":20947824,"evidence":"cycles=3 evacuated=0 scavenged=10394 reclaimed=20947824"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":10394,"reclaimed":20947824,"evidence":"cycles=3 evacuated=0 scavenged=10394 reclaimed=20947824"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":10394,"reclaimed":20947824,"evidence":"cycles=3 evacuated=0 scavenged=10394 reclaimed=20947824"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":10394,"reclaimed":20947824,"evidence":"cycles=3 evacuated=0 scavenged=10394 reclaimed=20947824"},{"test":"test_gap_gc_namespace_and_computed_dispatch_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4206,"reclaimed":1448160,"evidence":"cycles=1 evacuated=0 scavenged=4206 reclaimed=1448160"},{"test":"test_gap_gc_container_value_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4206,"reclaimed":1448160,"evidence":"cycles=1 evacuated=0 scavenged=4206 reclaimed=1448160"},{"test":"test_gap_gc_container_value_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":179640,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=179640"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":538920,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=538920"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":31,"reclaimed":35352,"evidence":"cycles=1 evacuated=0 scavenged=31 reclaimed=35352"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":31,"reclaimed":35352,"evidence":"cycles=1 evacuated=0 scavenged=31 reclaimed=35352"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_shape_param_binding","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":92264,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=92264"},{"test":"test_gap_repsel_element_group_numeric","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4149,"reclaimed":276792,"evidence":"cycles=1 evacuated=0 scavenged=4149 reclaimed=276792"},{"test":"test_gap_repsel_element_group_numeric","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_repsel_element_group_numeric","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4206,"reclaimed":1448160,"evidence":"cycles=1 evacuated=0 scavenged=4206 reclaimed=1448160"},{"test":"test_gap_gc_container_value_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4206,"reclaimed":1448160,"evidence":"cycles=1 evacuated=0 scavenged=4206 reclaimed=1448160"},{"test":"test_gap_gc_container_value_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_container_value_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":179640,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=179640"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4194,"reclaimed":538920,"evidence":"cycles=1 evacuated=0 scavenged=4194 reclaimed=538920"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_properties_key_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":4387,"reclaimed":2193240,"evidence":"cycles=1 evacuated=0 scavenged=4387 reclaimed=2193240"},{"test":"test_gap_gc_define_property_descriptor_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":8492,"reclaimed":17962896,"evidence":"cycles=3 evacuated=0 scavenged=8492 reclaimed=17962896"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":8492,"reclaimed":17962896,"evidence":"cycles=3 evacuated=0 scavenged=8492 reclaimed=17962896"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":8492,"reclaimed":17962896,"evidence":"cycles=3 evacuated=0 scavenged=8492 reclaimed=17962896"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":8492,"reclaimed":17962896,"evidence":"cycles=3 evacuated=0 scavenged=8492 reclaimed=17962896"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":8492,"reclaimed":17962896,"evidence":"cycles=3 evacuated=0 scavenged=8492 reclaimed=17962896"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":8492,"reclaimed":17962896,"evidence":"cycles=3 evacuated=0 scavenged=8492 reclaimed=17962896"},{"test":"test_gap_gc_uint8_buffer_callback_rooting","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":4427,"reclaimed":27340728,"evidence":"cycles=1 evacuated=0 scavenged=4427 reclaimed=27340728"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"default","result":"PASS","cycles":2,"evacuated":0,"scavenged":9415,"reclaimed":11556768,"evidence":"cycles=2 evacuated=0 scavenged=9415 reclaimed=11556768"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"safepoint_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":9415,"reclaimed":11556768,"evidence":"cycles=2 evacuated=0 scavenged=9415 reclaimed=11556768"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":9415,"reclaimed":11556768,"evidence":"cycles=2 evacuated=0 scavenged=9415 reclaimed=11556768"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"verify_evac","result":"PASS","cycles":2,"evacuated":0,"scavenged":9415,"reclaimed":11556768,"evidence":"cycles=2 evacuated=0 scavenged=9415 reclaimed=11556768"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"force_verify","result":"PASS","cycles":2,"evacuated":0,"scavenged":9415,"reclaimed":11556768,"evidence":"cycles=2 evacuated=0 scavenged=9415 reclaimed=11556768"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"cons_scan_off","result":"PASS","cycles":2,"evacuated":0,"scavenged":9415,"reclaimed":11556768,"evidence":"cycles=2 evacuated=0 scavenged=9415 reclaimed=11556768"},{"test":"test_gap_gc_fetch_method_value_cache_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_request_signal_rooting","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":9682,"reclaimed":27271800,"evidence":"cycles=3 evacuated=0 scavenged=9682 reclaimed=27271800"},{"test":"test_gap_gc_request_signal_rooting","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":9682,"reclaimed":27271800,"evidence":"cycles=3 evacuated=0 scavenged=9682 reclaimed=27271800"},{"test":"test_gap_gc_request_signal_rooting","arm":"evac_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":9682,"reclaimed":27271800,"evidence":"cycles=3 evacuated=0 scavenged=9682 reclaimed=27271800"},{"test":"test_gap_gc_request_signal_rooting","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":9682,"reclaimed":27271800,"evidence":"cycles=3 evacuated=0 scavenged=9682 reclaimed=27271800"},{"test":"test_gap_gc_request_signal_rooting","arm":"force_verify","result":"PASS","cycles":3,"evacuated":0,"scavenged":9682,"reclaimed":27271800,"evidence":"cycles=3 evacuated=0 scavenged=9682 reclaimed=27271800"},{"test":"test_gap_gc_request_signal_rooting","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":9682,"reclaimed":27271800,"evidence":"cycles=3 evacuated=0 scavenged=9682 reclaimed=27271800"},{"test":"test_gap_gc_request_signal_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"default","result":"PASS","cycles":3,"evacuated":0,"scavenged":8465,"reclaimed":11702312,"evidence":"cycles=3 evacuated=0 scavenged=8465 reclaimed=11702312"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"safepoint_minor","result":"PASS","cycles":3,"evacuated":0,"scavenged":8465,"reclaimed":11702312,"evidence":"cycles=3 evacuated=0 scavenged=8465 reclaimed=11702312"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"evac_minor","result":"PASS","cycles":2,"evacuated":0,"scavenged":343,"reclaimed":9419960,"evidence":"cycles=2 evacuated=0 scavenged=343 reclaimed=9419960"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"verify_evac","result":"PASS","cycles":3,"evacuated":0,"scavenged":8465,"reclaimed":11702312,"evidence":"cycles=3 evacuated=0 scavenged=8465 reclaimed=11702312"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"force_verify","result":"PASS","cycles":4,"evacuated":0,"scavenged":8805,"reclaimed":19925400,"evidence":"cycles=4 evacuated=0 scavenged=8805 reclaimed=19925400"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"cons_scan_off","result":"PASS","cycles":3,"evacuated":0,"scavenged":8465,"reclaimed":11702312,"evidence":"cycles=3 evacuated=0 scavenged=8465 reclaimed=11702312"},{"test":"test_gap_gc_net_once_flags_rekey","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"default","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"safepoint_minor","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"evac_minor","result":"FAIL","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":23800,"evidence":"output-mismatch cycles=1 evacuated=0 scavenged=0 reclaimed=23800"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"verify_evac","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"force_verify","result":"FAIL","cycles":1,"evacuated":0,"scavenged":4175,"reclaimed":71400,"evidence":"output-mismatch cycles=1 evacuated=0 scavenged=4175 reclaimed=71400"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"cons_scan_off","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_http2_pending_event_callback_rooting","arm":"shipped_default","result":"FAIL","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"output-mismatch cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":22560,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=22560"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4115,"reclaimed":67680,"evidence":"cycles=1 evacuated=0 scavenged=4115 reclaimed=67680"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_interp_global_this_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"default","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":3148344,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=3148344"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"safepoint_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":3148344,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=3148344"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":3148344,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=3148344"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"verify_evac","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":3148344,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=3148344"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":3148344,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=3148344"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"cons_scan_off","result":"PASS","cycles":1,"evacuated":0,"scavenged":7,"reclaimed":3148344,"evidence":"cycles=1 evacuated=0 scavenged=7 reclaimed=3148344"},{"test":"test_gap_gc_string_copy_source_rooting","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":29752,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=29752"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4154,"reclaimed":89256,"evidence":"cycles=1 evacuated=0 scavenged=4154 reclaimed=89256"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_repeat_reentrant_count","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_coalesce_local_root","arm":"default","result":"PASS","cycles":13,"evacuated":0,"scavenged":11792,"reclaimed":78358488,"evidence":"cycles=13 evacuated=0 scavenged=11792 reclaimed=78358488"},{"test":"test_gap_gc_coalesce_local_root","arm":"safepoint_minor","result":"PASS","cycles":13,"evacuated":0,"scavenged":11792,"reclaimed":78358488,"evidence":"cycles=13 evacuated=0 scavenged=11792 reclaimed=78358488"},{"test":"test_gap_gc_coalesce_local_root","arm":"evac_minor","result":"PASS","cycles":14,"evacuated":0,"scavenged":12223,"reclaimed":94898968,"evidence":"cycles=14 evacuated=0 scavenged=12223 reclaimed=94898968"},{"test":"test_gap_gc_coalesce_local_root","arm":"verify_evac","result":"PASS","cycles":13,"evacuated":0,"scavenged":34001,"reclaimed":89143280,"evidence":"cycles=13 evacuated=0 scavenged=34001 reclaimed=89143280"},{"test":"test_gap_gc_coalesce_local_root","arm":"force_verify","result":"PASS","cycles":14,"evacuated":0,"scavenged":26425,"reclaimed":97490336,"evidence":"cycles=14 evacuated=0 scavenged=26425 reclaimed=97490336"},{"test":"test_gap_gc_coalesce_local_root","arm":"cons_scan_off","result":"PASS","cycles":14,"evacuated":0,"scavenged":12223,"reclaimed":94898968,"evidence":"cycles=14 evacuated=0 scavenged=12223 reclaimed=94898968"},{"test":"test_gap_gc_coalesce_local_root","arm":"shipped_default","result":"PASS","cycles":1,"evacuated":0,"scavenged":8208,"reclaimed":36294288,"evidence":"cycles=1 evacuated=0 scavenged=8208 reclaimed=36294288"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"evac_minor","result":"UNVER","cycles":1,"evacuated":0,"scavenged":0,"reclaimed":85440,"evidence":"cycles=1 evacuated=0 scavenged=0 reclaimed=85440"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":4220,"reclaimed":256320,"evidence":"cycles=1 evacuated=0 scavenged=4220 reclaimed=256320"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_for_in_proxy_callback_roots","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"default","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"safepoint_minor","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"evac_minor","result":"PASS","cycles":1,"evacuated":0,"scavenged":41,"reclaimed":116928,"evidence":"cycles=1 evacuated=0 scavenged=41 reclaimed=116928"},{"test":"test_gap_gc_string_suffix_cursor","arm":"verify_evac","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"force_verify","result":"PASS","cycles":1,"evacuated":0,"scavenged":41,"reclaimed":116928,"evidence":"cycles=1 evacuated=0 scavenged=41 reclaimed=116928"},{"test":"test_gap_gc_string_suffix_cursor","arm":"cons_scan_off","result":"UNVER","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_string_suffix_cursor","arm":"shipped_default","result":"PASS","cycles":0,"evacuated":0,"scavenged":0,"reclaimed":0,"evidence":"cycles=0 evacuated=0 scavenged=0 reclaimed=0"},{"test":"test_gap_gc_array_shift_queue","arm":"default","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":6292440,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=6292440"},{"test":"test_gap_gc_array_shift_queue","arm":"safepoint_minor","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":6292440,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=6292440"},{"test":"test_gap_gc_array_shift_queue","arm":"evac_minor","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":6292440,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=6292440"},{"test":"test_gap_gc_array_shift_queue","arm":"verify_evac","result":"PASS","cycles":13,"evacuated":0,"scavenged":12456,"reclaimed":7871088,"evidence":"cycles=13 evacuated=0 scavenged=12456 reclaimed=7871088"},{"test":"test_gap_gc_array_shift_queue","arm":"force_verify","result":"PASS","cycles":25,"evacuated":0,"scavenged":44772,"reclaimed":2326064,"evidence":"cycles=25 evacuated=0 scavenged=44772 reclaimed=2326064"},{"test":"test_gap_gc_array_shift_queue","arm":"cons_scan_off","result":"UNVER","cycles":13,"evacuated":0,"scavenged":0,"reclaimed":6292440,"evidence":"cycles=13 evacuated=0 scavenged=0 reclaimed=6292440"},{"test":"test_gap_gc_array_shift_queue","arm":"shipped_default","result":"PASS","cycles":12,"evacuated":0,"scavenged":0,"reclaimed":13270688,"evidence":"cycles=12 evacuated=0 scavenged=0 reclaimed=13270688"}],"summary":{"pass":428,"unverified":167,"xfail":0,"fail":7}} diff --git a/benchmarks/native_property_get/evidence/measurement-receipts.tar.gz b/benchmarks/native_property_get/evidence/measurement-receipts.tar.gz new file mode 100644 index 0000000000..b2e1b15828 Binary files /dev/null and b/benchmarks/native_property_get/evidence/measurement-receipts.tar.gz differ diff --git a/benchmarks/native_property_get/evidence/parity.stdout b/benchmarks/native_property_get/evidence/parity.stdout new file mode 100644 index 0000000000..afc75a2cbf --- /dev/null +++ b/benchmarks/native_property_get/evidence/parity.stdout @@ -0,0 +1,42 @@ +inherited data true +shadowed data true +deleted shadow true +own undefined true +frozen prototype true +frozen own data true +own getter result true +own getter once true +distinct receiver true +distinct getter once true +inherited getter receiver true +inherited getter once true +data shadows getter true +shadow suppresses getter true +setter only true +proxy result true +proxy once true +proxy prototype true +prototype proxy once true +revoked proxy throws true +coerced key result true +coercion then getter once true +symbol key true +private-looking string true +long key true +inherited class static true +private field true +class expression static true +closure expando true +array expando true +array length true +typed array index true +date constructor true +regexp expando true +regexp lastIndex true +regexp accessor true +regexp getter once true +inherited toJSON getter receiver true +toJSON getter once true +toJSON method once true +noncallable toJSON true +native property Get parity passed diff --git a/benchmarks/native_property_get/evidence/runtime-source-sha256.json b/benchmarks/native_property_get/evidence/runtime-source-sha256.json new file mode 100644 index 0000000000..b694018dc0 --- /dev/null +++ b/benchmarks/native_property_get/evidence/runtime-source-sha256.json @@ -0,0 +1,9 @@ +{ + "crates/perry-runtime/src/json/stringify.rs": "9ca55d9bb6ce1903a6fb53958601c6e42fc952ab093d5cbd598768212f4041bc", + "crates/perry-runtime/src/object/field_get_set/get_field_by_name.rs": "7fdde1279dcc2ab18ef17dd59b55d483a47e40d14d64cd94352cbf1ddc174067", + "crates/perry-runtime/src/object/mod.rs": "7c5950f1320cd07d3dfbceb4e27a81c3cfe994fce92b8e0eaa60e0a7c25d79c8", + "crates/perry-runtime/src/object/native_get.rs": "cf4e83f0e00ba10a51f759ccf487c1a5d3aec2d00dce836e80a00f7b11f19727", + "crates/perry-runtime/src/object/native_get/tests.rs": "d423834bdf4a2a054efc1003fca777bdf2f8fb89c4d93ec4fe3f809c81507e4d", + "crates/perry-runtime/src/proxy/reflect.rs": "32c75ac50727e3bab55c9433a603c7debce999732d1316f4288493457b2f6f45", + "crates/perry-runtime/src/value/dynamic_object.rs": "c27f4e02c6b498ce70299ba782a9dd31b8dc38ba4fa4dca3d2e18ee558c59f19" +} diff --git a/benchmarks/native_property_get/evidence/validation-logs.tar.gz b/benchmarks/native_property_get/evidence/validation-logs.tar.gz new file mode 100644 index 0000000000..3550f98a82 Binary files /dev/null and b/benchmarks/native_property_get/evidence/validation-logs.tar.gz differ diff --git a/benchmarks/native_property_get/evidence/validation.json b/benchmarks/native_property_get/evidence/validation.json new file mode 100644 index 0000000000..0189269932 --- /dev/null +++ b/benchmarks/native_property_get/evidence/validation.json @@ -0,0 +1,31 @@ +{ + "runtime_tests": { + "candidate": { + "passed": 3803, + "ignored": 4, + "failed": 0 + }, + "base": { + "passed": 3795, + "ignored": 4, + "failed": 0 + } + }, + "regex_off_check": "pass", + "fmt": "pass", + "clippy_new_diagnostics": 0, + "fault_mutations_killed": 3, + "node_parity_output_lines": 42, + "lint": { + "commands": 83, + "failed": 3, + "ci_only_skipped": 2, + "failures": [ + "public benchmark freshness (reproduced on base)", + "workspace warnings (existing WebAssembly helpers and test cache assignment)", + "API docs drift (unchanged API manifest adds bun-pty)" + ] + }, + "gc_ratchet": "same-host base comparison passes; 126 medians identical; old pinned baseline fails on both", + "gc_stress": "428 PASS, 167 UNVER, seven HTTP/2 failures reproduced exactly on base; all required arms live" +} diff --git a/benchmarks/native_property_get/faults.py b/benchmarks/native_property_get/faults.py new file mode 100644 index 0000000000..8aaf6594c3 --- /dev/null +++ b/benchmarks/native_property_get/faults.py @@ -0,0 +1,74 @@ +#!/usr/bin/env python3 +"""Run three source mutations serially, restoring each file even on failure. + +Run only while no other build or validation reads this worktree. +""" +import argparse +import json +from pathlib import Path +import subprocess + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--out", required=True, type=Path) + args = parser.parse_args() + repo = Path(__file__).resolve().parents[2] + out = args.out.resolve() + out.mkdir(parents=True, exist_ok=False) + native_get = repo / "crates/perry-runtime/src/object/native_get.rs" + expando = repo / "crates/perry-runtime/src/object/exotic_expando.rs" + prefix = "object::native_get::tests::" + mutations = [ + ("fast_path_removed", native_get, + "if !receiver.is_pointer() || key.first() == Some(&b'#')", + "if true || !receiver.is_pointer() || key.first() == Some(&b'#')", + prefix + "own_data_is_served_and_matches_forced_slow_for_all_value_kinds"), + ("accessor_guard_removed", native_get, + "if meta.is_null() || (*meta).accessor_key_bits & accessor_bit == 0 {", + "if true {", + prefix + "accessor_bloom_guard_preserves_own_and_inherited_getter_calls"), + ("exotic_expando_ignored", expando, + 'if kind != ExoticKind::Error && !expando_in_use() && !super::descriptors_in_use() {', + 'if kind == ExoticKind::RegExp && name == "value" { return None; }\n' + ' if kind != ExoticKind::Error && !expando_in_use() && !super::descriptors_in_use() {', + prefix + "regexp_expandos_and_accessors_remain_on_the_exotic_path"), + ] + + def test(name, label, exact=False): + argv = ["cargo", "test", "-j4", "-p", "perry-runtime", "--lib", name, + "--", "--test-threads=1"] + if exact: + argv.append("--exact") + with (out / (label + ".log")).open("w") as log: + result = subprocess.run(argv, cwd=repo, stdout=log, stderr=subprocess.STDOUT) + return result.returncode, (out / (label + ".log")).read_text() + + code, _ = test("object::native_get::tests", "healthy_before") + if code: + raise RuntimeError("healthy native Get tests failed before fault injection") + results = [] + for name, path, old, new, test_name in mutations: + original = path.read_bytes() + text = original.decode() + if text.count(old) != 1: + raise ValueError(f"{name}: mutation anchor is not unique") + try: + path.write_text(text.replace(old, new)) + code, log = test(test_name, name, exact=True) + killed = code != 0 and f"test {test_name} ... FAILED" in log and "test result: FAILED" in log + results.append({"mutation": name, "test": test_name, + "exit_code": code, "assertion_failed": killed}) + (out / "results.json").write_text(json.dumps(results, indent=2) + "\n") + if not killed: + raise RuntimeError(f"{name}: expected an assertion failure, see log") + print(name, "killed by", test_name, flush=True) + finally: + path.write_bytes(original) + code, _ = test("object::native_get::tests", "healthy_after") + if code: + raise RuntimeError("healthy native Get tests failed after restoring sources") + + +if __name__ == "__main__": + main() diff --git a/benchmarks/native_property_get/iterator.ts b/benchmarks/native_property_get/iterator.ts new file mode 100644 index 0000000000..e5099b3164 --- /dev/null +++ b/benchmarks/native_property_get/iterator.ts @@ -0,0 +1,17 @@ +// Reuse the result object to expose next/done/value reads without allocating +// a result or retaining a large array on every iteration. +const count = Number(process.argv[2] || "200000"); +let index = 0; +const result = { done: false, value: 0 }; +const iterator: any = { + next() { + result.done = index >= count; + result.value = index++; + return result; + }, +}; +const iterable: any = { [Symbol.iterator]() { return iterator; } }; +let sum = 0; +for (const value of iterable) sum += value; +if (sum !== count * (count - 1) / 2) throw new Error("iterator mismatch"); +console.log(sum); diff --git a/benchmarks/native_property_get/measure.py b/benchmarks/native_property_get/measure.py new file mode 100644 index 0000000000..e9b33defe9 --- /dev/null +++ b/benchmarks/native_property_get/measure.py @@ -0,0 +1,166 @@ +#!/usr/bin/env python3 +"""Compile checked probes, count Linux user instructions, and fold attribution.""" +import argparse +import collections +import hashlib +import json +import os +from pathlib import Path +import re +import shutil +import statistics +import subprocess + + +PROBES = { + "reflect_own": 200000, + "reflect_proto": 200000, + "iterator": 200000, + "thenable": 20000, + "tojson": 100000, +} +GET = re.compile( + r"js_reflect_get|js_object_get_field_by_name|js_dynamic_object_get_property" + r"|get_field_by_name_object_tail|native_get::" +) + + +def digest(path): + with path.open("rb") as stream: + return hashlib.file_digest(stream, "sha256").hexdigest() + + +def run(argv, **kwargs): + return subprocess.run(argv, check=True, **kwargs) + + +def fold(stream): + # Same root-to-leaf frame order as repro/tonly/fold.py. Preserve perf's + # sample periods as weights, including a shortened final sample period. + stacks = collections.Counter() + frames = [] + period = 0 + for line in stream: + if not line.strip(): + if frames: + stacks[";".join(reversed(frames))] += period + frames = [] + period = 0 + elif not line[0].isspace(): + match = re.search(r"\s(\d+)\s+instructions:u:", line) + if not match: + raise ValueError("unexpected perf sample header: " + line) + period = int(match[1]) + else: + parts = line.strip().split(None, 1) + if len(parts) == 2: + symbol = parts[1].rsplit(" (", 1)[0] + frames.append(re.sub(r"\+0x[0-9a-f]+$", "", symbol)) + if frames: + stacks[";".join(reversed(frames))] += period + if not stacks or not sum(stacks.values()): + raise ValueError("perf produced no instruction stacks") + return stacks + + +def main(): + parser = argparse.ArgumentParser(description=__doc__) + parser.add_argument("--runtime-dir", required=True, type=Path) + parser.add_argument("--out", required=True, type=Path) + parser.add_argument("--node", default="node") + parser.add_argument("--smoke", action="store_true", help="compile/parity only") + args = parser.parse_args() + source = Path(__file__).resolve().parent + repo = source.parents[1] + runtime = args.runtime_dir.resolve() + perry = runtime / "perry" + out = args.out.resolve() + out.mkdir(parents=True, exist_ok=False) + env = dict(os.environ, PERRY_RUNTIME_DIR=str(runtime), + PERRY_CACHE_DIR=str(out / "cache"), PERRY_NO_TELEMETRY="1") + # LLVM-built runtime DWARF can exceed the host binutils reader's support. + # Keep this override local to the run, including perf record's postlude. + addr2line = shutil.which("llvm-addr2line-22") + if addr2line: + config = out / "perfconfig" + config.write_text(f"[annotate]\naddr2line = {addr2line}\n") + env["PERF_CONFIG"] = str(config) + node_version = run([args.node, "--version"], capture_output=True, text=True).stdout.strip() + if node_version.lstrip("v") != (repo / ".node-version").read_text().strip().lstrip("v"): + raise ValueError("Node version does not match .node-version: " + node_version) + patch = run(["git", "-C", str(repo), "diff", "--binary", "HEAD"], capture_output=True).stdout + (out / "source.patch").write_bytes(patch) + metadata = { + "commit": run(["git", "-C", str(repo), "rev-parse", "HEAD"], + capture_output=True, text=True).stdout.strip(), + "node": node_version, + "source_patch_sha256": hashlib.sha256(patch).hexdigest(), + "artifacts": {name: digest(runtime / name) for name in + ("perry", "libperry_runtime.a", "libperry_stdlib.a")}, + "probes": {name: digest(source / (name + ".ts")) for name in PROBES}, + } + (out / "metadata.json").write_text(json.dumps(metadata, indent=2) + "\n") + results = {} + for name, default_count in PROBES.items(): + count = 100 if args.smoke else default_count + ts = source / (name + ".ts") + binary = out / name + with (out / (name + ".compile.log")).open("w") as log: + run([str(perry), "compile", str(ts), "--no-auto-optimize", "--debug-symbols", + "-o", str(binary)], + env=env, stdout=log, stderr=subprocess.STDOUT) + expected = run([args.node, "--experimental-strip-types", str(ts), str(count)], + capture_output=True).stdout + actual = run([str(binary), str(count)], env=env, capture_output=True).stdout + if not expected or actual != expected: + raise ValueError(f"{name}: Node {expected!r}, Perry {actual!r}") + (out / (name + ".stdout")).write_bytes(actual) + if args.smoke: + print(name, "parity passed", flush=True) + continue + counts = [] + for repeat in range(3): + stat = out / f"{name}.{repeat}.stat" + run(["perf", "stat", "-x,", "-e", "instructions:u", "-o", str(stat), + "--", str(binary), str(count)], env=env, stdout=subprocess.DEVNULL) + rows = [line.split(",") for line in stat.read_text().splitlines()] + counts.append(next(int(row[0]) for row in rows if len(row) > 2 + and row[2] == "instructions:u")) + data = out / (name + ".perf.data") + with (out / (name + ".record.log")).open("w") as log: + run(["perf", "record", "--no-buildid", "--no-buildid-cache", "-m", "64M", + "-e", "instructions:u", "-c", "500003", + "--call-graph", "dwarf,16384", "-o", str(data), "--", str(binary), str(count)], + env=env, stdout=subprocess.DEVNULL, stderr=log) + if "lost" in (out / (name + ".record.log")).read_text().lower(): + raise ValueError(f"{name}: perf lost samples; attribution is incomplete") + with subprocess.Popen(["perf", "script", "--no-inline", "-i", str(data)], + stdout=subprocess.PIPE, text=True, env=env) as process: + stacks = fold(process.stdout) + if process.wait() != 0: + raise RuntimeError("perf script failed") + with (out / (name + ".folded")).open("w") as stream: + for stack, weight in stacks.most_common(): + stream.write(f"{weight} {stack}\n") + total = sum(stacks.values()) + get_weight = sum(weight for stack, weight in stacks.items() if GET.search(stack)) + if not get_weight: + raise ValueError(f"{name}: no Get frames; verify symbols and probe coverage") + leaves = collections.Counter() + for stack, weight in stacks.items(): + if GET.search(stack): + leaves[stack.rsplit(";", 1)[-1]] += weight + results[name] = { + "iterations": count, "instructions": counts, + "median": statistics.median(counts), + "binary_sha256": digest(binary), "sampled_instructions": total, + "get_inclusive_percent": 100 * get_weight / total, + "get_leaf_percent_of_program": [(leaf, 100 * weight / total) + for leaf, weight in leaves.most_common(20)], + } + (out / "results.json").write_text(json.dumps(results, indent=2) + "\n") + print(name, results[name]["median"], results[name]["get_inclusive_percent"], flush=True) + + +if __name__ == "__main__": + main() diff --git a/benchmarks/native_property_get/reflect_own.ts b/benchmarks/native_property_get/reflect_own.ts new file mode 100644 index 0000000000..e3f788f2c3 --- /dev/null +++ b/benchmarks/native_property_get/reflect_own.ts @@ -0,0 +1,7 @@ +// Runtime Reflect.get entry, with an ordinary own data property. +const count = Number(process.argv[2] || "200000"); +const object: any = { value: 7 }; +let sum = 0; +for (let i = 0; i < count; i++) sum += Reflect.get(object, "value"); +if (sum !== count * 7) throw new Error("own data read mismatch"); +console.log(sum); diff --git a/benchmarks/native_property_get/reflect_proto.ts b/benchmarks/native_property_get/reflect_proto.ts new file mode 100644 index 0000000000..fd45556cfd --- /dev/null +++ b/benchmarks/native_property_get/reflect_proto.ts @@ -0,0 +1,7 @@ +// Same read through two explicitly recorded ordinary prototype links. +const count = Number(process.argv[2] || "200000"); +const object: any = Object.create(Object.create({ value: 7 })); +let sum = 0; +for (let i = 0; i < count; i++) sum += Reflect.get(object, "value"); +if (sum !== count * 7) throw new Error("prototype data read mismatch"); +console.log(sum); diff --git a/benchmarks/native_property_get/thenable.ts b/benchmarks/native_property_get/thenable.ts new file mode 100644 index 0000000000..6ad27063ee --- /dev/null +++ b/benchmarks/native_property_get/thenable.ts @@ -0,0 +1,14 @@ +// A positive then lookup; the existing negative-then probe cannot serve it. +const count = Number(process.argv[2] || "20000"); +const thenable: any = { then(resolve: any) { resolve(7); } }; +let sum = 0; +let completed = 0; +for (let i = 0; i < count; i++) { + Promise.resolve(thenable).then((value: number) => { + sum += value; + if (++completed === count) { + if (sum !== count * 7) throw new Error("thenable mismatch"); + console.log(sum); + } + }); +} diff --git a/benchmarks/native_property_get/tojson.ts b/benchmarks/native_property_get/tojson.ts new file mode 100644 index 0000000000..532ffe260c --- /dev/null +++ b/benchmarks/native_property_get/tojson.ts @@ -0,0 +1,11 @@ +// A positive inherited toJSON lookup on every stringify call. +const count = Number(process.argv[2] || "100000"); +const object: any = Object.create({ toJSON() { return 7; } }); +let sum = 0; +for (let i = 0; i < count; i++) { + const text = JSON.stringify(object); + if (text !== "7") throw new Error("toJSON mismatch"); + sum += text.length; +} +if (sum !== count) throw new Error("stringify count mismatch"); +console.log(sum); diff --git a/changelog.d/10248-native-property-get.md b/changelog.d/10248-native-property-get.md new file mode 100644 index 0000000000..93a0099906 --- /dev/null +++ b/changelog.d/10248-native-property-get.md @@ -0,0 +1,10 @@ +Speed up native property Get for ordinary own and prototype data properties. +The shared lookup borrows keys and checks shape and accessor metadata before +returning, while getters, proxies, class statics, and exotics retain their +existing dispatch. JSON.stringify reuses a canonical toJSON key. + +Linux user-instruction counts decreased 71–78% in Reflect.get probes, 12% in +positive thenable assimilation, and 43% in inherited toJSON serialization; the +user-iterator control was unchanged. Differential tests, Node parity, fault +injections, and measurement/validation receipts are recorded in +benchmarks/native_property_get/REPORT.md. diff --git a/crates/perry-runtime/src/json/stringify.rs b/crates/perry-runtime/src/json/stringify.rs index e68a0f40be..f768849c94 100644 --- a/crates/perry-runtime/src/json/stringify.rs +++ b/crates/perry-runtime/src/json/stringify.rs @@ -273,19 +273,17 @@ pub(crate) unsafe fn object_get_to_json(ptr: *const u8) -> Option { let scope = crate::gc::RuntimeHandleScope::new(); let recv_handle = scope.root_nanbox_f64(recv); - let key = js_string_from_bytes(b"toJSON".as_ptr(), 6); + let key = crate::string::canonical_key(b"toJSON"); let key_handle = scope.root_string_ptr(key); - let obj_ptr = recv_handle.get_nanbox_f64(); - let obj_ptr = (obj_ptr.to_bits() & POINTER_MASK) as *const crate::ObjectHeader; let method = key_handle.with_const_ptr(|key: *const crate::string::StringHeader| { - crate::object::js_object_get_field_by_name(obj_ptr, key) + crate::object::native_get::get_by_canonical_key(recv_handle.get_nanbox_f64(), key) }); // Only treat it as toJSON if it actually resolved to a callable closure // (POINTER_TAG + closure). A plain object with no `toJSON`, or a `toJSON` // data field that isn't a function, returns `None` → serialize normally. - let method_bits = method.bits(); + let method_bits = method.to_bits(); if (method_bits & 0xFFFF_0000_0000_0000) != POINTER_TAG { return None; } diff --git a/crates/perry-runtime/src/object/field_get_set/get_field_by_name.rs b/crates/perry-runtime/src/object/field_get_set/get_field_by_name.rs index 721af36d12..5032f7d384 100644 --- a/crates/perry-runtime/src/object/field_get_set/get_field_by_name.rs +++ b/crates/perry-runtime/src/object/field_get_set/get_field_by_name.rs @@ -27,6 +27,9 @@ pub extern "C" fn js_object_get_field_by_name( obj: *const ObjectHeader, key: *const crate::StringHeader, ) -> JSValue { + if let Some(value) = unsafe { super::super::native_get::try_data_get_by_name(obj, key) } { + return value; + } // Guard hoisted to the call site: an ordinary key is rejected on a length // compare and one byte here, so the overwhelmingly common property read // makes no call into the private-member path at all. diff --git a/crates/perry-runtime/src/object/mod.rs b/crates/perry-runtime/src/object/mod.rs index e15899d4e5..12c24ddc98 100644 --- a/crates/perry-runtime/src/object/mod.rs +++ b/crates/perry-runtime/src/object/mod.rs @@ -135,6 +135,7 @@ pub(crate) mod iterator_prototypes; pub(crate) mod map_set_subclass; mod namespace_create; mod native_call_method; +pub(crate) mod native_get; mod native_module; mod nm_namespace_hooks; pub(crate) use native_module::class_instance_has_member; diff --git a/crates/perry-runtime/src/object/native_get.rs b/crates/perry-runtime/src/object/native_get.rs new file mode 100644 index 0000000000..c674092e5b --- /dev/null +++ b/crates/perry-runtime/src/object/native_get.rs @@ -0,0 +1,171 @@ +//! Callback-free positive Get for ordinary data properties. +//! +//! Every pointer and key borrow below is confined to a lookup that cannot +//! allocate in the JS heap, collect, or invoke user code. A miss is NOT an +//! absent-property verdict: the caller must run the existing generic Get. + +use super::{shapes, ObjectHeader}; +use crate::value::JSValue; + +/// Read using an already materialized property key. String keys, including +/// inline strings, require neither ToPropertyKey nor another key allocation. +#[inline] +pub(crate) unsafe fn try_data_get(receiver: JSValue, key: JSValue) -> Option { + if !receiver.is_pointer() || !key.is_any_string() { + return None; + } + let mut scratch = [0; crate::value::SHORT_STRING_MAX_LEN]; + let bytes = crate::string::js_string_key_bytes(key, &mut scratch)?; + try_data_get_bytes(receiver, bytes) +} + +/// Raw-pointer sibling for the named-field ABI, which accepts both raw and +/// NaN-boxed object pointers. Reject other encodings before touching memory. +#[inline] +pub(crate) unsafe fn try_data_get_by_name( + object: *const ObjectHeader, + key: *const crate::StringHeader, +) -> Option { + if key.is_null() || !crate::value::addr_class::is_plausible_heap_addr(key as usize) { + return None; + } + if (*key).byte_len > (*key).capacity || (*key).byte_len >= 1 << 28 { + return None; + } + let bits = object as u64; + let receiver = match bits >> 48 { + 0 => JSValue::pointer(object as *mut u8), + 0x7FFD => JSValue::from_bits(bits), + _ => return None, + }; + let bytes = + std::slice::from_raw_parts(crate::string::string_data(key), (*key).byte_len as usize); + try_data_get_bytes(receiver, bytes) +} + +/// Borrowed-name API for native callers. The keys lookup is consult-only: +/// it never builds a shape index, materializes a key, or resolves a builtin. +#[inline] +pub(crate) unsafe fn try_data_get_bytes(receiver: JSValue, key: &[u8]) -> Option { + #[cfg(test)] + if FORCE_SLOW.with(|value| value.get()) { + return None; + } + if !receiver.is_pointer() || key.first() == Some(&b'#') || key == b"constructor" { + return None; + } + // Descriptor summaries use the same byte hash. Invalid UTF-8 stays on + // the WTF-8-aware slow path; no String is allocated for ordinary keys. + std::str::from_utf8(key).ok()?; + let accessor_bit = 1u64 << (super::key_bytes_hash(key.as_ptr(), key.len()) & 63); + let mut object = receiver.as_pointer::(); + let mut inherited = false; + for _ in 0..32 { + let addr = object as usize; + // Headerless Buffer/TypedArray/foreign handles must never be read as + // GcHeader-bearing objects. As in the existing own-field fast lane, + // require positive arena membership before inspecting the header. + if !crate::value::addr_class::is_plausible_heap_addr(addr) + || crate::arena::classify_heap_generation(addr) == crate::arena::HeapGeneration::Unknown + { + return None; + } + let header = crate::value::addr_class::try_read_gc_header(addr)?; + if header.obj_type != crate::gc::GC_TYPE_OBJECT + || header.gc_flags & crate::gc::GC_FLAG_FORWARDED != 0 + || header._reserved & crate::gc::OBJ_FLAG_TYPED_ARRAY_PROTO != 0 + { + return None; + } + let descriptor = shapes::object_shape_descriptor(object)?; + if descriptor.object_kind != shapes::ShapeObjectKind::Ordinary { + return None; + } + let class_id = (*object).class_id; + // Positive membership, rather than a blacklist of native class ids. + // Synthetic function/Object.create ids occupy the allocated prefix + // of this counter's range; reserved native ids are outside it. + let synthetic = class_id >= 0x8000_0000 + && class_id < super::NEXT_SYNTHETIC_CLASS_ID.load(std::sync::atomic::Ordering::Relaxed); + if class_id != 0 && !synthetic && !super::is_anon_shape_class_id(class_id) { + return None; + } + if crate::process::is_process_env_ptr(addr) + || super::is_arguments_object(object) + || (key == b"toJSON" && crate::perf_hooks::is_perf_entry_object(object)) + { + return None; + } + let meta = (*object).meta; + if !meta.is_null() && (*meta).elements != 0 { + return None; + } + // A data slot can remain underneath an accessor. A clear Bloom bit + // proves no accessor for THIS key; collisions conservatively decline. + // Same summary as descriptor_state::may_have_descriptor_entry; the + // receiver has already been classified, so do not classify it again. + if meta.is_null() || (*meta).accessor_key_bits & accessor_bit == 0 { + let keys = descriptor.keys as usize as *const crate::array::ArrayHeader; + if !keys.is_null() { + if let Some(slot) = + super::keys_find_slot_by_bytes(keys, descriptor.logical_key_count, key) + { + let value = super::field_get_set::object_field_at_with_live( + object, + slot, + descriptor.live_inline_slot_count, + ); + // Legacy inherited resolution treats undefined/null as + // misses at some class edges. Preserve that fallback, and + // the f64 entry's native-handle alias on undefined reads. + if (inherited && (value.is_undefined() || value.is_null())) + || (value.is_undefined() && super::native_this_alias::alias_active()) + { + return None; + } + return Some(value); + } + } + } else { + return None; + } + if !meta.is_null() && (*meta).prototype != 0 { + let prototype = JSValue::from_bits((*meta).prototype); + if !prototype.is_pointer() { + return None; + } + object = prototype.as_pointer(); + } else if synthetic { + // These are already-rooted per-class pointers, with no builtin + // name lookup or lazy construction. Declared prototype metadata + // has separate precedence and stays on the generic path. + if !super::class_decl_prototype_object(class_id).is_null() { + return None; + } + object = super::class_prototype_object(class_id); + } else { + // Default builtin prototypes may need initialization and can be + // replaced through globalThis. Do not resolve them under a borrow. + return None; + } + inherited = true; + } + None +} + +/// Spec Get for a canonical (pre-interned) string key and the same receiver. +/// The caller must keep both inputs live until entry. A fast hit is a leaf; +/// the existing Reflect implementation owns all handles on a slow read. +#[inline] +pub(crate) unsafe fn get_by_canonical_key(receiver: f64, key: *const crate::StringHeader) -> f64 { + let property_key = JSValue::from_bits(crate::value::nanbox_string_key(key).to_bits()); + crate::proxy::js_reflect_get(receiver, f64::from_bits(property_key.bits()), receiver) +} + +#[cfg(test)] +thread_local! { + static FORCE_SLOW: std::cell::Cell = const { std::cell::Cell::new(false) }; +} + +#[cfg(test)] +mod tests; diff --git a/crates/perry-runtime/src/object/native_get/tests.rs b/crates/perry-runtime/src/object/native_get/tests.rs new file mode 100644 index 0000000000..ddbbbc1bce --- /dev/null +++ b/crates/perry-runtime/src/object/native_get/tests.rs @@ -0,0 +1,272 @@ +use super::*; +use crate::object::{ + js_object_alloc, js_object_create, js_object_delete_field, js_object_freeze, + js_object_set_field_by_name, +}; +use std::sync::atomic::{AtomicUsize, Ordering}; + +fn key(name: &str) -> *mut crate::StringHeader { + crate::string::canonical_key(name.as_bytes()) +} + +fn boxed(object: *const ObjectHeader) -> f64 { + crate::value::js_nanbox_pointer(object as i64) +} + +fn object(name: &str, value: f64) -> *mut ObjectHeader { + let object = js_object_alloc(0, 0); + js_object_set_field_by_name(object, key(name), value); + object +} + +struct Slow(bool); +impl Slow { + fn enter() -> Self { + Self(FORCE_SLOW.with(|value| value.replace(true))) + } +} +impl Drop for Slow { + fn drop(&mut self) { + FORCE_SLOW.with(|value| value.set(self.0)); + } +} + +fn get(object: f64, name: &str) -> f64 { + unsafe { get_by_canonical_key(object, key(name)) } +} + +fn differential(object: f64, name: &str, expected: f64) { + assert_eq!(get(object, name).to_bits(), expected.to_bits()); + let _slow = Slow::enter(); + assert_eq!(get(object, name).to_bits(), expected.to_bits()); +} + +#[test] +fn own_data_is_served_and_matches_forced_slow_for_all_value_kinds() { + let _no_gc = crate::gc::GcSuppressScope::new(); + let child = object("child", 1.0); + let values = [ + 7.0, + -0.0, + f64::from_bits(crate::value::TAG_UNDEFINED), + f64::from_bits(crate::value::TAG_NULL), + f64::from_bits(crate::value::TAG_TRUE), + crate::value::js_nanbox_string(key("a heap string value") as i64), + boxed(child), + ]; + for value in values { + let object = object("value", value); + let fast = unsafe { try_data_get_by_name(object, key("value")) }; + assert_eq!(fast.map(|value| value.bits()), Some(value.to_bits())); + differential(boxed(object), "value", value); + } +} + +#[test] +fn prototype_data_mutation_shadow_delete_and_freeze_match_forced_slow() { + let _no_gc = crate::gc::GcSuppressScope::new(); + let prototype = object("value", 7.0); + let middle = js_object_create(boxed(prototype)); + let child = js_object_create(middle); + let child_ptr = crate::value::js_nanbox_get_pointer(child) as *mut ObjectHeader; + assert_eq!( + unsafe { try_data_get_by_name(child_ptr, key("value")) } + .unwrap() + .bits(), + 7.0f64.to_bits() + ); + differential(child, "value", 7.0); + js_object_set_field_by_name(prototype, key("value"), 11.0); + differential(child, "value", 11.0); + js_object_set_field_by_name(child_ptr, key("value"), 13.0); + differential(child, "value", 13.0); + assert_eq!(js_object_delete_field(child_ptr, key("value")), 1); + differential(child, "value", 11.0); + js_object_freeze(boxed(prototype)); + assert!(unsafe { try_data_get_by_name(child_ptr, key("value")) }.is_some()); + differential(child, "value", 11.0); + let replacement = object("value", 17.0); + crate::object::prototype_chain::object_set_user_prototype( + child_ptr as usize, + boxed(replacement).to_bits(), + ); + differential(child, "value", 17.0); +} + +static GETTER_CALLS: AtomicUsize = AtomicUsize::new(0); + +extern "C" fn getter(_closure: *const crate::closure::ClosureHeader) -> f64 { + GETTER_CALLS.fetch_add(1, Ordering::Relaxed); + 47.0 +} + +fn install_getter(object: *mut ObjectHeader, name: &str, has_getter: bool) { + let closure = crate::closure::js_closure_alloc(getter as *const u8, 0); + crate::object::descriptor_state::set_accessor_descriptor( + object as usize, + name.to_string(), + crate::object::descriptor_state::AccessorDescriptor { + get: if has_getter { + crate::value::js_nanbox_pointer(closure as i64).to_bits() + } else { + 0 + }, + set: 0, + }, + ); +} + +#[test] +fn accessor_bloom_guard_preserves_own_and_inherited_getter_calls() { + let _no_gc = crate::gc::GcSuppressScope::new(); + GETTER_CALLS.store(0, Ordering::Relaxed); + let prototype = object("value", 1.0); + install_getter(prototype, "value", true); + let child = js_object_create(boxed(prototype)); + for receiver in [boxed(prototype), child] { + assert!( + unsafe { try_data_get_bytes(JSValue::from_bits(receiver.to_bits()), b"value") } + .is_none() + ); + differential(receiver, "value", 47.0); + } + assert_eq!( + GETTER_CALLS.load(Ordering::Relaxed), + 4, + "one getter invocation per Get" + ); + let child_ptr = crate::value::js_nanbox_get_pointer(child) as *mut ObjectHeader; + js_object_set_field_by_name(child_ptr, key("own"), 53.0); + differential(child, "own", 53.0); + assert_eq!(GETTER_CALLS.load(Ordering::Relaxed), 4); + install_getter(prototype, "value", false); + differential( + boxed(prototype), + "value", + f64::from_bits(crate::value::TAG_UNDEFINED), + ); +} + +#[test] +fn unsupported_receivers_and_private_names_decline_and_preserve_results() { + let _no_gc = crate::gc::GcSuppressScope::new(); + let target = object("value", 59.0); + let handler = js_object_alloc(0, 0); + let proxy = crate::proxy::js_proxy_new(boxed(target), boxed(handler)); + let array = crate::array::js_array_alloc(4); + let array_value = crate::value::js_nanbox_pointer(array as i64); + js_object_set_field_by_name(array as *mut ObjectHeader, key("value"), 59.0); + let closure = crate::closure::js_closure_alloc(getter as *const u8, 0); + js_object_set_field_by_name(closure as *mut ObjectHeader, key("value"), 59.0); + for receiver in [ + proxy, + array_value, + crate::value::js_nanbox_pointer(closure as i64), + ] { + assert!( + unsafe { try_data_get_bytes(JSValue::from_bits(receiver.to_bits()), b"value") } + .is_none() + ); + differential(receiver, "value", 59.0); + } + let private = object("#value", 61.0); + assert!(unsafe { try_data_get_by_name(private, key("#value")) }.is_none()); + differential(boxed(private), "#value", 61.0); + assert!(unsafe { try_data_get_bytes(JSValue::number(3.5), b"value") }.is_none()); +} + +#[cfg(feature = "regex-engine")] +#[test] +fn regexp_expandos_and_accessors_remain_on_the_exotic_path() { + let _no_gc = crate::gc::GcSuppressScope::new(); + let regexp = crate::regex::js_regexp_new(key("x"), key("g")); + let regexp_obj = regexp as *mut ObjectHeader; + js_object_set_field_by_name(regexp_obj, key("value"), 67.0); + assert!(unsafe { try_data_get_by_name(regexp_obj, key("value")) }.is_none()); + differential(boxed(regexp_obj), "value", 67.0); + GETTER_CALLS.store(0, Ordering::Relaxed); + install_getter(regexp_obj, "value", true); + differential(boxed(regexp_obj), "value", 47.0); + assert_eq!(GETTER_CALLS.load(Ordering::Relaxed), 2); +} + +#[test] +fn borrowed_long_and_inline_keys_match_without_materializing_for_the_fast_read() { + let _no_gc = crate::gc::GcSuppressScope::new(); + for name in [ + "x", + "a property name longer than the inline copy buffer; keep borrowing through this lookup", + ] { + let object = object(name, 71.0); + assert_eq!( + unsafe { + try_data_get_bytes(JSValue::from_bits(boxed(object).to_bits()), name.as_bytes()) + } + .unwrap() + .bits(), + 71.0f64.to_bits() + ); + differential(boxed(object), name, 71.0); + } +} + +#[test] +fn wide_spilled_and_deleted_keys_match_forced_slow() { + let _no_gc = crate::gc::GcSuppressScope::new(); + let object = js_object_alloc(0, 0); + for i in 0..100 { + js_object_set_field_by_name(object, key(&format!("field{i}")), i as f64); + } + for i in [0, 4, 50, 99] { + let name = format!("field{i}"); + assert!(unsafe { try_data_get_by_name(object, key(&name)) }.is_some()); + differential(boxed(object), &name, i as f64); + assert_eq!(js_object_delete_field(object, key(&name)), 1); + assert!(unsafe { try_data_get_by_name(object, key(&name)) }.is_none()); + differential( + boxed(object), + &name, + f64::from_bits(crate::value::TAG_UNDEFINED), + ); + js_object_set_field_by_name(object, key(&name), 101.0); + differential(boxed(object), &name, 101.0); + } +} + +#[test] +fn class_statics_buffers_and_mapped_arguments_use_the_slow_path() { + let _no_gc = crate::gc::GcSuppressScope::new(); + unsafe { + let class_id = 0x0065_5234; + crate::object::js_register_class_id(class_id); + crate::object::js_class_register_static_field( + class_id, + b"value".as_ptr(), + 5, + 73.0, + std::ptr::null_mut(), + ); + let class_value = f64::from_bits(crate::value::INT32_TAG | u64::from(class_id)); + assert!(try_data_get_bytes(JSValue::from_bits(class_value.to_bits()), b"value").is_none()); + differential(class_value, "value", 73.0); + + let buffer = crate::buffer::js_buffer_alloc(8, 11); + let buffer_value = crate::value::js_nanbox_pointer(buffer as i64); + assert!( + try_data_get_bytes(JSValue::from_bits(buffer_value.to_bits()), b"length").is_none() + ); + differential(buffer_value, "length", 8.0); + + let args = crate::array::js_array_alloc(1); + crate::array::js_array_push(args, JSValue::number(1.0)); + let arguments = crate::object::js_arguments_object_alloc( + crate::value::js_nanbox_pointer(args as i64), + f64::from_bits(crate::value::TAG_UNDEFINED), + 0, + ); + let cell = crate::r#box::js_box_alloc(79.0); + crate::object::js_arguments_object_map_index(arguments, 0, cell); + assert!(try_data_get_by_name(arguments, key("0")).is_none()); + differential(boxed(arguments), "0", 79.0); + } +} diff --git a/crates/perry-runtime/src/proxy/reflect.rs b/crates/perry-runtime/src/proxy/reflect.rs index f90ce9b89d..646e934456 100644 --- a/crates/perry-runtime/src/proxy/reflect.rs +++ b/crates/perry-runtime/src/proxy/reflect.rs @@ -17,6 +17,17 @@ use super::{ /// as "use target". #[no_mangle] pub extern "C" fn js_reflect_get(target: f64, key: f64, receiver: f64) -> f64 { + // A data read has no observable receiver binding or key conversion. The + // classifier accepts only already-string keys and proves every traversed + // object ordinary before returning, so no handles are needed on a hit. + if let Some(value) = unsafe { + crate::object::native_get::try_data_get( + crate::value::JSValue::from_bits(target.to_bits()), + crate::value::JSValue::from_bits(key.to_bits()), + ) + } { + return f64::from_bits(value.bits()); + } if !reflect_value_is_object(target) { return reflect_non_object_typeerror("get"); } diff --git a/crates/perry-runtime/src/value/dynamic_object.rs b/crates/perry-runtime/src/value/dynamic_object.rs index 9b3b916ec0..ece7502fcb 100644 --- a/crates/perry-runtime/src/value/dynamic_object.rs +++ b/crates/perry-runtime/src/value/dynamic_object.rs @@ -311,6 +311,15 @@ pub unsafe extern "C" fn js_dynamic_object_get_property( property_name_ptr: *const i8, property_name_len: usize, ) -> f64 { + if !property_name_ptr.is_null() && property_name_len != 0 { + let name = std::slice::from_raw_parts(property_name_ptr as *const u8, property_name_len); + if let Some(value) = crate::object::native_get::try_data_get_bytes( + JSValue::from_bits(obj_value.to_bits()), + name, + ) { + return f64::from_bits(value.bits()); + } + } // A revocable Proxy value reaching this generic dynamic getter must go // through the Proxy's `get` trap. Proxy ids live at the TOP of the handle // band ([PROXY_ID_BAND_START, HANDLE_BAND_MAX)), so without this branch the diff --git a/scripts/gc_runtime_root_holders.json b/scripts/gc_runtime_root_holders.json index 533ae24984..ea85da096b 100644 --- a/scripts/gc_runtime_root_holders.json +++ b/scripts/gc_runtime_root_holders.json @@ -740,6 +740,12 @@ "verdict": "not_a_gc_pointer", "why": "#9754 remembered set: `YoungLog` = two `Vec` (live + recycled spare) holding transition-cache SLOT INDICES whose `key_ptr`/`next_keys` a minor may act on. Indices, not addresses — a `u32` cannot hold a 48-bit pointer. The pointer-bearing entries they index are visited by `scan_transition_cache_roots_mut`, which is registered." }, + { + "file": "crates/perry-runtime/src/object/native_get.rs", + "name": "FORCE_SLOW", + "verdict": "test_only", + "why": "#[cfg(test)] Cell selects the unchanged slow Get for differential tests. Holds only a boolean, never a GC address or JSValue, and is absent from shipped binaries." + }, { "file": "crates/perry-runtime/src/object/native_module.rs", "name": "TEST_BOUND_METHOD_MOVE", diff --git a/test-files/test_gap_native_property_get.ts b/test-files/test_gap_native_property_get.ts new file mode 100644 index 0000000000..ef60b450bf --- /dev/null +++ b/test-files/test_gap_native_property_get.ts @@ -0,0 +1,110 @@ +// Spec Get observability across ordinary data reads and fallback receivers. +function check(actual: any, expected: any, label: string) { + if (!Object.is(actual, expected)) throw new Error(label); + console.log(label, true); +} + +const proto: any = { value: 7, absent: 9 }; +const object: any = Object.create(proto); +check(Reflect.get(object, "value"), 7, "inherited data"); +object.value = 11; +check(Reflect.get(object, "value"), 11, "shadowed data"); +delete object.value; +check(Reflect.get(object, "value"), 7, "deleted shadow"); +object.absent = undefined; +check(Reflect.get(object, "absent"), undefined, "own undefined"); +Object.freeze(proto); +check(Reflect.get(object, "value"), 7, "frozen prototype"); +Object.freeze(object); +check(Reflect.get(object, "absent"), undefined, "frozen own data"); + +let calls = 0; +const owner: any = { value: 1, marker: 13 }; +Object.defineProperty(owner, "value", { + configurable: true, + get() { calls++; return this.marker; }, +}); +check(Reflect.get(owner, "value"), 13, "own getter result"); +check(calls, 1, "own getter once"); +check(Reflect.get(owner, "value", { marker: 17 }), 17, "distinct receiver"); +check(calls, 2, "distinct getter once"); +const child: any = Object.create(owner); +child.marker = 19; +check(Reflect.get(child, "value"), 19, "inherited getter receiver"); +check(calls, 3, "inherited getter once"); +Object.defineProperty(child, "value", { value: 23 }); +check(Reflect.get(child, "value"), 23, "data shadows getter"); +check(calls, 3, "shadow suppresses getter"); +Object.defineProperty(owner, "setterOnly", { set(value) {} }); +check(Reflect.get(owner, "setterOnly"), undefined, "setter only"); + +let traps = 0; +const proxy: any = new Proxy({ value: 29 }, { + get(target, key, receiver) { + traps++; + return Reflect.get(target, key, receiver); + }, +}); +check(Reflect.get(proxy, "value"), 29, "proxy result"); +check(traps, 1, "proxy once"); +check(Reflect.get(Object.create(proxy), "value"), 29, "proxy prototype"); +check(traps, 2, "prototype proxy once"); +const revoked = Proxy.revocable({}, {}); +revoked.revoke(); +let threw = false; +try { Reflect.get(revoked.proxy, "value"); } catch { threw = true; } +check(threw, true, "revoked proxy throws"); + +let order = ""; +const key: any = { [Symbol.toPrimitive]() { order += "key;"; return "value"; } }; +const observed: any = { get value() { order += "get;"; return 31; } }; +check(Reflect.get(observed, key), 31, "coerced key result"); +check(order, "key;get;", "coercion then getter once"); +const symbol = Symbol("value"); +check(Reflect.get({ [symbol]: 37 }, symbol), 37, "symbol key"); +check(Reflect.get({ "#value": 41 }, "#value"), 41, "private-looking string"); +const longKey = "a property name longer than the inline owned string copy capacity, for borrowed key coverage"; +check(Reflect.get({ [longKey]: 43 }, longKey), 43, "long key"); + +class Base { + static value = 47; + #value = 53; + read() { return this.#value; } +} +class Derived extends Base {} +check(Reflect.get(Derived, "value"), 47, "inherited class static"); +check(new Derived().read(), 53, "private field"); +const expression: any = class { static value = 59; }; +check(Reflect.get(expression, "value"), 59, "class expression static"); +const fn: any = () => 0; +fn.value = 61; +check(Reflect.get(fn, "value"), 61, "closure expando"); +const array: any = [1, 2]; +array.value = 67; +check(Reflect.get(array, "value"), 67, "array expando"); +check(Reflect.get(array, "length"), 2, "array length"); +check(Reflect.get(new Uint8Array([71]), "0"), 71, "typed array index"); +check(Reflect.get(new Date(0), "constructor"), Date, "date constructor"); +const re: any = /x/g; +re.lastIndex = 3; +re.value = 73; +check(Reflect.get(re, "value"), 73, "regexp expando"); +check(Reflect.get(re, "lastIndex"), 3, "regexp lastIndex"); +Object.defineProperty(re, "value", { get() { calls++; return 79; } }); +check(Reflect.get(re, "value"), 79, "regexp accessor"); +check(calls, 4, "regexp getter once"); +let jsonGets = 0; +let jsonCalls = 0; +const jsonPrototype = { + get toJSON() { + jsonGets++; + return function () { jsonCalls++; return this.answer; }; + } +}; +const jsonChild: any = Object.create(jsonPrototype); +jsonChild.answer = 83; +check(JSON.stringify(jsonChild), "83", "inherited toJSON getter receiver"); +check(jsonGets, 1, "toJSON getter once"); +check(jsonCalls, 1, "toJSON method once"); +check(JSON.stringify({ toJSON: 0, value: 89 }), '{"toJSON":0,"value":89}', "noncallable toJSON"); +console.log("native property Get parity passed");