Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

"use strict";
// Keep allocations alive across the whole test so GC can't reclaim them.
const KEEP_ALIVE = [];
// Allocate N MiB using ArrayBuffers and *touch* the memory so it's committed.
function allocateTypedMiB(totalMiB = 64, chunkMiB = 8) {
const chunkSize = chunkMiB * 1024 * 1024;
const count = Math.ceil(totalMiB / chunkMiB);
for (let i = 0; i < count; i++) {
const buf = new ArrayBuffer(chunkSize);
// Touch one byte per page to ensure RSS growth.
const view = new Uint8Array(buf);
for (let j = 0; j < view.length; j += 4096) {
view[j] = 1;
}
KEEP_ALIVE.push(buf);
}
}
add_task(async function test_currentProcessMemoryUsage() {
// Simulate memory allocation (strongly reachable + committed)
Cu.forceGC();
Cu.forceCC();
let initialMemory = ChromeUtils.currentProcessMemoryUsage;
let arr = [];
for (let i = 0; i < 1_000_000; i++) {
arr.push({ v: i });
}
KEEP_ALIVE.push(arr);
// Plus a guaranteed 64 MiB of typed-array memory to make growth obvious
allocateTypedMiB(64, 8);
let finalMemory = ChromeUtils.currentProcessMemoryUsage;
info(`Initial memory: ${initialMemory}, final memory: ${finalMemory}`);
Assert.greater(
finalMemory,
initialMemory,
"Memory usage should increase after allocations"
);
Assert.greater(
finalMemory - initialMemory,
64 * 1024 * 1024,
"Memory usage should have growned over 64MiB"
);
});
async function getCurrentProcessInfo() {
let info = await ChromeUtils.requestProcInfo();
// nanoseconds to milliseconds
return Math.floor(info.cpuTime / 1000000);
}
add_task(async function test_cpuTimeSinceProcessStart() {
let initialCPUTimeFromRequestProcInfo = await getCurrentProcessInfo();
let initialCPUTime = ChromeUtils.cpuTimeSinceProcessStart;
let secondCPUTimeFromRequestProcInfo = await getCurrentProcessInfo();
Assert.greaterOrEqual(initialCPUTime, initialCPUTimeFromRequestProcInfo);
Assert.greaterOrEqual(secondCPUTimeFromRequestProcInfo, initialCPUTime);
// Simulate some CPU load
let sum = [0];
for (let i = 0; i < 5_000_000; i++) {
sum[0] += Math.sqrt(i);
}
let finalCPUTimeFromRequestProcInfo = await getCurrentProcessInfo();
let finalCPUTime = ChromeUtils.cpuTimeSinceProcessStart;
Assert.greaterOrEqual(finalCPUTime, finalCPUTimeFromRequestProcInfo);
info(`Initial CPU time: ${initialCPUTime}, final CPU time: ${finalCPUTime}`);
Assert.greater(
finalCPUTime,
initialCPUTime,
"CPU time should increase after computation"
);
});