diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 09:22:09 +0000 |
commit | 43a97878ce14b72f0981164f87f2e35e14151312 (patch) | |
tree | 620249daf56c0258faa40cbdcf9cfba06de2a846 /devtools/server/actors/perf.js | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 110.0.1.upstream/110.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/server/actors/perf.js')
-rw-r--r-- | devtools/server/actors/perf.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/devtools/server/actors/perf.js b/devtools/server/actors/perf.js new file mode 100644 index 0000000000..7b157a599c --- /dev/null +++ b/devtools/server/actors/perf.js @@ -0,0 +1,55 @@ +/* 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 protocol = require("resource://devtools/shared/protocol.js"); +const { ActorClassWithSpec, Actor } = protocol; +const { + actorBridgeWithSpec, +} = require("resource://devtools/server/actors/common.js"); +const { perfSpec } = require("resource://devtools/shared/specs/perf.js"); +const { + ActorReadyGeckoProfilerInterface, +} = require("resource://devtools/shared/performance-new/gecko-profiler-interface.js"); + +/** + * Pass on the events from the bridge to the actor. + * @param {Object} actor The perf actor + * @param {Array<string>} names The event names + */ +function _bridgeEvents(actor, names) { + for (const name of names) { + actor.bridge.on(name, (...args) => actor.emit(name, ...args)); + } +} + +/** + * The PerfActor wraps the Gecko Profiler interface + */ +exports.PerfActor = ActorClassWithSpec(perfSpec, { + initialize(conn, targetActor) { + Actor.prototype.initialize.call(this, conn); + // The "bridge" is the actual implementation of the actor. It is separated + // for historical reasons, and could be merged into this class. + this.bridge = new ActorReadyGeckoProfilerInterface(); + + _bridgeEvents(this, ["profiler-started", "profiler-stopped"]); + }, + + destroy(conn) { + Actor.prototype.destroy.call(this, conn); + this.bridge.destroy(); + }, + + // Connect the rest of the ActorReadyGeckoProfilerInterface's methods to the PerfActor. + startProfiler: actorBridgeWithSpec("startProfiler"), + stopProfilerAndDiscardProfile: actorBridgeWithSpec( + "stopProfilerAndDiscardProfile" + ), + getSymbolTable: actorBridgeWithSpec("getSymbolTable"), + getProfileAndStopProfiler: actorBridgeWithSpec("getProfileAndStopProfiler"), + isActive: actorBridgeWithSpec("isActive"), + isSupportedPlatform: actorBridgeWithSpec("isSupportedPlatform"), + getSupportedFeatures: actorBridgeWithSpec("getSupportedFeatures"), +}); |