From 90444ce93a1b3bf995ee7801ec247b71ee67e828 Mon Sep 17 00:00:00 2001 From: Jack Lukic Date: Fri, 5 Jun 2026 13:56:06 -0400 Subject: [PATCH] Bench: Add aggressive last-resort GC krausest update probe --- .../bench/tachometer/bench-krausest.js | 30 +++++++++++++++++++ .../tachometer/tachometer-ci-krausest.json | 2 ++ 2 files changed, 32 insertions(+) diff --git a/packages/component/bench/tachometer/bench-krausest.js b/packages/component/bench/tachometer/bench-krausest.js index b25f35312..8fdaa9acc 100644 --- a/packages/component/bench/tachometer/bench-krausest.js +++ b/packages/component/bench/tachometer/bench-krausest.js @@ -334,6 +334,36 @@ for (let i = 0; i < 50; i++) { performance.measure('update-gc-50', startMark('update-gc-50')); destroy(); +/******************************* + Update (aggressive GC) + update-10th workload after krausest's aggressive last-resort major GC. + Pairs against update-gc-50 (plain gc): if this clears the regression + and plain gc does not, create-10k's old-space sizing is reclaimable by + a between-op GC hook. If a residual survives, only a fresh realm + (separate page per op) resets it. +*******************************/ + +const el5c = await mount(); +el5c.component.run(1000); +await flush(); +if (globalThis.gc) { + try { + globalThis.gc({ type: 'major', execution: 'sync', flavor: 'last-resort' }); + } + catch { + globalThis.gc(); + } + await flush(); +} +// purpose: update-10th workload after an aggressive last-resort major GC (krausest's incantation). Pairs with update-gc-50 to test whether aggressive GC reclaims create-10k old-space sizing that a plain gc leaves. +performance.mark(startMark('update-gc-aggressive-50')); +for (let i = 0; i < 50; i++) { + el5c.component.update(); + flushWork(); +} +performance.measure('update-gc-aggressive-50', startMark('update-gc-aggressive-50')); +destroy(); + /******************************* Select (krausest 05_select) diff --git a/packages/component/bench/tachometer/tachometer-ci-krausest.json b/packages/component/bench/tachometer/tachometer-ci-krausest.json index 98cef950d..bd7e9acb0 100644 --- a/packages/component/bench/tachometer/tachometer-ci-krausest.json +++ b/packages/component/bench/tachometer/tachometer-ci-krausest.json @@ -17,6 +17,7 @@ { "mode": "performance", "entryName": "update-10th-50" }, { "mode": "performance", "entryName": "update-isolated-50" }, { "mode": "performance", "entryName": "update-gc-50" }, + { "mode": "performance", "entryName": "update-gc-aggressive-50" }, { "mode": "performance", "entryName": "select-40" }, { "mode": "performance", "entryName": "swap-rows-20" }, { "mode": "performance", "entryName": "remove-row-front-20" }, @@ -37,6 +38,7 @@ { "mode": "performance", "entryName": "update-10th-50" }, { "mode": "performance", "entryName": "update-isolated-50" }, { "mode": "performance", "entryName": "update-gc-50" }, + { "mode": "performance", "entryName": "update-gc-aggressive-50" }, { "mode": "performance", "entryName": "select-40" }, { "mode": "performance", "entryName": "swap-rows-20" }, { "mode": "performance", "entryName": "remove-row-front-20" },