I'm moving the logic to understand the memory graphs in a dedicated module in order to keep allocation tracker focused on the recording. Differential Revision: https://phabricator.services.mozilla.com/D267822
53 lines
1.7 KiB
JavaScript
53 lines
1.7 KiB
JavaScript
/* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
|
|
|
// Test-only module in order to register objects later inspected by
|
|
// the allocation tracker (in the same folder).
|
|
//
|
|
// We are going to store a weak reference to the passed objects,
|
|
// in order to prevent holding them in memory.
|
|
// Allocation tracker will then print detailed information
|
|
// about why these objects are still allocated.
|
|
|
|
const objects = [];
|
|
|
|
/**
|
|
* Request to track why the given object is kept in memory,
|
|
* later on, when retrieving all the watched object via getStillAllocatedObjects.
|
|
*/
|
|
export function track(obj) {
|
|
// We store a weak reference, so that we do force keeping the object in memory!!
|
|
objects.push(Cu.getWeakReference(obj));
|
|
}
|
|
|
|
/**
|
|
* Return the reference and NodeId's of all the objects passed via `track()` method,
|
|
* which are still hold in memory.
|
|
*
|
|
* NodeId's are used by spidermonkey memory API to designates JS objects in heap snapshots.
|
|
*/
|
|
export function getStillAllocatedObjects() {
|
|
return (
|
|
objects
|
|
// Filter out objects which have been freed already
|
|
.filter(ref => !!ref.get())
|
|
.map(weakRef => {
|
|
return {
|
|
weakRef,
|
|
// Convert objects from here instead of from allocation tracker in order
|
|
// to be from the shared system compartment and avoid trying to compute the NodeId
|
|
// of a wrapper!
|
|
ubiNodeId: ChromeUtils.getObjectNodeId(weakRef.get()),
|
|
};
|
|
})
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Used by tests to clear all tracked objects
|
|
*/
|
|
export function clear() {
|
|
objects.length = 0;
|
|
}
|