diff options
author | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
---|---|---|
committer | Matt A. Tobin <mattatobin@localhost.localdomain> | 2018-02-02 04:16:08 -0500 |
commit | 5f8de423f190bbb79a62f804151bc24824fa32d8 (patch) | |
tree | 10027f336435511475e392454359edea8e25895d /devtools/shared/specs/profiler.js | |
parent | 49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff) | |
download | UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.gz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.lz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.tar.xz UXP-5f8de423f190bbb79a62f804151bc24824fa32d8.zip |
Add m-esr52 at 52.6.0
Diffstat (limited to 'devtools/shared/specs/profiler.js')
-rw-r--r-- | devtools/shared/specs/profiler.js | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/devtools/shared/specs/profiler.js b/devtools/shared/specs/profiler.js new file mode 100644 index 000000000..a4a6f384e --- /dev/null +++ b/devtools/shared/specs/profiler.js @@ -0,0 +1,121 @@ +/* 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 { + Arg, + Option, + RetVal, + generateActorSpec, + types +} = require("devtools/shared/protocol"); + +types.addType("profiler-data", { + // On Fx42+, the profile is only deserialized on the front; older + // servers will get the profiler data as an object from nsIProfiler, + // causing one parse/stringify cycle, then again implicitly in a packet. + read: (v) => { + if (typeof v.profile === "string") { + // Create a new response object since `profile` is read only. + let newValue = Object.create(null); + newValue.profile = JSON.parse(v.profile); + newValue.currentTime = v.currentTime; + return newValue; + } + return v; + } +}); + +const profilerSpec = generateActorSpec({ + typeName: "profiler", + + /** + * The set of events the ProfilerActor emits over RDP. + */ + events: { + "console-api-profiler": { + data: Arg(0, "json"), + }, + "profiler-started": { + data: Arg(0, "json"), + }, + "profiler-stopped": { + data: Arg(0, "json"), + }, + "profiler-status": { + data: Arg(0, "json"), + }, + + // Only for older geckos, pre-protocol.js ProfilerActor (<Fx42). + // Emitted on other events as a transition from older profiler events + // to newer ones. + "eventNotification": { + subject: Option(0, "json"), + topic: Option(0, "string"), + details: Option(0, "json") + } + }, + + methods: { + startProfiler: { + // Write out every property in the request, since we want all these options to be + // on the packet's top-level for backwards compatibility, when the profiler actor + // was not using protocol.js (<Fx42) + request: { + entries: Option(0, "nullable:number"), + interval: Option(0, "nullable:number"), + features: Option(0, "nullable:array:string"), + threadFilters: Option(0, "nullable:array:string"), + }, + response: RetVal("json"), + }, + stopProfiler: { + response: RetVal("json"), + }, + getProfile: { + request: { + startTime: Option(0, "nullable:number"), + stringify: Option(0, "nullable:boolean") + }, + response: RetVal("profiler-data") + }, + getFeatures: { + response: RetVal("json") + }, + getBufferInfo: { + response: RetVal("json") + }, + getStartOptions: { + response: RetVal("json") + }, + isActive: { + response: RetVal("json") + }, + getSharedLibraryInformation: { + response: RetVal("json") + }, + registerEventNotifications: { + // Explicitly enumerate the arguments + // @see ProfilerActor#startProfiler + request: { + events: Option(0, "nullable:array:string"), + }, + response: RetVal("json") + }, + unregisterEventNotifications: { + // Explicitly enumerate the arguments + // @see ProfilerActor#startProfiler + request: { + events: Option(0, "nullable:array:string"), + }, + response: RetVal("json") + }, + setProfilerStatusInterval: { + request: { interval: Arg(0, "number") }, + oneway: true + } + } +}); + +exports.profilerSpec = profilerSpec; |