blob: fdd4191c5fa7e5d83aafaa5bb9488697b0ca82b1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/* Any copyright is dedicated to the Public Domain.
http://creativecommons.org/publicdomain/zero/1.0/ */
"use strict";
// 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);
}
}
const COUNT = { by: "count", count: false, bytes: true };
function run_test() {
const path = saveNewHeapSnapshot();
const snapshot = ChromeUtils.readHeapSnapshot(path);
const dominatorTree = snapshot.computeDominatorTree();
// Do a traversal of the dominator tree and assert the relationship between
// retained size, shallow size, and children's retained sizes.
const root = dominatorTree.root;
const stack = [root];
while (stack.length) {
const top = stack.pop();
const children = dominatorTree.getImmediatelyDominated(top);
const topRetainedSize = dominatorTree.getRetainedSize(top);
const topShallowSize = snapshot.describeNode(COUNT, top).bytes;
fastAssert(
topShallowSize <= topRetainedSize,
"The shallow size should be less than or equal to the " + "retained size"
);
let sumOfChildrensRetainedSizes = 0;
for (let 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();
}
|