summaryrefslogtreecommitdiffstats
path: root/devtools/server/actors/performance-entries.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/server/actors/performance-entries.js')
-rw-r--r--devtools/server/actors/performance-entries.js65
1 files changed, 65 insertions, 0 deletions
diff --git a/devtools/server/actors/performance-entries.js b/devtools/server/actors/performance-entries.js
new file mode 100644
index 000000000..89434324a
--- /dev/null
+++ b/devtools/server/actors/performance-entries.js
@@ -0,0 +1,65 @@
+/* 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/. */
+
+/**
+ * The performanceEntries actor emits events corresponding to performance
+ * entries. It receives `performanceentry` events containing the performance
+ * entry details and emits an event containing the name, type, origin, and
+ * epoch of the performance entry.
+ */
+
+const { Actor, ActorClassWithSpec } = require("devtools/shared/protocol");
+const performanceSpec = require("devtools/shared/specs/performance-entries");
+const events = require("sdk/event/core");
+
+var PerformanceEntriesActor = ActorClassWithSpec(performanceSpec, {
+ listenerAdded: false,
+
+ initialize: function (conn, tabActor) {
+ Actor.prototype.initialize.call(this, conn);
+ this.window = tabActor.window;
+ },
+
+ /**
+ * Start tracking the user timings.
+ */
+ start: function () {
+ if (!this.listenerAdded) {
+ this.onPerformanceEntry = this.onPerformanceEntry.bind(this);
+ this.window.addEventListener("performanceentry", this.onPerformanceEntry, true);
+ this.listenerAdded = true;
+ }
+ },
+
+ /**
+ * Stop tracking the user timings.
+ */
+ stop: function () {
+ if (this.listenerAdded) {
+ this.window.removeEventListener("performanceentry", this.onPerformanceEntry, true);
+ this.listenerAdded = false;
+ }
+ },
+
+ disconnect: function () {
+ this.destroy();
+ },
+
+ destroy: function () {
+ this.stop();
+ Actor.prototype.destroy.call(this);
+ },
+
+ onPerformanceEntry: function (e) {
+ let emitDetail = {
+ type: e.entryType,
+ name: e.name,
+ origin: e.origin,
+ epoch: e.epoch
+ };
+ events.emit(this, "entry", emitDetail);
+ }
+});
+
+exports.PerformanceEntriesActor = PerformanceEntriesActor;