Source code

Revision control

Copy as Markdown

Other Tools

Test Info: Warnings

/* Any copyright is dedicated to the Public Domain.
"use strict";
// HeapSnapshot.prototype.takeCensus behaves plausibly as we allocate objects.
//
// Exact object counts vary in ways we can't predict. For example,
// BaselineScripts can hold onto "template objects", which exist only to hold
// the shape and type for newly created objects. When BaselineScripts are
// discarded, these template objects go with them.
//
// So instead of expecting precise counts, we expect counts that are at least as
// many as we would expect given the object graph we've built.
//
// Ported from js/src/jit-tests/debug/Memory-takeCensus-02.js
function run_test() {
// A Debugger with no debuggees had better not find anything.
const dbg = new Debugger();
const census0 = saveHeapSnapshotAndTakeCensus(dbg);
Census.walkCensus(census0, "census0", Census.assertAllZeros);
function newGlobalWithDefs() {
const g = newGlobal();
g.eval(`
function times(n, fn) {
var a=[];
for (var i = 0; i<n; i++)
a.push(fn());
return a;
}
`);
return g;
}
// Allocate a large number of various types of objects, and check that census
// finds them.
const g = newGlobalWithDefs();
dbg.addDebuggee(g);
g.eval("var objs = times(100, () => ({}));");
g.eval("var rxs = times(200, () => /foo/);");
g.eval("var ars = times(400, () => []);");
g.eval("var fns = times(800, () => () => {});");
const census1 = dbg.memory.takeCensus(dbg);
Census.walkCensus(
census1,
"census1",
Census.assertAllNotLessThan({
objects: {
Object: { count: 100 },
RegExp: { count: 200 },
Array: { count: 400 },
Function: { count: 800 },
},
})
);
do_test_finished();
}