123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126 |
- /* Any copyright is dedicated to the Public Domain.
- http://creativecommons.org/publicdomain/zero/1.0/ */
- // Check HeapSnapshot.prototype.takeCensus handling of 'breakdown' argument.
- //
- // Ported from js/src/jit-test/tests/debug/Memory-takeCensus-06.js
- function run_test() {
- var Pattern = Match.Pattern;
- var g = newGlobal();
- var dbg = new Debugger(g);
- Pattern({ count: Pattern.NATURAL,
- bytes: Pattern.NATURAL })
- .assert(saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "count" } }));
- let census = saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "count", count: false, bytes: false } });
- equal("count" in census, false);
- equal("bytes" in census, false);
- census = saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "count", count: true, bytes: false } });
- equal("count" in census, true);
- equal("bytes" in census, false);
- census = saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "count", count: false, bytes: true } });
- equal("count" in census, false);
- equal("bytes" in census, true);
- census = saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "count", count: true, bytes: true } });
- equal("count" in census, true);
- equal("bytes" in census, true);
- // Pattern doesn't mind objects with extra properties, so we'll restrict this
- // list to the object classes we're pretty sure are going to stick around for
- // the forseeable future.
- Pattern({
- Function: { count: Pattern.NATURAL },
- Object: { count: Pattern.NATURAL },
- Debugger: { count: Pattern.NATURAL },
- Sandbox: { count: Pattern.NATURAL },
- // The below are all Debugger prototype objects.
- Source: { count: Pattern.NATURAL },
- Environment: { count: Pattern.NATURAL },
- Script: { count: Pattern.NATURAL },
- Memory: { count: Pattern.NATURAL },
- Frame: { count: Pattern.NATURAL }
- })
- .assert(saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "objectClass" } }));
- Pattern({
- objects: { count: Pattern.NATURAL },
- scripts: { count: Pattern.NATURAL },
- strings: { count: Pattern.NATURAL },
- other: { count: Pattern.NATURAL }
- })
- .assert(saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "coarseType" } }));
- // As for { by: 'objectClass' }, restrict our pattern to the types
- // we predict will stick around for a long time.
- Pattern({
- JSString: { count: Pattern.NATURAL },
- "js::Shape": { count: Pattern.NATURAL },
- JSObject: { count: Pattern.NATURAL },
- JSScript: { count: Pattern.NATURAL }
- })
- .assert(saveHeapSnapshotAndTakeCensus(dbg, { breakdown: { by: "internalType" } }));
- // Nested breakdowns.
- let coarseTypePattern = {
- objects: { count: Pattern.NATURAL },
- scripts: { count: Pattern.NATURAL },
- strings: { count: Pattern.NATURAL },
- other: { count: Pattern.NATURAL }
- };
- Pattern({
- JSString: coarseTypePattern,
- "js::Shape": coarseTypePattern,
- JSObject: coarseTypePattern,
- JSScript: coarseTypePattern,
- })
- .assert(saveHeapSnapshotAndTakeCensus(dbg, {
- breakdown: { by: "internalType",
- then: { by: "coarseType" }
- }
- }));
- Pattern({
- Function: { count: Pattern.NATURAL },
- Object: { count: Pattern.NATURAL },
- Debugger: { count: Pattern.NATURAL },
- Sandbox: { count: Pattern.NATURAL },
- other: coarseTypePattern
- })
- .assert(saveHeapSnapshotAndTakeCensus(dbg, {
- breakdown: {
- by: "objectClass",
- then: { by: "count" },
- other: { by: "coarseType" }
- }
- }));
- Pattern({
- objects: { count: Pattern.NATURAL, label: "object" },
- scripts: { count: Pattern.NATURAL, label: "scripts" },
- strings: { count: Pattern.NATURAL, label: "strings" },
- other: { count: Pattern.NATURAL, label: "other" }
- })
- .assert(saveHeapSnapshotAndTakeCensus(dbg, {
- breakdown: {
- by: "coarseType",
- objects: { by: "count", label: "object" },
- scripts: { by: "count", label: "scripts" },
- strings: { by: "count", label: "strings" },
- other: { by: "count", label: "other" }
- }
- }));
- do_test_finished();
- }
|