/* 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. */ const PerformanceRecordingCommon = 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()) { return this._estimatedDuration = Date.now() - this._localStartTime; } else { 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 () { let label = this.getLabel(); let duration = this.getDuration(); let markers = this.getMarkers(); let frames = this.getFrames(); let memory = this.getMemory(); let ticks = this.getTicks(); let allocations = this.getAllocations(); let profile = this.getProfile(); let configuration = this.getConfiguration(); let systemHost = this.getHostSystemInfo(); let systemClient = this.getClientSystemInfo(); return { label, duration, markers, frames, memory, ticks, allocations, profile, configuration, systemHost, systemClient }; }, };