diff options
Diffstat (limited to 'devtools/shared/performance/recording-common.js')
-rw-r--r-- | devtools/shared/performance/recording-common.js | 141 |
1 files changed, 141 insertions, 0 deletions
diff --git a/devtools/shared/performance/recording-common.js b/devtools/shared/performance/recording-common.js new file mode 100644 index 0000000000..d0f1ae0c0d --- /dev/null +++ b/devtools/shared/performance/recording-common.js @@ -0,0 +1,141 @@ +/* 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"; + +/** + * A mixin to be used for PerformanceRecordingActor, PerformanceRecordingFront, + * and LegacyPerformanceRecording for helper methods to access data. + */ + +exports.PerformanceRecordingCommon = { + // Private fields, only needed when a recording is started or stopped. + _console: false, + _imported: false, + _recording: false, + _completed: false, + _configuration: {}, + _startingBufferStatus: null, + _localStartTime: 0, + + // Serializable fields, necessary and sufficient for import and export. + _label: "", + _duration: 0, + _markers: null, + _frames: null, + _memory: null, + _ticks: null, + _allocations: null, + _profile: null, + _systemHost: null, + _systemClient: null, + + /** + * Helper methods for returning the status of the recording. + * These methods should be consistent on both the front and actor. + */ + isRecording: function() { + return this._recording; + }, + isCompleted: function() { + return this._completed || this.isImported(); + }, + isFinalizing: function() { + return !this.isRecording() && !this.isCompleted(); + }, + isConsole: function() { + return this._console; + }, + isImported: function() { + return this._imported; + }, + + /** + * Helper methods for returning configuration for the recording. + * These methods should be consistent on both the front and actor. + */ + getConfiguration: function() { + return this._configuration; + }, + getLabel: function() { + return this._label; + }, + + /** + * Gets duration of this recording, in milliseconds. + * @return number + */ + getDuration: function() { + // Compute an approximate ending time for the current recording if it is + // still in progress. This is needed to ensure that the view updates even + // when new data is not being generated. If recording is completed, use + // the duration from the profiler; if between recording and being finalized, + // use the last estimated duration. + if (this.isRecording()) { + this._estimatedDuration = Date.now() - this._localStartTime; + return this._estimatedDuration; + } + return this._duration || this._estimatedDuration || 0; + }, + + /** + * Helper methods for returning recording data. + * These methods should be consistent on both the front and actor. + */ + getMarkers: function() { + return this._markers; + }, + getFrames: function() { + return this._frames; + }, + getMemory: function() { + return this._memory; + }, + getTicks: function() { + return this._ticks; + }, + getAllocations: function() { + return this._allocations; + }, + getProfile: function() { + return this._profile; + }, + getHostSystemInfo: function() { + return this._systemHost; + }, + getClientSystemInfo: function() { + return this._systemClient; + }, + getStartingBufferStatus: function() { + return this._startingBufferStatus; + }, + + getAllData: function() { + const label = this.getLabel(); + const duration = this.getDuration(); + const markers = this.getMarkers(); + const frames = this.getFrames(); + const memory = this.getMemory(); + const ticks = this.getTicks(); + const allocations = this.getAllocations(); + const profile = this.getProfile(); + const configuration = this.getConfiguration(); + const systemHost = this.getHostSystemInfo(); + const systemClient = this.getClientSystemInfo(); + + return { + label, + duration, + markers, + frames, + memory, + ticks, + allocations, + profile, + configuration, + systemHost, + systemClient, + }; + }, +}; |