SnowLuma v2.4.2 source snapshot
Dev Build / cleanup (push) Waiting to run
Dev Build / typecheck (push) Waiting to run
Publish MCP to npm / Build, test, and publish MCP (push) Waiting to run
Publish SDK to npm / Build, test, and publish SDK (push) Waiting to run
Sync action catalog to docs / sync (push) Waiting to run
Publish UI to npm / Build and publish UI (push) Waiting to run
Build and Release / preflight (push) Waiting to run

This commit is contained in:
TanTan committed 2026-11-13 09:02:00 +08:00
commit fa9c73363d
1367 files changed
+355735

No files matched your search

+78
View File
@@ -0,0 +1,78 @@
// Isolated retained-heap measurements; no QQ session, disk logs or live requests.
// node --expose-gc tools/bench-common-memory.mjs logs|colored-logs|cache [source-directory]
// The optional directory contains log-sanitize.ts and single-flight-cache.ts,
// allowing the same workload to run against sources from a baseline revision.
import { performance } from 'node:perf_hooks';
import { setImmediate, setTimeout } from 'node:timers/promises';
import { resolve } from 'node:path';
import { pathToFileURL } from 'node:url';
if (!global.gc) {
throw new Error('Run with node --expose-gc');
}
const mode = process.argv[2] ?? 'logs';
const source = (name) =>
process.argv[3]
? pathToFileURL(resolve(process.argv[3], name))
: new URL(`../packages/common/src/${name}`, import.meta.url);
async function heapUsed() {
await setImmediate();
global.gc();
global.gc();
return process.memoryUsage().heapUsed;
}
const mib = (bytes) => Number((bytes / 1024 / 1024).toFixed(2));
if (mode === 'logs' || mode === 'colored-logs') {
const { sanitizeLogLine } = await import(source('log-sanitize.ts'));
const before = await heapUsed();
const records = [];
const started = performance.now();
for (let i = 0; i < 1000; i += 1) {
const body = `${i}: ${'0123456789abcdef'.repeat(512)}`;
const line = mode === 'colored-logs' ? `\x1b[32m${body}\x1b[0m` : body;
records.push(sanitizeLogLine(line));
}
const elapsedMs = Number((performance.now() - started).toFixed(1));
const retainedHeapMiB = mib((await heapUsed()) - before);
console.log(JSON.stringify({ mode, records: records.length, retainedHeapMiB, elapsedMs }));
} else if (mode === 'cache') {
const { createSingleFlightCache } = await import(source('single-flight-cache.ts'));
const ttlMs = 2000;
const cache = createSingleFlightCache({
ttlMs,
load: async (key) =>
Array.from({ length: 1000 }, (_, i) => ({
uin: key * 1000 + i,
nickname: `member-${key}-${i}`,
})),
});
const before = await heapUsed();
for (let key = 0; key < 500; key += 1) {
await cache.get(key);
}
const populatedHeapMiB = mib((await heapUsed()) - before);
await setTimeout(ttlMs + 100);
const idleHeapMiB = mib((await heapUsed()) - before);
// Keep the cache itself live through both samples, as it is in ContactsApi.
cache.clear();
console.log(
JSON.stringify({
mode,
rosters: 500,
membersPerRoster: 1000,
ttlMs,
populatedHeapMiB,
idleHeapMiB,
}),
);
} else {
throw new Error(`Unknown workload: ${mode}`);
}