)]}'
{
  "commit": "6cd8fccc90dc3c30dff0f71175648b4417246212",
  "tree": "0877a4128a4cacf44e74c30e5e4b4d63cfe556a9",
  "parents": [
    "1fac60f87be3639918f06a1b8e23908b1621b1a1"
  ],
  "author": {
    "name": "luigi-rosso",
    "email": "hello@rive.app",
    "time": "Tue Sep 01 18:15:13 2026 +0000"
  },
  "committer": {
    "name": "luigi-rosso",
    "email": "hello@rive.app",
    "time": "Tue Sep 01 18:15:13 2026 +0000"
  },
  "message": "feat(scripting): frame generational collector for wasm scripts (#13869) 0613f5b262\n* add rive --bench for headless frame timing and a rasc runtime env override\n\n* map the guest sampler compare sentinel to none instead of casting it raw\n\n* stage tier ladder wamrc input before the in-place module load corrupts it\n\n* compile ladder artifacts with sw bounds checks so non guard page runtimes can run them\n\n* carry the execution tier through the shared module cache and let bench wait for the o3 swap\n\n* add an allocation churn kernel to the wamr bench\n\n* recurring leak warnings with a time-to-trap estimate, arena modules watched too\n\n* allocation-free Mat4 Into builders and multiply, reusable render pass wrapper, cached canvas view\n\n* deliver decode completions at the frame boundary and re-take the mark around them and resize\n\n* build the canvas view wrapper eagerly so it cannot land above a frame arena mark\n\n* rive.yaml wasmRuntime choice and finalizer-based handle release under the collecting runtime\n\n* pregrow aot memory to the declared ceiling and cap ladder artifacts at opt level 1\n\n* let tlsf claim pregrown memory before growing so aot pregrow does not read as oom\n\n* per runtime leak wording via a collected marker export and trap context after warnings\n\n* hw bounds artifact species on the tier ladder for guard page builds\n\n* cap hw artifacts at opt level 0, the miscompile bites earlier without inline checks\n\n* bind ASC_RUNTIME so runtime-gated std branches stop compiling as stub\n\n* register the handle finalizer through the runtime, pin its closure, zero renew slack\n\n* finalizer, soak and aot differential coverage plus a no-ceiling aot notice\n\n* frame collector milestone 0: checked arena runtime, design doc and per-visitor generation fix\n\n* frame collector milestone 1: cheney scavenger, moving visitors, remembered set, exact handle reap\n\n* record frame collector m1 status in the design doc\n\n* pass multivalue through bake postOptimize so value struct modules survive wasm-opt\n\n* add RIVE_RASC_UNSAFE bake hatch and inert arena hooks on collecting runtimes\n\n* record box2d and fields comparison results in the frame gc design doc\n\n* frame collector milestone 2: copying major, large objects born old, pin list, debug heap verifier\n\n* spill start function managed locals to the shadow stack so mid-init itcms steps see them\n\n* count majors for telemetry and pin the threshold trigger with a fixture\n\n* design doc: record milestone 2 and the copying major decision\n\n* android armv7 wamr lane and a headless on-device gc bench tool\n\n* calibrate the major threshold at the first boundary instead of collecting init retention\n\n* declare THUMBV7 to the aot loader and print fault addresses in the device bench\n\n* design doc: console validation results and the arm32 aot lane status\n\n* fix wamrc strict fp miscompile: strictfp on generated functions, codegen cap below ir opt, ladder lifts sw to optimized ir\n\n* frame collector milestone 3: sliced major marks and sweeps across boundaries for big heaps\n\n* design doc: record milestone 3\n\n* address review: reentrant decode cancel, bump-based leak watch under pregrow, pin chunk refcounts, stale view wrapper on resize, windows bench build\n\n* check in the churn soak project used for on-device collector validation\n\n* address review round two: carve capacity includes the block gap, unpin marks during majors, gate the bench target, hw species in the ladder test\n\n* address review round three: reject bad bench counts, version the artifact cache, cover late visitor stubs, clear remembered bits at the copying major\n\n* pin the leak warning firing, unpin-during-sweep, and stale remembered bit with tests\n\n* match the pin contract: trap on double pin and foreign unpin\n\n* twin the function env visitor and cover closure survival under the frame collector\n\n* export the major tuning knobs from frame bakes and stop callModule folding traps and missing exports into zero\n\n* consolidate on the frame collector: delete tcms and the arena lane, deprecate incremental, default wasmRuntime to frame\n\n* remove the incremental runtime: itcms, tlsf, and the shadow stack live on archive/rasc-gc-experiments with tcms and the arena\n\n* sweep retained chunks in sliced majors, relocate DataView dataStart, atomic ladder cache writes, review fixes\n\n* gc bench covers every module vm and the tier bench fails when the O3 swap never lands\n\n* objects born in the old region during a sweep only carry a mark while the sweep still covers their chunk\n\n* switch the sweep to the retained list even when the budget dies on the last old chunk\n\n* reject non-positive --bench frame counts\n\n* renumber our wamrc patches past master\u0027s 0013 windows patch\n\nCo-authored-by: Luigi Rosso \u003cluigi-rosso@users.noreply.github.com\u003e\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "14789ee5f8fd3249e078a18897d471c7dfa41900",
      "old_mode": 33188,
      "old_path": ".rive_head",
      "new_id": "17d18e726493d15d6e453318ff98eeb4ab7bcb36",
      "new_mode": 33188,
      "new_path": ".rive_head"
    },
    {
      "type": "modify",
      "old_id": "7c625679f7011478d259a93f4c2f21b6207a8700",
      "old_mode": 33188,
      "old_path": "include/rive/wasm/module_tier_ladder.hpp",
      "new_id": "d353edbb31c2720b2a51bbd261ec0b70c551b50c",
      "new_mode": 33188,
      "new_path": "include/rive/wasm/module_tier_ladder.hpp"
    },
    {
      "type": "modify",
      "old_id": "58504fb198289ccb7e2538781bfb7aea7ec9a4dc",
      "old_mode": 33188,
      "old_path": "include/rive/wasm/wasm_scripting_vm.hpp",
      "new_id": "6ef7b54c2a4ec469de909034add24c85d39d568a",
      "new_mode": 33188,
      "new_path": "include/rive/wasm/wasm_scripting_vm.hpp"
    },
    {
      "type": "modify",
      "old_id": "ae2e020ccd8144038307e507bb25d542a1afdb8d",
      "old_mode": 33188,
      "old_path": "scripting/premake5_wamr.lua",
      "new_id": "8aa357feeb88dfb090878bd01629e9237befb406",
      "new_mode": 33188,
      "new_path": "scripting/premake5_wamr.lua"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1548a4b0d8dcafe99675d2210415e710ea65df6d",
      "new_mode": 33188,
      "new_path": "scripting/wamr_patches/0014-strictfp-on-generated-functions.patch"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "89da6e018c022f9d8551a3a80382661e1a18c60e",
      "new_mode": 33188,
      "new_path": "scripting/wamr_patches/0015-codegen-opt-level-cap.patch"
    },
    {
      "type": "modify",
      "old_id": "da0b28c84eb9e6457048d702ac8af97434162feb",
      "old_mode": 33188,
      "old_path": "src/wasm/module_tier_ladder.cpp",
      "new_id": "5318d0f0aec0cad0b424a832ee0da186f41dc9fc",
      "new_mode": 33188,
      "new_path": "src/wasm/module_tier_ladder.cpp"
    },
    {
      "type": "modify",
      "old_id": "4d657565d179064d8e8381977da3639b2c8fa296",
      "old_mode": 33188,
      "old_path": "src/wasm/wasm_scripting_vm.cpp",
      "new_id": "171a917a371b93000dda65bf859ac5f958937204",
      "new_mode": 33188,
      "new_path": "src/wasm/wasm_scripting_vm.cpp"
    },
    {
      "type": "modify",
      "old_id": "0b96e41e33f2be007d7a0fa42598cb4222b1e35f",
      "old_mode": 33188,
      "old_path": "tests/premake5.lua",
      "new_id": "c20f6d577d7df70bee98957b3fbac8434ab97025",
      "new_mode": 33188,
      "new_path": "tests/premake5.lua"
    },
    {
      "type": "modify",
      "old_id": "e2f8a014f5df79e559a9a747f03abc0097450b01",
      "old_mode": 33188,
      "old_path": "tests/unit_tests/runtime/module_tier_ladder_test.cpp",
      "new_id": "807aed1ff0d286832376c3f7ddd66c42ea7992d3",
      "new_mode": 33188,
      "new_path": "tests/unit_tests/runtime/module_tier_ladder_test.cpp"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "466499b718aa4176343fed920a92d60dc45aa825",
      "new_mode": 33188,
      "new_path": "tests/wasm_gc_bench/wasm_gc_bench.cpp"
    }
  ]
}
