mirror of
https://github.com/classilla/tenfourfox.git
synced 2024-11-05 02:06:25 +00:00
126 lines
4.5 KiB
JavaScript
126 lines
4.5 KiB
JavaScript
/* 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();
|
|
}
|