mirror of
https://repo.dactyloidae.xyz/Dactyloidae/UXP.git
synced 2026-09-21 15:57:31 +09:00
import FIREFOX_52_6_0esr_RELEASE from mozilla-esr52 hg repo
This commit is contained in:
commit
dcd9973243
150858 changed files with 23884658 additions and 0 deletions
|
|
@ -0,0 +1,92 @@
|
|||
/* Any copyright is dedicated to the Public Domain.
|
||||
http://creativecommons.org/publicdomain/zero/1.0/ */
|
||||
|
||||
// HeapSnapshot.prototype.takeCensus: by: allocationStack breakdown
|
||||
//
|
||||
// Ported from js/src/jit-test/tests/debug/Memory-takeCensus-09.js
|
||||
|
||||
function run_test() {
|
||||
var g = newGlobal();
|
||||
var dbg = new Debugger(g);
|
||||
|
||||
g.eval(` // 1
|
||||
var log = []; // 2
|
||||
function f() { log.push(allocationMarker()); } // 3
|
||||
function g() { f(); } // 4
|
||||
function h() { f(); } // 5
|
||||
`); // 6
|
||||
|
||||
// Create one allocationMarker with tracking turned off,
|
||||
// so it will have no associated stack.
|
||||
g.f();
|
||||
|
||||
dbg.memory.allocationSamplingProbability = 1;
|
||||
|
||||
for ([func, n] of [[g.f, 20], [g.g, 10], [g.h, 5]]) {
|
||||
for (let i = 0; i < n; i++) {
|
||||
dbg.memory.trackingAllocationSites = true;
|
||||
// All allocations of allocationMarker occur with this line as the oldest
|
||||
// stack frame.
|
||||
func();
|
||||
dbg.memory.trackingAllocationSites = false;
|
||||
}
|
||||
}
|
||||
|
||||
let census = saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "objectClass",
|
||||
then: { by: "allocationStack",
|
||||
then: { by: "count",
|
||||
label: "haz stack"
|
||||
},
|
||||
noStack: { by: "count",
|
||||
label: "no haz stack"
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
let map = census.AllocationMarker;
|
||||
ok(map instanceof Map, "Should be a Map instance");
|
||||
equal(map.size, 4, "Should have 4 allocation stacks (including the lack of a stack)");
|
||||
|
||||
// Gather the stacks we are expecting to appear as keys, and
|
||||
// check that there are no unexpected keys.
|
||||
let stacks = { };
|
||||
|
||||
map.forEach((v, k) => {
|
||||
if (k === "noStack") {
|
||||
// No need to save this key.
|
||||
} else if (k.functionDisplayName === "f" &&
|
||||
k.parent.functionDisplayName === "run_test") {
|
||||
stacks.f = k;
|
||||
} else if (k.functionDisplayName === "f" &&
|
||||
k.parent.functionDisplayName === "g" &&
|
||||
k.parent.parent.functionDisplayName === "run_test") {
|
||||
stacks.fg = k;
|
||||
} else if (k.functionDisplayName === "f" &&
|
||||
k.parent.functionDisplayName === "h" &&
|
||||
k.parent.parent.functionDisplayName === "run_test") {
|
||||
stacks.fh = k;
|
||||
} else {
|
||||
dumpn("Unexpected allocation stack:");
|
||||
k.toString().split(/\n/g).forEach(s => dumpn(s));
|
||||
ok(false);
|
||||
}
|
||||
});
|
||||
|
||||
equal(map.get("noStack").label, "no haz stack");
|
||||
equal(map.get("noStack").count, 1);
|
||||
|
||||
ok(stacks.f);
|
||||
equal(map.get(stacks.f).label, "haz stack");
|
||||
equal(map.get(stacks.f).count, 20);
|
||||
|
||||
ok(stacks.fg);
|
||||
equal(map.get(stacks.fg).label, "haz stack");
|
||||
equal(map.get(stacks.fg).count, 10);
|
||||
|
||||
ok(stacks.fh);
|
||||
equal(map.get(stacks.fh).label, "haz stack");
|
||||
equal(map.get(stacks.fh).count, 5);
|
||||
|
||||
do_test_finished();
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue