57 lines
2.0 KiB
JavaScript
57 lines
2.0 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
http://creativecommons.org/publicdomain/zero/1.0/ */
|
|
|
|
// Test that the retained size of a node is the sum of its children retained
|
|
// sizes plus its shallow size.
|
|
|
|
// Note that we don't assert directly, only if we get an unexpected
|
|
// value. There are just way too many nodes in the heap graph to assert for
|
|
// every one. This test would constantly time out and assertion messages would
|
|
// overflow the log size.
|
|
function fastAssert(cond, msg) {
|
|
if (!cond) {
|
|
ok(false, msg);
|
|
}
|
|
}
|
|
|
|
var COUNT = { by: "count", count: false, bytes: true };
|
|
|
|
function run_test() {
|
|
var path = saveNewHeapSnapshot();
|
|
var snapshot = ChromeUtils.readHeapSnapshot(path);
|
|
var dominatorTree = snapshot.computeDominatorTree();
|
|
|
|
// Do a traversal of the dominator tree and assert the relationship between
|
|
// retained size, shallow size, and children's retained sizes.
|
|
|
|
var root = dominatorTree.root;
|
|
var stack = [root];
|
|
while (stack.length > 0) {
|
|
var top = stack.pop();
|
|
|
|
var children = dominatorTree.getImmediatelyDominated(top);
|
|
|
|
var topRetainedSize = dominatorTree.getRetainedSize(top);
|
|
var topShallowSize = snapshot.describeNode(COUNT, top).bytes;
|
|
fastAssert(topShallowSize <= topRetainedSize,
|
|
"The shallow size should be less than or equal to the " +
|
|
"retained size");
|
|
|
|
var sumOfChildrensRetainedSizes = 0;
|
|
for (var i = 0; i < children.length; i++) {
|
|
sumOfChildrensRetainedSizes += dominatorTree.getRetainedSize(children[i]);
|
|
stack.push(children[i]);
|
|
}
|
|
|
|
fastAssert(sumOfChildrensRetainedSizes <= topRetainedSize,
|
|
"The sum of the children's retained sizes should be less than " +
|
|
"or equal to the retained size");
|
|
fastAssert(sumOfChildrensRetainedSizes + topShallowSize === topRetainedSize,
|
|
"The sum of the children's retained sizes plus the shallow " +
|
|
"size should be equal to the retained size");
|
|
}
|
|
|
|
ok(true, "Successfully walked the tree");
|
|
do_test_finished();
|
|
}
|