Compare commits

...

3 Commits

Author SHA1 Message Date
Jarred Sumner
c49bce6c53 Merge branch 'main' into jarred/phys_foorpting 2025-09-02 23:00:58 -07:00
Jarred Sumner
836386375c Update require-cache.test.ts 2025-09-02 15:02:15 -07:00
Jarred Sumner
f5fd0977f9 a 2025-09-02 14:51:10 -07:00
2 changed files with 46 additions and 23 deletions

View File

@@ -3095,22 +3095,15 @@ JSC_DEFINE_HOST_FUNCTION(Process_functionCpuUsage, (JSC::JSGlobalObject * global
extern "C" int getRSS(size_t* rss)
{
#if defined(__APPLE__)
mach_msg_type_number_t count;
task_basic_info_data_t info;
kern_return_t err;
count = TASK_BASIC_INFO_COUNT;
err = task_info(mach_task_self(),
TASK_BASIC_INFO,
reinterpret_cast<task_info_t>(&info),
task_vm_info_data_t info;
mach_msg_type_number_t count = TASK_VM_INFO_COUNT;
kern_return_t kr = task_info(mach_task_self(),
TASK_VM_INFO,
(task_info_t)&info,
&count);
if (err == KERN_SUCCESS) {
*rss = (size_t)info.resident_size;
return 0;
}
return -1;
if (kr != KERN_SUCCESS) return -1;
*rss = (size_t)info.phys_footprint; // best “real memory” metric on macOS
return 0;
#elif defined(__linux__)
// Taken from libuv.
char buf[1024];

View File

@@ -62,10 +62,15 @@ describe.skipIf(isBroken && isIntelMacOS)("files transpiled and loaded don't lea
}
gc(true);
const baseline = process.memoryUsage.rss();
let prev = null;
for (let i = 0; i < 500; i++) {
require(path);
bust(path);
console.log("RSS", (process.memoryUsage.rss() / 1024 / 1024) | 0, "MB");
const current = process.memoryUsage.rss();
if (prev !== current) {
console.log("RSS", (current / 1024 / 1024) | 0, "MB");
}
prev = current;
}
gc(true);
const rss = process.memoryUsage.rss();
@@ -115,10 +120,15 @@ describe.skipIf(isBroken && isIntelMacOS)("files transpiled and loaded don't lea
}
gc(true);
const baseline = process.memoryUsage.rss();
let prev = null;
for (let i = 0; i < 400; i++) {
await import(path);
bust(path);
console.log("RSS", (process.memoryUsage.rss() / 1024 / 1024) | 0, "MB");
const current = process.memoryUsage.rss();
if (prev !== current) {
console.log("RSS", (current / 1024 / 1024) | 0, "MB");
}
prev = current;
}
gc(true);
const rss = process.memoryUsage.rss();
@@ -165,10 +175,15 @@ describe.skipIf(isBroken && isIntelMacOS)("files transpiled and loaded don't lea
}
gc(true);
const baseline = process.memoryUsage.rss();
let prev = null;
for (let i = 0; i < 250; i++) {
await import(path);
bust(path);
console.log("RSS", (process.memoryUsage.rss() / 1024 / 1024) | 0, "MB");
const current = process.memoryUsage.rss();
if (prev !== current) {
console.log("RSS", (current / 1024 / 1024) | 0, "MB");
}
prev = current;
}
gc(true);
const rss = process.memoryUsage.rss();
@@ -195,7 +210,7 @@ describe.skipIf(isBroken && isIntelMacOS)("files transpiled and loaded don't lea
expect(exitCode).toBe(0);
}, 60000);
test("via require() with a lot of function calls", () => {
test("via require() with a lot of function calls", async () => {
let text = "function i() { return 1; }\n";
for (let i = 0; i < 20000; i++) {
text += `i();\n`;
@@ -224,16 +239,23 @@ describe.skipIf(isBroken && isIntelMacOS)("files transpiled and loaded don't lea
}
gc(true);
const baseline = process.memoryUsage.rss();
let prev = null;
for (let i = 0; i < 400; i++) {
require(path);
bust(path);
console.log("RSS", (process.memoryUsage.rss() / 1024 / 1024) | 0, "MB");
const current = process.memoryUsage.rss();
if (prev !== current) {
console.log("RSS", (current / 1024 / 1024) | 0, "MB");
}
prev = current;
}
gc(true);
const rss = process.memoryUsage.rss();
const diff = rss - baseline;
console.log("RSS diff", (diff / 1024 / 1024) | 0, "MB");
console.log("RSS", (diff / 1024 / 1024) | 0, "MB");
console.log(require("bun:jsc").heapStats())
if (diff > 64 * 1024 * 1024) {
// Bun v1.1.22 reported 4 MB here on macoS arm64.
// Bun v1.1.21 reported 248 MB here on macoS arm64.
@@ -243,14 +265,22 @@ describe.skipIf(isBroken && isIntelMacOS)("files transpiled and loaded don't lea
exports.abc = 123;
`,
});
const { exitCode, resourceUsage } = Bun.spawnSync({
console.log({ dir });
// await using proc = Bun.spawn({
// cmd: [bunExe(), "run", "--smol", join(dir, "require-cache-bug-leak-fixture.js")],
// env: bunEnv,
// stdio: ["inherit", "inherit", "inherit"],
// });
// expect(await proc.exited).toBe(0);
const proc = Bun.spawnSync({
cmd: [bunExe(), "run", "--smol", join(dir, "require-cache-bug-leak-fixture.js")],
env: bunEnv,
stdio: ["inherit", "inherit", "inherit"],
});
console.log(resourceUsage);
expect(exitCode).toBe(0);
expect(proc.exitCode).toBe(0);
console.log(proc.resourceUsage);
}, 60000); // takes 4s on an M1 in release build
});