90 lines
2.8 KiB
JavaScript
90 lines
2.8 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/. */
|
|
|
|
"use strict";
|
|
|
|
const { Actor } = require("resource://devtools/shared/protocol.js");
|
|
const { memorySpec } = require("resource://devtools/shared/specs/memory.js");
|
|
|
|
const { Memory } = require("resource://devtools/server/performance/memory.js");
|
|
const {
|
|
actorBridgeWithSpec,
|
|
} = require("resource://devtools/server/actors/common.js");
|
|
|
|
loader.lazyRequireGetter(
|
|
this,
|
|
"StackFrameCache",
|
|
"resource://devtools/server/actors/utils/stack.js",
|
|
true
|
|
);
|
|
|
|
/**
|
|
* An actor that returns memory usage data for its parent actor's window.
|
|
* A target-scoped instance of this actor will measure the memory footprint of
|
|
* the target, such as a tab. A global-scoped instance however, will measure the memory
|
|
* footprint of the chrome window referenced by the root actor.
|
|
*
|
|
* This actor wraps the Memory module at devtools/server/performance/memory.js
|
|
* and provides RDP definitions.
|
|
*
|
|
* @see devtools/server/performance/memory.js for documentation.
|
|
*/
|
|
exports.MemoryActor = class MemoryActor extends Actor {
|
|
constructor(conn, parent, frameCache = new StackFrameCache()) {
|
|
super(conn, memorySpec);
|
|
|
|
this._onGarbageCollection = this._onGarbageCollection.bind(this);
|
|
this._onAllocations = this._onAllocations.bind(this);
|
|
this.bridge = new Memory(parent, frameCache);
|
|
this.bridge.on("garbage-collection", this._onGarbageCollection);
|
|
this.bridge.on("allocations", this._onAllocations);
|
|
}
|
|
|
|
destroy() {
|
|
this.bridge.off("garbage-collection", this._onGarbageCollection);
|
|
this.bridge.off("allocations", this._onAllocations);
|
|
this.bridge.destroy();
|
|
super.destroy();
|
|
}
|
|
|
|
attach = actorBridgeWithSpec("attach");
|
|
|
|
detach = actorBridgeWithSpec("detach");
|
|
|
|
getState = actorBridgeWithSpec("getState");
|
|
|
|
saveHeapSnapshot(boundaries) {
|
|
return this.bridge.saveHeapSnapshot(boundaries);
|
|
}
|
|
|
|
takeCensus = actorBridgeWithSpec("takeCensus");
|
|
|
|
startRecordingAllocations = actorBridgeWithSpec("startRecordingAllocations");
|
|
|
|
stopRecordingAllocations = actorBridgeWithSpec("stopRecordingAllocations");
|
|
|
|
getAllocationsSettings = actorBridgeWithSpec("getAllocationsSettings");
|
|
|
|
getAllocations = actorBridgeWithSpec("getAllocations");
|
|
|
|
forceGarbageCollection = actorBridgeWithSpec("forceGarbageCollection");
|
|
|
|
forceCycleCollection = actorBridgeWithSpec("forceCycleCollection");
|
|
|
|
measure = actorBridgeWithSpec("measure");
|
|
|
|
residentUnique = actorBridgeWithSpec("residentUnique");
|
|
|
|
_onGarbageCollection(data) {
|
|
if (this.conn.transport) {
|
|
this.emit("garbage-collection", data);
|
|
}
|
|
}
|
|
|
|
_onAllocations(data) {
|
|
if (this.conn.transport) {
|
|
this.emit("allocations", data);
|
|
}
|
|
}
|
|
};
|