diff options
Diffstat (limited to 'dom/heapsnapshot/tests/unit/test_HeapAnalyses_getCensusIndividuals_01.js')
-rw-r--r-- | dom/heapsnapshot/tests/unit/test_HeapAnalyses_getCensusIndividuals_01.js | 89 |
1 files changed, 89 insertions, 0 deletions
diff --git a/dom/heapsnapshot/tests/unit/test_HeapAnalyses_getCensusIndividuals_01.js b/dom/heapsnapshot/tests/unit/test_HeapAnalyses_getCensusIndividuals_01.js new file mode 100644 index 000000000..b63ad4230 --- /dev/null +++ b/dom/heapsnapshot/tests/unit/test_HeapAnalyses_getCensusIndividuals_01.js @@ -0,0 +1,89 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +// Test that the HeapAnalyses{Client,Worker} can get census individuals. + +function run_test() { + run_next_test(); +} + +const COUNT = { by: "count", count: true, bytes: true }; + +const CENSUS_BREAKDOWN = { + by: "coarseType", + objects: COUNT, + strings: COUNT, + scripts: COUNT, + other: COUNT, +}; + +const LABEL_BREAKDOWN = { + by: "internalType", + then: COUNT, +}; + +const MAX_INDIVIDUALS = 10; + +add_task(function* () { + const client = new HeapAnalysesClient(); + + const snapshotFilePath = saveNewHeapSnapshot(); + yield client.readHeapSnapshot(snapshotFilePath); + ok(true, "Should have read the heap snapshot"); + + const dominatorTreeId = yield client.computeDominatorTree(snapshotFilePath); + ok(true, "Should have computed dominator tree"); + + const { report } = yield client.takeCensus(snapshotFilePath, + { breakdown: CENSUS_BREAKDOWN }, + { asTreeNode: true }); + ok(report, "Should get a report"); + + let nodesWithLeafIndicesFound = 0; + + yield* (function* assertCanGetIndividuals(censusNode) { + if (censusNode.reportLeafIndex !== undefined) { + nodesWithLeafIndicesFound++; + + const response = yield client.getCensusIndividuals({ + dominatorTreeId, + indices: DevToolsUtils.isSet(censusNode.reportLeafIndex) + ? censusNode.reportLeafIndex + : new Set([censusNode.reportLeafIndex]), + censusBreakdown: CENSUS_BREAKDOWN, + labelBreakdown: LABEL_BREAKDOWN, + maxRetainingPaths: 1, + maxIndividuals: MAX_INDIVIDUALS, + }); + + dumpn(`response = ${JSON.stringify(response, null, 4)}`); + + equal(response.nodes.length, Math.min(MAX_INDIVIDUALS, censusNode.count), + "response.nodes.length === Math.min(MAX_INDIVIDUALS, censusNode.count)"); + + let lastRetainedSize = Infinity; + for (let individual of response.nodes) { + equal(typeof individual.nodeId, "number", + "individual.nodeId should be a number"); + ok(individual.retainedSize <= lastRetainedSize, + "individual.retainedSize <= lastRetainedSize"); + lastRetainedSize = individual.retainedSize; + ok(individual.shallowSize, "individual.shallowSize should exist and be non-zero"); + ok(individual.shortestPaths, "individual.shortestPaths should exist"); + ok(individual.shortestPaths.nodes, "individual.shortestPaths.nodes should exist"); + ok(individual.shortestPaths.edges, "individual.shortestPaths.edges should exist"); + ok(individual.label, "individual.label should exist"); + } + } + + if (censusNode.children) { + for (let child of censusNode.children) { + yield* assertCanGetIndividuals(child); + } + } + }(report)); + + equal(nodesWithLeafIndicesFound, 4, "Should have found a leaf for each coarse type"); + + client.destroy(); +}); |