| // Check byte counts produced by takeCensus. |
| |
| let g = newGlobal(); |
| 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); |
| seen++; |
| break; |
| |
| case 2005: |
| assertEq(v.count, 10); |
| assertEq(v.bytes, 10 * sizeOfAM); |
| seen++; |
| break; |
| |
| default: assertEq(true, false); |
| } |
| }); |
| |
| assertEq(seen, 2); |