summaryrefslogtreecommitdiffstats
path: root/devtools/shared/specs/canvas.js
diff options
context:
space:
mode:
authorMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
committerMatt A. Tobin <mattatobin@localhost.localdomain>2018-02-02 04:16:08 -0500
commit5f8de423f190bbb79a62f804151bc24824fa32d8 (patch)
tree10027f336435511475e392454359edea8e25895d /devtools/shared/specs/canvas.js
parent49ee0794b5d912db1f95dce6eb52d781dc210db5 (diff)
downloadUXP-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/canvas.js')
-rw-r--r--devtools/shared/specs/canvas.js131
1 files changed, 131 insertions, 0 deletions
diff --git a/devtools/shared/specs/canvas.js b/devtools/shared/specs/canvas.js
new file mode 100644
index 000000000..dcb26f9a9
--- /dev/null
+++ b/devtools/shared/specs/canvas.js
@@ -0,0 +1,131 @@
+/* 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("devtools/shared/protocol");
+const {Arg, Option, RetVal, generateActorSpec} = protocol;
+
+/**
+ * Type representing an ArrayBufferView, serialized fast(er).
+ *
+ * Don't create a new array buffer view from the parsed array on the frontend.
+ * Consumers may copy the data into an existing buffer, or create a new one if
+ * necesasry. For example, this avoids the need for a redundant copy when
+ * populating ImageData objects, at the expense of transferring char views
+ * of a pixel buffer over the protocol instead of a packed int view.
+ *
+ * XXX: It would be nice if on local connections (only), we could just *give*
+ * the buffer directly to the front, instead of going through all this
+ * serialization redundancy.
+ */
+protocol.types.addType("array-buffer-view", {
+ write: (v) => "[" + Array.join(v, ",") + "]",
+ read: (v) => JSON.parse(v)
+});
+
+/**
+ * Type describing a thumbnail or screenshot in a recorded animation frame.
+ */
+protocol.types.addDictType("snapshot-image", {
+ index: "number",
+ width: "number",
+ height: "number",
+ scaling: "number",
+ flipped: "boolean",
+ pixels: "array-buffer-view"
+});
+
+/**
+ * Type describing an overview of a recorded animation frame.
+ */
+protocol.types.addDictType("snapshot-overview", {
+ calls: "array:function-call",
+ thumbnails: "array:snapshot-image",
+ screenshot: "snapshot-image"
+});
+
+exports.CANVAS_CONTEXTS = [
+ "CanvasRenderingContext2D",
+ "WebGLRenderingContext"
+];
+
+exports.ANIMATION_GENERATORS = [
+ "requestAnimationFrame"
+];
+
+exports.LOOP_GENERATORS = [
+ "setTimeout"
+];
+
+exports.DRAW_CALLS = [
+ // 2D canvas
+ "fill",
+ "stroke",
+ "clearRect",
+ "fillRect",
+ "strokeRect",
+ "fillText",
+ "strokeText",
+ "drawImage",
+
+ // WebGL
+ "clear",
+ "drawArrays",
+ "drawElements",
+ "finish",
+ "flush"
+];
+
+exports.INTERESTING_CALLS = [
+ // 2D canvas
+ "save",
+ "restore",
+
+ // WebGL
+ "useProgram"
+];
+
+const frameSnapshotSpec = generateActorSpec({
+ typeName: "frame-snapshot",
+
+ methods: {
+ getOverview: {
+ response: { overview: RetVal("snapshot-overview") }
+ },
+ generateScreenshotFor: {
+ request: { call: Arg(0, "function-call") },
+ response: { screenshot: RetVal("snapshot-image") }
+ },
+ },
+});
+
+exports.frameSnapshotSpec = frameSnapshotSpec;
+
+const canvasSpec = generateActorSpec({
+ typeName: "canvas",
+
+ methods: {
+ setup: {
+ request: { reload: Option(0, "boolean") },
+ oneway: true
+ },
+ finalize: {
+ oneway: true
+ },
+ isInitialized: {
+ response: { initialized: RetVal("boolean") }
+ },
+ isRecording: {
+ response: { recording: RetVal("boolean") }
+ },
+ recordAnimationFrame: {
+ response: { snapshot: RetVal("nullable:frame-snapshot") }
+ },
+ stopRecordingAnimationFrame: {
+ oneway: true
+ },
+ }
+});
+
+exports.canvasSpec = canvasSpec;