Files
openclaw/test/scripts/fixtures/gateway-bench-cpu-usage.mjs
Vincent Koc 96cb48b10e feat: calibrate Gateway plugin resources through retirement (#155792)
* feat: calibrate Gateway plugin resources through retirement

* fix(test): reject forced descendant cleanup in resource proof
2026-09-23 00:08:15 +08:00

65 lines
1.9 KiB
JavaScript

import { once } from "node:events";
import { Session } from "node:inspector/promises";
import { Worker } from "node:worker_threads";
Session.prototype.connect = () => {
throw new Error("CPU accounting must not activate the inspector");
};
await import("../../../scripts/lib/gateway-bench-profile-preload.ts");
// Keep the fixture available for its final sample after its last Worker exits.
process.channel.ref();
function fixedCpuWork() {
let checksum = 1;
for (let index = 0; index < 25_000_000; index++) {
checksum = Math.imul(checksum ^ index, 16_777_619);
}
return checksum;
}
for (let index = 0; index < 8; index++) {
fixedCpuWork();
}
const worker = new Worker(
`const { parentPort } = require("node:worker_threads");
const fixedCpuWork = ${fixedCpuWork.toString()};
parentPort.once("message", () => {
const before = process.threadCpuUsage();
const checksum = fixedCpuWork();
const cpu = process.threadCpuUsage(before);
parentPort.postMessage({ checksum, cpuMicros: cpu.user + cpu.system });
parentPort.close();
});
parentPort.postMessage("ready");`,
{ eval: true, execArgv: [] },
);
await once(worker, "message");
let timer;
process.on("message", async (message) => {
if (message.run === "timer-start" || message.run === "timer-stop") {
if (message.run === "timer-start") timer = setInterval(() => {}, 60_000);
else clearInterval(timer);
process.send({ timerChanged: true });
return;
}
if (message.run === "main") {
process.send({ completed: 1, checksum: fixedCpuWork() });
return;
}
if (message.run !== "worker") {
return;
}
const completed = once(worker, "message");
const exited = once(worker, "exit");
worker.postMessage("run");
const [result] = await completed;
await exited;
process.send({
completed: 1,
workerRetired: true,
checksum: result.checksum,
workerCpuMicros: result.cpuMicros,
});
});
process.send({ ready: true });