summaryrefslogtreecommitdiffstats
path: root/js/src/jit-test/tests/debug/Memory-takeCensus-10.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/jit-test/tests/debug/Memory-takeCensus-10.js')
-rw-r--r--js/src/jit-test/tests/debug/Memory-takeCensus-10.js60
1 files changed, 60 insertions, 0 deletions
diff --git a/js/src/jit-test/tests/debug/Memory-takeCensus-10.js b/js/src/jit-test/tests/debug/Memory-takeCensus-10.js
new file mode 100644
index 0000000000..9a03009fee
--- /dev/null
+++ b/js/src/jit-test/tests/debug/Memory-takeCensus-10.js
@@ -0,0 +1,60 @@
+// Check counts produced by takeCensus.
+//
+// Note that tracking allocation sites adds unique IDs to objects which
+// increases their size, making it hard to test reported sizes exactly.
+
+let g = newGlobal({newCompartment: true});
+let dbg = new Debugger(g);
+
+let sizeOfAM = byteSize(allocationMarker());
+
+// Allocate a single allocation marker, and check that we can find it.
+g.eval('var hold = allocationMarker();');
+let census = dbg.memory.takeCensus({ breakdown: { by: 'objectClass' } });
+assertEq(census.AllocationMarker.count, 1);
+assertEq(census.AllocationMarker.bytes, sizeOfAM);
+
+g.evaluate(`
+ var objs = [];
+ function fnerd() {
+ objs.push(allocationMarker());
+ for (let i = 0; i < 10; i++)
+ objs.push(allocationMarker());
+ }
+ `,
+ { fileName: 'J. Edgar Hoover', lineNumber: 2000 });
+
+dbg.memory.allocationSamplingProbability = 1;
+dbg.memory.trackingAllocationSites = true;
+
+g.hold = null;
+g.fnerd();
+
+census = dbg.memory.takeCensus({
+ breakdown: { by: 'objectClass',
+ then: { by: 'allocationStack' }
+ }
+});
+
+let seen = 0;
+census.AllocationMarker.forEach((v, k) => {
+ assertEq(k.functionDisplayName, 'fnerd');
+ assertEq(k.source, 'J. Edgar Hoover');
+ switch (k.line) {
+ case 2003:
+ assertEq(v.count, 1);
+ assertEq(v.bytes >= sizeOfAM, true);
+ seen++;
+ break;
+
+ case 2005:
+ assertEq(v.count, 10);
+ assertEq(v.bytes >= 10 * sizeOfAM, true);
+ seen++;
+ break;
+
+ default: assertEq(true, false);
+ }
+});
+
+assertEq(seen, 2);