Web Inspector: Record actions performed on ImageBitmapRenderingContext
authorwebkit@devinrousso.com <webkit@devinrousso.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Sep 2018 16:44:22 +0000 (16:44 +0000)
committerwebkit@devinrousso.com <webkit@devinrousso.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Fri, 14 Sep 2018 16:44:22 +0000 (16:44 +0000)
https://bugs.webkit.org/show_bug.cgi?id=181341

Reviewed by Joseph Pecoraro.

Source/JavaScriptCore:

* inspector/protocol/Recording.json:
* inspector/scripts/codegen/generator.py:

Source/WebCore:

Test: inspector/canvas/recording-bitmaprenderer.html

* html/canvas/ImageBitmapRenderingContext.idl:

* inspector/InspectorCanvas.cpp:
(WebCore::shouldSnapshotBitmapRendererAction):
(WebCore::InspectorCanvas::recordAction):

* inspector/agents/InspectorCanvasAgent.cpp:
(WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):

* page/PageConsoleClient.cpp:
(canvasRenderingContext):

Source/WebInspectorUI:

* UserInterface/Models/Recording.js:
(WI.Recording.fromPayload):
(WI.Recording.prototype.createContext):

* UserInterface/Models/RecordingAction.js:
(WI.RecordingAction._prototypeForType):
(WI.RecordingAction.prototype.getImageParameters):

* UserInterface/Views/RecordingActionTreeElement.js:
(WI.RecordingActionTreeElement._classNameForAction.classNameForActionName):

* UserInterface/Views/RecordingContentView.js:
(WI.RecordingContentView):
(WI.RecordingContentView.prototype.get navigationItems):
(WI.RecordingContentView.prototype.updateActionIndex):
(WI.RecordingContentView.prototype.shown):
(WI.RecordingContentView.prototype.hidden):
(WI.RecordingContentView.prototype._generateContentFromSnapshot): Renamed.
(WI.RecordingContentView.prototype._updateImageGrid):
(WI.RecordingContentView.prototype._generateContentCanvasWebGL): Deleted.

* UserInterface/Views/CanvasContentView.js:
(WI.CanvasContentView):

LayoutTests:

* inspector/canvas/recording-2d-expected.txt:
* inspector/canvas/recording-bitmaprenderer-expected.txt: Added.
* inspector/canvas/recording-bitmaprenderer.html: Added.
* inspector/canvas/recording-webgl-expected.txt:
* inspector/canvas/recording-webgl-snapshots-expected.txt:
* inspector/canvas/resources/recording-utilities.js:
Simplify the test output to avoid unrelated failures, such as if line numbers change.
Also remove non-human-readable text, as it makes it more difficult for those unfamiliar with
the test to determine if any differences are acceptable.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@236008 268f45cc-cd09-0410-ab3c-d52691b4dbfc

21 files changed:
LayoutTests/ChangeLog
LayoutTests/inspector/canvas/recording-2d-expected.txt
LayoutTests/inspector/canvas/recording-bitmaprenderer-expected.txt [new file with mode: 0644]
LayoutTests/inspector/canvas/recording-bitmaprenderer.html [new file with mode: 0644]
LayoutTests/inspector/canvas/recording-webgl-expected.txt
LayoutTests/inspector/canvas/recording-webgl-snapshots-expected.txt
LayoutTests/inspector/canvas/resources/recording-utilities.js
Source/JavaScriptCore/ChangeLog
Source/JavaScriptCore/inspector/protocol/Recording.json
Source/JavaScriptCore/inspector/scripts/codegen/generator.py
Source/WebCore/ChangeLog
Source/WebCore/html/canvas/ImageBitmapRenderingContext.idl
Source/WebCore/inspector/InspectorCanvas.cpp
Source/WebCore/inspector/agents/InspectorCanvasAgent.cpp
Source/WebCore/page/PageConsoleClient.cpp
Source/WebInspectorUI/ChangeLog
Source/WebInspectorUI/UserInterface/Models/Recording.js
Source/WebInspectorUI/UserInterface/Models/RecordingAction.js
Source/WebInspectorUI/UserInterface/Views/CanvasContentView.js
Source/WebInspectorUI/UserInterface/Views/RecordingActionTreeElement.js
Source/WebInspectorUI/UserInterface/Views/RecordingContentView.js

index 4697998..2babe41 100644 (file)
@@ -1,3 +1,20 @@
+2018-09-14  Devin Rousso  <webkit@devinrousso.com>
+
+        Web Inspector: Record actions performed on ImageBitmapRenderingContext
+        https://bugs.webkit.org/show_bug.cgi?id=181341
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/canvas/recording-2d-expected.txt:
+        * inspector/canvas/recording-bitmaprenderer-expected.txt: Added.
+        * inspector/canvas/recording-bitmaprenderer.html: Added.
+        * inspector/canvas/recording-webgl-expected.txt:
+        * inspector/canvas/recording-webgl-snapshots-expected.txt:
+        * inspector/canvas/resources/recording-utilities.js:
+        Simplify the test output to avoid unrelated failures, such as if line numbers change.
+        Also remove non-human-readable text, as it makes it more difficult for those unfamiliar with
+        the test to determine if any differences are acceptable.
+
 2018-09-14  Ms2ger  <Ms2ger@igalia.com>
 
         Remove some obsolete XHR tests
index 9b77a44..a491718 100644 (file)
@@ -36,63 +36,29 @@ frames:
     0: arc(1, 2, 3, 4, 5, false)
       swizzleTypes: [Number, Number, Number, Number, Number, Boolean]
       trace:
-        0: arc - [native code] (13)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:80:42 (15)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:80:28 (18)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
-        5: performActions - inspector/canvas/recording-2d.html:397:25 (22)
-        6: Global Code - [program code] (24)
-        7: evaluateWithScopeExtension - [native code] (26)
-        8: _evaluateOn (28)
-        9: _evaluateAndWrap (30)
+        0: arc
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
+        5: performActions
+        6: Global Code
+        7: evaluateWithScopeExtension
+        8: _evaluateOn
+        9: _evaluateAndWrap
     1: arc(6, 7, 8, 9, 10, true)
       swizzleTypes: [Number, Number, Number, Number, Number, Boolean]
       trace:
-        0: arc - [native code] (13)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:81:42 (31)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:81:28 (32)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
-        5: performActions - inspector/canvas/recording-2d.html:397:25 (22)
-        6: Global Code - [program code] (24)
-        7: evaluateWithScopeExtension - [native code] (26)
-        8: _evaluateOn (28)
-        9: _evaluateAndWrap (30)
-data:
-  0: "source-over"
-  1: "butt"
-  2: "miter"
-  3: "rgba(0, 0, 0, 0)"
-  4: "10px sans-serif"
-  5: "start"
-  6: "alphabetic"
-  7: "ltr"
-  8: "#000000"
-  9: "low"
-  10: ""
-  11: "arc"
-  12: "[native code]"
-  13: [11,12,0,0]
-  14: "inspector/canvas/recording-2d.html"
-  15: [10,14,81,42]
-  16: "ignoreException"
-  17: [16,14,52,13]
-  18: [10,14,81,28]
-  19: "executeFrameFunction"
-  20: [19,14,394,24]
-  21: "performActions"
-  22: [21,14,398,25]
-  23: "global code"
-  24: [23,10,1,15]
-  25: "evaluateWithScopeExtension"
-  26: [25,12,0,0]
-  27: "_evaluateOn"
-  28: [27,10,130,29]
-  29: "_evaluateAndWrap"
-  30: [29,10,124,108]
-  31: [10,14,82,42]
-  32: [10,14,82,28]
+        0: arc
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
+        5: performActions
+        6: Global Code
+        7: evaluateWithScopeExtension
+        8: _evaluateOn
+        9: _evaluateAndWrap
 
 -- Running test case: Canvas.recording2D.multipleFrames
 initialState:
@@ -128,1332 +94,977 @@ frames:
     0: arc(1, 2, 3, 4, 5, false)
       swizzleTypes: [Number, Number, Number, Number, Number, Boolean]
       trace:
-        0: arc - [native code] (13)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:80:42 (15)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:80:28 (18)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
-        5: performActions - inspector/canvas/recording-2d.html:397:25 (22)
-        6: Global Code - [program code] (24)
-        7: evaluateWithScopeExtension - [native code] (26)
-        8: _evaluateOn (28)
-        9: _evaluateAndWrap (30)
+        0: arc
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
+        5: performActions
+        6: Global Code
+        7: evaluateWithScopeExtension
+        8: _evaluateOn
+        9: _evaluateAndWrap
     1: arc(6, 7, 8, 9, 10, true)
       swizzleTypes: [Number, Number, Number, Number, Number, Boolean]
       trace:
-        0: arc - [native code] (13)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:81:42 (31)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:81:28 (32)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
-        5: performActions - inspector/canvas/recording-2d.html:397:25 (22)
-        6: Global Code - [program code] (24)
-        7: evaluateWithScopeExtension - [native code] (26)
-        8: _evaluateOn (28)
-        9: _evaluateAndWrap (30)
+        0: arc
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
+        5: performActions
+        6: Global Code
+        7: evaluateWithScopeExtension
+        8: _evaluateOn
+        9: _evaluateAndWrap
   1: (duration)
     0: arcTo(1, 2, 3, 4, 5)
       swizzleTypes: [Number, Number, Number, Number, Number]
       trace:
-        0: arcTo - [native code] (34)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:84:44 (35)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:84:28 (36)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: arcTo
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   2: (duration)
     0: beginPath()
       trace:
-        0: beginPath - [native code] (38)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:87:26 (39)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: beginPath
+        1: (anonymous function)
+        2: executeFrameFunction
   3: (duration)
     0: bezierCurveTo(1, 2, 3, 4, 5, 6)
       swizzleTypes: [Number, Number, Number, Number, Number, Number]
       trace:
-        0: bezierCurveTo - [native code] (41)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:90:30 (42)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: bezierCurveTo
+        1: (anonymous function)
+        2: executeFrameFunction
   4: (duration)
     0: clearRect(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: clearRect - [native code] (44)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:93:26 (45)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: clearRect
+        1: (anonymous function)
+        2: executeFrameFunction
   5: (duration)
     0: clearShadow()
       trace:
-        0: clearShadow - [native code] (47)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:96:28 (48)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: clearShadow
+        1: (anonymous function)
+        2: executeFrameFunction
   6: (duration)
     0: clip("nonzero")
-      swizzleTypes: [String (50)]
+      swizzleTypes: [String]
       trace:
-        0: clip - [native code] (51)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:99:21 (52)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: clip
+        1: (anonymous function)
+        2: executeFrameFunction
     1: clip("evenodd")
-      swizzleTypes: [String (53)]
+      swizzleTypes: [String]
       trace:
-        0: clip - [native code] (51)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:100:21 (54)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: clip
+        1: (anonymous function)
+        2: executeFrameFunction
     2: clip([object Path2D], "nonzero")
-      swizzleTypes: [Path2D (55), String (50)]
+      swizzleTypes: [Path2D, String]
       trace:
-        0: clip - [native code] (51)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:101:21 (56)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: clip
+        1: (anonymous function)
+        2: executeFrameFunction
     3: clip([object Path2D], "evenodd")
-      swizzleTypes: [Path2D (57), String (53)]
+      swizzleTypes: [Path2D, String]
       trace:
-        0: clip - [native code] (51)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:102:21 (58)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: clip
+        1: (anonymous function)
+        2: executeFrameFunction
   7: (duration)
     0: closePath()
       trace:
-        0: closePath - [native code] (60)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:105:26 (61)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: closePath
+        1: (anonymous function)
+        2: executeFrameFunction
   8: (duration)
     0: createImageData([object ImageData])
-      swizzleTypes: [ImageData (63)]
+      swizzleTypes: [ImageData]
       trace:
-        0: createImageData - [native code] (64)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:108:54 (65)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:108:28 (66)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createImageData
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     1: createImageData(2, 3)
       swizzleTypes: [Number, Number]
       trace:
-        0: createImageData - [native code] (64)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:109:54 (67)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:109:28 (68)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createImageData
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   9: (duration)
     0: createLinearGradient(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: createLinearGradient - [native code] (70)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:112:59 (71)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:112:28 (72)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createLinearGradient
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   10: (duration)
     0: createPattern([object HTMLImageElement], "testA")
-      swizzleTypes: [Image (74), String (75)]
+      swizzleTypes: [Image, String]
       trace:
-        0: createPattern - [native code] (76)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:115:52 (77)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:115:28 (78)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createPattern
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     1: createPattern([object HTMLImageElement], "testB")
-      swizzleTypes: [Image (79), String (80)]
+      swizzleTypes: [Image, String]
       trace:
-        0: createPattern - [native code] (76)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:116:52 (81)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:116:28 (82)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createPattern
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     2: createPattern([object HTMLImageElement], "testC")
-      swizzleTypes: [Image (83), String (84)]
+      swizzleTypes: [Image, String]
       trace:
-        0: createPattern - [native code] (76)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:117:52 (85)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:117:28 (86)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createPattern
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     3: createPattern([object ImageBitmap], "testD")
-      swizzleTypes: [ImageBitmap (74), String (87)]
+      swizzleTypes: [ImageBitmap, String]
       trace:
-        0: createPattern - [native code] (76)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:118:52 (88)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:118:28 (89)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createPattern
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   11: (duration)
     0: createRadialGradient(1, 2, 3, 4, 5, 6)
       swizzleTypes: [Number, Number, Number, Number, Number, Number]
       trace:
-        0: createRadialGradient - [native code] (91)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:121:59 (92)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:121:28 (93)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: createRadialGradient
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   12: (duration)
     0: direction
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:124:16 (95)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   13: (duration)
     0: drawFocusIfNeeded("Element")
-      swizzleTypes: [None (97)]
+      swizzleTypes: [None]
       trace:
-        0: drawFocusIfNeeded - [native code] (98)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:128:34 (99)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawFocusIfNeeded
+        1: (anonymous function)
+        2: executeFrameFunction
     1: drawFocusIfNeeded([object Path2D], "Element")
-      swizzleTypes: [Path2D (55), None (97)]
+      swizzleTypes: [Path2D, None]
       trace:
-        0: drawFocusIfNeeded - [native code] (98)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:129:34 (100)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawFocusIfNeeded
+        1: (anonymous function)
+        2: executeFrameFunction
   14: (duration)
     0: drawImage([object HTMLImageElement], 11, 12)
-      swizzleTypes: [Image (74), Number, Number]
+      swizzleTypes: [Image, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:132:48 (103)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:132:28 (104)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     1: drawImage([object HTMLImageElement], 13, 14, 15, 16)
-      swizzleTypes: [Image (74), Number, Number, Number, Number]
+      swizzleTypes: [Image, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:133:48 (105)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:133:28 (106)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     2: drawImage([object HTMLImageElement], 17, 18, 19, 110, 111, 112, 113, 114)
-      swizzleTypes: [Image (74), Number, Number, Number, Number, Number, Number, Number, Number]
+      swizzleTypes: [Image, Number, Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:134:48 (107)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:134:28 (108)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     3: drawImage([object HTMLImageElement], 21, 22)
-      swizzleTypes: [Image (79), Number, Number]
+      swizzleTypes: [Image, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:136:48 (109)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:136:28 (110)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     4: drawImage([object HTMLImageElement], 23, 24, 25, 26)
-      swizzleTypes: [Image (79), Number, Number, Number, Number]
+      swizzleTypes: [Image, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:137:48 (111)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:137:28 (112)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     5: drawImage([object HTMLImageElement], 27, 28, 29, 210, 211, 212, 213, 214)
-      swizzleTypes: [Image (79), Number, Number, Number, Number, Number, Number, Number, Number]
+      swizzleTypes: [Image, Number, Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:138:48 (113)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:138:28 (114)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     6: drawImage([object HTMLImageElement], 31, 32)
-      swizzleTypes: [Image (83), Number, Number]
+      swizzleTypes: [Image, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:140:48 (115)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:140:28 (116)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     7: drawImage([object HTMLImageElement], 33, 34, 35, 36)
-      swizzleTypes: [Image (83), Number, Number, Number, Number]
+      swizzleTypes: [Image, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:141:48 (117)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:141:28 (118)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     8: drawImage([object HTMLImageElement], 37, 38, 39, 310, 311, 312, 313, 314)
-      swizzleTypes: [Image (83), Number, Number, Number, Number, Number, Number, Number, Number]
+      swizzleTypes: [Image, Number, Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:142:48 (119)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:142:28 (120)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     9: drawImage([object ImageBitmap], 41, 42)
-      swizzleTypes: [ImageBitmap (74), Number, Number]
+      swizzleTypes: [ImageBitmap, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:144:48 (121)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:144:28 (122)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     10: drawImage([object ImageBitmap], 43, 44, 45, 46)
-      swizzleTypes: [ImageBitmap (74), Number, Number, Number, Number]
+      swizzleTypes: [ImageBitmap, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:145:48 (123)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:145:28 (124)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     11: drawImage([object ImageBitmap], 47, 48, 49, 410, 411, 412, 413, 414)
-      swizzleTypes: [ImageBitmap (74), Number, Number, Number, Number, Number, Number, Number, Number]
+      swizzleTypes: [ImageBitmap, Number, Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: drawImage - [native code] (102)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:146:48 (125)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:146:28 (126)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImage
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   15: (duration)
     0: drawImageFromRect([object HTMLImageElement], 1, 2, 3, 4, 5, 6, 7, 8, "")
-      swizzleTypes: [Image (74), Number, Number, Number, Number, Number, Number, Number, Number, String (10)]
+      swizzleTypes: [Image, Number, Number, Number, Number, Number, Number, Number, Number, String]
       trace:
-        0: drawImageFromRect - [native code] (128)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:149:34 (129)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImageFromRect
+        1: (anonymous function)
+        2: executeFrameFunction
     1: drawImageFromRect([object HTMLImageElement], 9, 10, 11, 12, 13, 14, 15, 16, "test")
-      swizzleTypes: [Image (74), Number, Number, Number, Number, Number, Number, Number, Number, String (130)]
+      swizzleTypes: [Image, Number, Number, Number, Number, Number, Number, Number, Number, String]
       trace:
-        0: drawImageFromRect - [native code] (128)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:150:34 (131)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: drawImageFromRect
+        1: (anonymous function)
+        2: executeFrameFunction
   16: (duration)
     0: ellipse(1, 2, 3, 4, 5, 6, 7, false)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, Boolean]
       trace:
-        0: ellipse - [native code] (133)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:153:46 (134)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:153:28 (135)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: ellipse
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     1: ellipse(8, 9, 10, 11, 12, 13, 14, true)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, Boolean]
       trace:
-        0: ellipse - [native code] (133)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:154:46 (136)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:154:28 (137)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: ellipse
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   17: (duration)
     0: fill("nonzero")
-      swizzleTypes: [String (50)]
+      swizzleTypes: [String]
       trace:
-        0: fill - [native code] (139)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:157:21 (140)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: fill
+        1: (anonymous function)
+        2: executeFrameFunction
     1: fill("evenodd")
-      swizzleTypes: [String (53)]
+      swizzleTypes: [String]
       trace:
-        0: fill - [native code] (139)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:158:21 (141)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: fill
+        1: (anonymous function)
+        2: executeFrameFunction
     2: fill([object Path2D], "nonzero")
-      swizzleTypes: [Path2D (55), String (50)]
+      swizzleTypes: [Path2D, String]
       trace:
-        0: fill - [native code] (139)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:159:21 (142)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: fill
+        1: (anonymous function)
+        2: executeFrameFunction
     3: fill([object Path2D], "evenodd")
-      swizzleTypes: [Path2D (57), String (53)]
+      swizzleTypes: [Path2D, String]
       trace:
-        0: fill - [native code] (139)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:160:21 (143)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: fill
+        1: (anonymous function)
+        2: executeFrameFunction
   18: (duration)
     0: fillRect(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: fillRect - [native code] (145)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:163:25 (146)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: fillRect
+        1: (anonymous function)
+        2: executeFrameFunction
   19: (duration)
     0: fillStyle
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:166:16 (148)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: fillStyle = "test"
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:167:16 (149)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     2: fillStyle = [object CanvasGradient]
-      swizzleTypes: [CanvasGradient (151)]
+      swizzleTypes: [CanvasGradient]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:168:16 (152)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     3: fillStyle = [object CanvasGradient]
-      swizzleTypes: [CanvasGradient (154)]
+      swizzleTypes: [CanvasGradient]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:169:16 (155)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     4: fillStyle = [object CanvasPattern]
-      swizzleTypes: [CanvasPattern (157)]
+      swizzleTypes: [CanvasPattern]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:170:16 (158)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   20: (duration)
     0: fillText("testA", 1, 2)
-      swizzleTypes: [String (75), Number, Number]
+      swizzleTypes: [String, Number, Number]
       trace:
-        0: fillText - [native code] (160)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:173:25 (161)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: fillText
+        1: (anonymous function)
+        2: executeFrameFunction
     1: fillText("testB", 3, 4, 5)
-      swizzleTypes: [String (80), Number, Number, Number]
+      swizzleTypes: [String, Number, Number, Number]
       trace:
-        0: fillText - [native code] (160)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:174:25 (162)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: fillText
+        1: (anonymous function)
+        2: executeFrameFunction
   21: (duration)
     0: font
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:177:16 (164)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: font = "test"
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:178:16 (165)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   22: (duration)
     0: getImageData(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: getImageData - [native code] (167)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:181:51 (168)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:181:28 (169)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: getImageData
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   23: (duration)
     0: getLineDash()
       trace:
-        0: getLineDash - [native code] (171)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:184:28 (172)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: getLineDash
+        1: (anonymous function)
+        2: executeFrameFunction
   24: (duration)
     0: getTransform()
       trace:
-        0: getTransform - [native code] (174)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:187:29 (175)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: getTransform
+        1: (anonymous function)
+        2: executeFrameFunction
   25: (duration)
     0: globalAlpha
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:190:16 (177)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: globalAlpha = 0
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:191:16 (178)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   26: (duration)
     0: globalCompositeOperation
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:194:16 (180)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: globalCompositeOperation = "test"
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:195:16 (181)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   27: (duration)
     0: imageSmoothingEnabled
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:198:16 (183)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: imageSmoothingEnabled = true
       swizzleTypes: [Boolean]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:199:16 (184)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   28: (duration)
     0: imageSmoothingQuality
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:202:16 (186)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: imageSmoothingQuality = "low"
-      swizzleTypes: [String (9)]
+      swizzleTypes: [String]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:203:16 (187)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   29: (duration)
     0: isPointInPath([object Path2D], 5, 6, "nonzero")
-      swizzleTypes: [Path2D (55), Number, Number, String (50)]
+      swizzleTypes: [Path2D, Number, Number, String]
       trace:
-        0: isPointInPath - [native code] (189)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:206:30 (190)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: isPointInPath
+        1: (anonymous function)
+        2: executeFrameFunction
     1: isPointInPath([object Path2D], 7, 8, "evenodd")
-      swizzleTypes: [Path2D (57), Number, Number, String (53)]
+      swizzleTypes: [Path2D, Number, Number, String]
       trace:
-        0: isPointInPath - [native code] (189)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:207:30 (191)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: isPointInPath
+        1: (anonymous function)
+        2: executeFrameFunction
     2: isPointInPath(9, 10, "nonzero")
-      swizzleTypes: [Number, Number, String (50)]
+      swizzleTypes: [Number, Number, String]
       trace:
-        0: isPointInPath - [native code] (189)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:208:30 (192)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: isPointInPath
+        1: (anonymous function)
+        2: executeFrameFunction
     3: isPointInPath(11, 12, "evenodd")
-      swizzleTypes: [Number, Number, String (53)]
+      swizzleTypes: [Number, Number, String]
       trace:
-        0: isPointInPath - [native code] (189)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:209:30 (193)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: isPointInPath
+        1: (anonymous function)
+        2: executeFrameFunction
   30: (duration)
     0: isPointInStroke([object Path2D], 3, 4)
-      swizzleTypes: [Path2D (55), Number, Number]
+      swizzleTypes: [Path2D, Number, Number]
       trace:
-        0: isPointInStroke - [native code] (195)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:212:32 (196)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: isPointInStroke
+        1: (anonymous function)
+        2: executeFrameFunction
     1: isPointInStroke(5, 6)
       swizzleTypes: [Number, Number]
       trace:
-        0: isPointInStroke - [native code] (195)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:213:32 (197)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: isPointInStroke
+        1: (anonymous function)
+        2: executeFrameFunction
   31: (duration)
     0: lineCap
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:216:16 (199)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   32: (duration)
     0: lineDashOffset
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:220:16 (201)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: lineDashOffset = 1
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:221:16 (202)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   33: (duration)
     0: lineJoin
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:224:16 (204)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   34: (duration)
     0: lineTo(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: lineTo - [native code] (206)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:228:23 (207)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: lineTo
+        1: (anonymous function)
+        2: executeFrameFunction
   35: (duration)
     0: lineWidth
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:231:16 (209)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: lineWidth = 1
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:232:16 (210)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   36: (duration)
     0: measureText("test")
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: measureText - [native code] (212)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:235:28 (213)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: measureText
+        1: (anonymous function)
+        2: executeFrameFunction
   37: (duration)
     0: miterLimit
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:238:16 (215)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: miterLimit = 1
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:239:16 (216)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   38: (duration)
     0: moveTo(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: moveTo - [native code] (218)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:242:23 (219)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: moveTo
+        1: (anonymous function)
+        2: executeFrameFunction
   39: (duration)
     0: putImageData([object ImageData], 5, 6)
-      swizzleTypes: [ImageData (63), Number, Number]
+      swizzleTypes: [ImageData, Number, Number]
       trace:
-        0: putImageData - [native code] (221)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:245:29 (222)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: putImageData
+        1: (anonymous function)
+        2: executeFrameFunction
     1: putImageData([object ImageData], 7, 8, 9, 10, 11, 12)
-      swizzleTypes: [ImageData (223), Number, Number, Number, Number, Number, Number]
+      swizzleTypes: [ImageData, Number, Number, Number, Number, Number, Number]
       trace:
-        0: putImageData - [native code] (221)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:246:29 (224)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: putImageData
+        1: (anonymous function)
+        2: executeFrameFunction
   40: (duration)
     0: quadraticCurveTo(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: quadraticCurveTo - [native code] (226)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:249:33 (227)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: quadraticCurveTo
+        1: (anonymous function)
+        2: executeFrameFunction
   41: (duration)
     0: rect(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: rect - [native code] (229)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:252:21 (230)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: rect
+        1: (anonymous function)
+        2: executeFrameFunction
   42: (duration)
     0: resetTransform()
       trace:
-        0: resetTransform - [native code] (232)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:255:31 (233)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: resetTransform
+        1: (anonymous function)
+        2: executeFrameFunction
   43: (duration)
     0: restore()
       trace:
-        0: restore - [native code] (235)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:258:24 (236)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: restore
+        1: (anonymous function)
+        2: executeFrameFunction
   44: (duration)
     0: rotate(1)
       swizzleTypes: [Number]
       trace:
-        0: rotate - [native code] (238)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:263:23 (239)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: rotate
+        1: (anonymous function)
+        2: executeFrameFunction
   45: (duration)
     0: save()
       trace:
-        0: save - [native code] (241)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:266:21 (242)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: save
+        1: (anonymous function)
+        2: executeFrameFunction
   46: (duration)
     0: scale(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: scale - [native code] (244)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:269:22 (245)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: scale
+        1: (anonymous function)
+        2: executeFrameFunction
   47: (duration)
     0: setAlpha(null)
       swizzleTypes: [Number]
       trace:
-        0: setAlpha - [native code] (247)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:272:25 (248)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setAlpha
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setAlpha(1)
       swizzleTypes: [Number]
       trace:
-        0: setAlpha - [native code] (247)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:273:25 (249)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setAlpha
+        1: (anonymous function)
+        2: executeFrameFunction
   48: (duration)
     0: setCompositeOperation("undefined")
-      swizzleTypes: [String (251)]
+      swizzleTypes: [String]
       trace:
-        0: setCompositeOperation - [native code] (252)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:276:38 (253)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setCompositeOperation
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setCompositeOperation("test")
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: setCompositeOperation - [native code] (252)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:277:38 (254)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setCompositeOperation
+        1: (anonymous function)
+        2: executeFrameFunction
   49: (duration)
     0: setFillColor("testA")
-      swizzleTypes: [String (75)]
+      swizzleTypes: [String]
       trace:
-        0: setFillColor - [native code] (256)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:280:29 (257)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setFillColor
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setFillColor("testB", 1)
-      swizzleTypes: [String (80), Number]
+      swizzleTypes: [String, Number]
       trace:
-        0: setFillColor - [native code] (256)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:281:29 (258)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setFillColor
+        1: (anonymous function)
+        2: executeFrameFunction
     2: setFillColor(2, 1)
       swizzleTypes: [Number, Number]
       trace:
-        0: setFillColor - [native code] (256)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:282:29 (259)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setFillColor
+        1: (anonymous function)
+        2: executeFrameFunction
     3: setFillColor(3, 4)
       swizzleTypes: [Number, Number]
       trace:
-        0: setFillColor - [native code] (256)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:283:29 (260)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setFillColor
+        1: (anonymous function)
+        2: executeFrameFunction
     4: setFillColor(5, 6, 7, 8)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: setFillColor - [native code] (256)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:284:29 (261)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setFillColor
+        1: (anonymous function)
+        2: executeFrameFunction
     5: setFillColor(9, 10, 11, 12, 13)
       swizzleTypes: [Number, Number, Number, Number, Number]
       trace:
-        0: setFillColor - [native code] (256)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:285:29 (262)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setFillColor
+        1: (anonymous function)
+        2: executeFrameFunction
   50: (duration)
     0: setLineCap("undefined")
-      swizzleTypes: [String (251)]
+      swizzleTypes: [String]
       trace:
-        0: setLineCap - [native code] (264)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:288:27 (265)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setLineCap
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setLineCap("test")
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: setLineCap - [native code] (264)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:289:27 (266)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setLineCap
+        1: (anonymous function)
+        2: executeFrameFunction
   51: (duration)
     0: setLineDash([1,2])
       swizzleTypes: [Array]
       trace:
-        0: setLineDash - [native code] (268)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:292:28 (269)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setLineDash
+        1: (anonymous function)
+        2: executeFrameFunction
   52: (duration)
     0: setLineJoin("undefined")
-      swizzleTypes: [String (251)]
+      swizzleTypes: [String]
       trace:
-        0: setLineJoin - [native code] (271)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:295:28 (272)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setLineJoin
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setLineJoin("test")
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: setLineJoin - [native code] (271)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:296:28 (273)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setLineJoin
+        1: (anonymous function)
+        2: executeFrameFunction
   53: (duration)
     0: setLineWidth(null)
       swizzleTypes: [Number]
       trace:
-        0: setLineWidth - [native code] (275)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:299:29 (276)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setLineWidth
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setLineWidth(1)
       swizzleTypes: [Number]
       trace:
-        0: setLineWidth - [native code] (275)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:300:29 (277)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setLineWidth
+        1: (anonymous function)
+        2: executeFrameFunction
   54: (duration)
     0: setMiterLimit(null)
       swizzleTypes: [Number]
       trace:
-        0: setMiterLimit - [native code] (279)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:303:30 (280)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setMiterLimit
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setMiterLimit(1)
       swizzleTypes: [Number]
       trace:
-        0: setMiterLimit - [native code] (279)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:304:30 (281)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setMiterLimit
+        1: (anonymous function)
+        2: executeFrameFunction
   55: (duration)
     0: setShadow(1, 2, 3, "")
-      swizzleTypes: [Number, Number, Number, String (283)]
+      swizzleTypes: [Number, Number, Number, String]
       trace:
-        0: setShadow - [native code] (284)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:307:26 (285)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setShadow
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setShadow(4, 5, 6, "test", 7)
-      swizzleTypes: [Number, Number, Number, String (130), Number]
+      swizzleTypes: [Number, Number, Number, String, Number]
       trace:
-        0: setShadow - [native code] (284)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:308:26 (286)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setShadow
+        1: (anonymous function)
+        2: executeFrameFunction
     2: setShadow(8, 9, 10, 11, 1)
       swizzleTypes: [Number, Number, Number, Number, Number]
       trace:
-        0: setShadow - [native code] (284)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:309:26 (287)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setShadow
+        1: (anonymous function)
+        2: executeFrameFunction
     3: setShadow(12, 13, 14, 15, 16)
       swizzleTypes: [Number, Number, Number, Number, Number]
       trace:
-        0: setShadow - [native code] (284)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:310:26 (288)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setShadow
+        1: (anonymous function)
+        2: executeFrameFunction
     4: setShadow(17, 18, 19, 20, 21, 22, 23)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: setShadow - [native code] (284)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:311:26 (289)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setShadow
+        1: (anonymous function)
+        2: executeFrameFunction
     5: setShadow(24, 25, 26, 27, 28, 29, 30, 31)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: setShadow - [native code] (284)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:312:26 (290)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setShadow
+        1: (anonymous function)
+        2: executeFrameFunction
   56: (duration)
     0: setStrokeColor("testA")
-      swizzleTypes: [String (75)]
+      swizzleTypes: [String]
       trace:
-        0: setStrokeColor - [native code] (292)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:315:31 (293)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setStrokeColor
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setStrokeColor("testB", 1)
-      swizzleTypes: [String (80), Number]
+      swizzleTypes: [String, Number]
       trace:
-        0: setStrokeColor - [native code] (292)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:316:31 (294)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setStrokeColor
+        1: (anonymous function)
+        2: executeFrameFunction
     2: setStrokeColor(2, 1)
       swizzleTypes: [Number, Number]
       trace:
-        0: setStrokeColor - [native code] (292)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:317:31 (295)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setStrokeColor
+        1: (anonymous function)
+        2: executeFrameFunction
     3: setStrokeColor(3, 4)
       swizzleTypes: [Number, Number]
       trace:
-        0: setStrokeColor - [native code] (292)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:318:31 (296)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setStrokeColor
+        1: (anonymous function)
+        2: executeFrameFunction
     4: setStrokeColor(5, 6, 7, 8)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: setStrokeColor - [native code] (292)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:319:31 (297)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setStrokeColor
+        1: (anonymous function)
+        2: executeFrameFunction
     5: setStrokeColor(9, 10, 11, 12, 13)
       swizzleTypes: [Number, Number, Number, Number, Number]
       trace:
-        0: setStrokeColor - [native code] (292)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:320:31 (298)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setStrokeColor
+        1: (anonymous function)
+        2: executeFrameFunction
   57: (duration)
     0: setTransform(1, 2, 3, 4, 5, 6)
       swizzleTypes: [Number, Number, Number, Number, Number, Number]
       trace:
-        0: setTransform - [native code] (300)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:323:29 (301)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setTransform
+        1: (anonymous function)
+        2: executeFrameFunction
     1: setTransform(matrix(1, 0, 0, 1, 0, 0))
       swizzleTypes: [DOMMatrix]
       trace:
-        0: setTransform - [native code] (300)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:324:51 (302)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:324:28 (303)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setTransform
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
     2: setTransform(matrix(7, 8, 9, 10, 11, 12))
       swizzleTypes: [DOMMatrix]
       trace:
-        0: setTransform - [native code] (300)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:325:51 (304)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:325:28 (305)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: setTransform
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
   58: (duration)
     0: shadowBlur
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:328:16 (307)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: shadowBlur = 1
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:329:16 (308)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   59: (duration)
     0: shadowColor
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:332:16 (310)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: shadowColor = "test"
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:333:16 (311)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   60: (duration)
     0: shadowOffsetX
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:336:16 (313)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: shadowOffsetX = 1
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:337:16 (314)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   61: (duration)
     0: shadowOffsetY
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:340:16 (316)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: shadowOffsetY = 1
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:341:16 (317)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   62: (duration)
     0: stroke()
       trace:
-        0: stroke - [native code] (319)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:344:23 (320)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: stroke
+        1: (anonymous function)
+        2: executeFrameFunction
     1: stroke([object Path2D])
-      swizzleTypes: [Path2D (55)]
+      swizzleTypes: [Path2D]
       trace:
-        0: stroke - [native code] (319)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:345:23 (321)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: stroke
+        1: (anonymous function)
+        2: executeFrameFunction
   63: (duration)
     0: strokeRect(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: strokeRect - [native code] (323)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:348:27 (324)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: strokeRect
+        1: (anonymous function)
+        2: executeFrameFunction
   64: (duration)
     0: strokeStyle
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:351:16 (326)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: strokeStyle = "test"
-      swizzleTypes: [String (130)]
+      swizzleTypes: [String]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:352:16 (327)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     2: strokeStyle = [object CanvasGradient]
-      swizzleTypes: [CanvasGradient (151)]
+      swizzleTypes: [CanvasGradient]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:353:16 (328)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     3: strokeStyle = [object CanvasGradient]
-      swizzleTypes: [CanvasGradient (154)]
+      swizzleTypes: [CanvasGradient]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:354:16 (329)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     4: strokeStyle = [object CanvasPattern]
-      swizzleTypes: [CanvasPattern (157)]
+      swizzleTypes: [CanvasPattern]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:355:16 (330)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   65: (duration)
     0: strokeText("testA", 1, 2)
-      swizzleTypes: [String (75), Number, Number]
+      swizzleTypes: [String, Number, Number]
       trace:
-        0: strokeText - [native code] (332)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:358:27 (333)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: strokeText
+        1: (anonymous function)
+        2: executeFrameFunction
     1: strokeText("testB", 3, 4, 5)
-      swizzleTypes: [String (80), Number, Number, Number]
+      swizzleTypes: [String, Number, Number, Number]
       trace:
-        0: strokeText - [native code] (332)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:359:27 (334)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: strokeText
+        1: (anonymous function)
+        2: executeFrameFunction
   66: (duration)
     0: textAlign
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:362:16 (336)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   67: (duration)
     0: textBaseline
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:366:16 (338)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   68: (duration)
     0: transform(1, 2, 3, 4, 5, 6)
       swizzleTypes: [Number, Number, Number, Number, Number, Number]
       trace:
-        0: transform - [native code] (340)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:370:26 (341)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: transform
+        1: (anonymous function)
+        2: executeFrameFunction
   69: (duration)
     0: translate(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: translate - [native code] (343)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:373:26 (344)
-        2: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: translate
+        1: (anonymous function)
+        2: executeFrameFunction
   70: (duration)
     0: webkitImageSmoothingEnabled
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:376:16 (346)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: webkitImageSmoothingEnabled = true
       swizzleTypes: [Boolean]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:377:16 (347)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   71: (duration)
     0: webkitLineDash
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:380:16 (349)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: webkitLineDash = [1,2]
       swizzleTypes: [Array]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:381:16 (350)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
   72: (duration)
     0: webkitLineDashOffset
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:384:16 (352)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
+        0: (anonymous function)
+        1: executeFrameFunction
     1: webkitLineDashOffset = 1
       swizzleTypes: [Number]
       trace:
-        0: (anonymous function) - inspector/canvas/recording-2d.html:385:16 (353)
-        1: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
-data:
-  0: "source-over"
-  1: "butt"
-  2: "miter"
-  3: "rgba(0, 0, 0, 0)"
-  4: "10px sans-serif"
-  5: "start"
-  6: "alphabetic"
-  7: "ltr"
-  8: "#000000"
-  9: "low"
-  10: ""
-  11: "arc"
-  12: "[native code]"
-  13: [11,12,0,0]
-  14: "inspector/canvas/recording-2d.html"
-  15: [10,14,81,42]
-  16: "ignoreException"
-  17: [16,14,52,13]
-  18: [10,14,81,28]
-  19: "executeFrameFunction"
-  20: [19,14,394,24]
-  21: "performActions"
-  22: [21,14,398,25]
-  23: "global code"
-  24: [23,10,1,15]
-  25: "evaluateWithScopeExtension"
-  26: [25,12,0,0]
-  27: "_evaluateOn"
-  28: [27,10,130,29]
-  29: "_evaluateAndWrap"
-  30: [29,10,124,108]
-  31: [10,14,82,42]
-  32: [10,14,82,28]
-  33: "arcTo"
-  34: [33,12,0,0]
-  35: [10,14,85,44]
-  36: [10,14,85,28]
-  37: "beginPath"
-  38: [37,12,0,0]
-  39: [10,14,88,26]
-  40: "bezierCurveTo"
-  41: [40,12,0,0]
-  42: [10,14,91,30]
-  43: "clearRect"
-  44: [43,12,0,0]
-  45: [10,14,94,26]
-  46: "clearShadow"
-  47: [46,12,0,0]
-  48: [10,14,97,28]
-  49: "clip"
-  50: "nonzero"
-  51: [49,12,0,0]
-  52: [10,14,100,21]
-  53: "evenodd"
-  54: [10,14,101,21]
-  55: "M1 2"
-  56: [10,14,102,21]
-  57: "M3 4"
-  58: [10,14,103,21]
-  59: "closePath"
-  60: [59,12,0,0]
-  61: [10,14,106,26]
-  62: "createImageData"
-  63: [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],1,4]
-  64: [62,12,0,0]
-  65: [10,14,109,54]
-  66: [10,14,109,28]
-  67: [10,14,110,54]
-  68: [10,14,110,28]
-  69: "createLinearGradient"
-  70: [69,12,0,0]
-  71: [10,14,113,59]
-  72: [10,14,113,28]
-  73: "createPattern"
-  74: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="
-  75: "testA"
-  76: [73,12,0,0]
-  77: [10,14,116,52]
-  78: [10,14,116,28]
-  79: "data:,"
-  80: "testB"
-  81: [10,14,117,52]
-  82: [10,14,117,28]
-  83: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
-  84: "testC"
-  85: [10,14,118,52]
-  86: [10,14,118,28]
-  87: "testD"
-  88: [10,14,119,52]
-  89: [10,14,119,28]
-  90: "createRadialGradient"
-  91: [90,12,0,0]
-  92: [10,14,122,59]
-  93: [10,14,122,28]
-  94: "direction"
-  95: [10,14,125,16]
-  96: "drawFocusIfNeeded"
-  97: "Element"
-  98: [96,12,0,0]
-  99: [10,14,129,34]
-  100: [10,14,130,34]
-  101: "drawImage"
-  102: [101,12,0,0]
-  103: [10,14,133,48]
-  104: [10,14,133,28]
-  105: [10,14,134,48]
-  106: [10,14,134,28]
-  107: [10,14,135,48]
-  108: [10,14,135,28]
-  109: [10,14,137,48]
-  110: [10,14,137,28]
-  111: [10,14,138,48]
-  112: [10,14,138,28]
-  113: [10,14,139,48]
-  114: [10,14,139,28]
-  115: [10,14,141,48]
-  116: [10,14,141,28]
-  117: [10,14,142,48]
-  118: [10,14,142,28]
-  119: [10,14,143,48]
-  120: [10,14,143,28]
-  121: [10,14,145,48]
-  122: [10,14,145,28]
-  123: [10,14,146,48]
-  124: [10,14,146,28]
-  125: [10,14,147,48]
-  126: [10,14,147,28]
-  127: "drawImageFromRect"
-  128: [127,12,0,0]
-  129: [10,14,150,34]
-  130: "test"
-  131: [10,14,151,34]
-  132: "ellipse"
-  133: [132,12,0,0]
-  134: [10,14,154,46]
-  135: [10,14,154,28]
-  136: [10,14,155,46]
-  137: [10,14,155,28]
-  138: "fill"
-  139: [138,12,0,0]
-  140: [10,14,158,21]
-  141: [10,14,159,21]
-  142: [10,14,160,21]
-  143: [10,14,161,21]
-  144: "fillRect"
-  145: [144,12,0,0]
-  146: [10,14,164,25]
-  147: "fillStyle"
-  148: [10,14,167,16]
-  149: [10,14,168,16]
-  150: "linear-gradient"
-  151: [150,[1,2,3,4],[]]
-  152: [10,14,169,16]
-  153: "radial-gradient"
-  154: [153,[1,2,3,4,5,6],[]]
-  155: [10,14,170,16]
-  156: "no-repeat"
-  157: [74,156]
-  158: [10,14,171,16]
-  159: "fillText"
-  160: [159,12,0,0]
-  161: [10,14,174,25]
-  162: [10,14,175,25]
-  163: "font"
-  164: [10,14,178,16]
-  165: [10,14,179,16]
-  166: "getImageData"
-  167: [166,12,0,0]
-  168: [10,14,182,51]
-  169: [10,14,182,28]
-  170: "getLineDash"
-  171: [170,12,0,0]
-  172: [10,14,185,28]
-  173: "getTransform"
-  174: [173,12,0,0]
-  175: [10,14,188,29]
-  176: "globalAlpha"
-  177: [10,14,191,16]
-  178: [10,14,192,16]
-  179: "globalCompositeOperation"
-  180: [10,14,195,16]
-  181: [10,14,196,16]
-  182: "imageSmoothingEnabled"
-  183: [10,14,199,16]
-  184: [10,14,200,16]
-  185: "imageSmoothingQuality"
-  186: [10,14,203,16]
-  187: [10,14,204,16]
-  188: "isPointInPath"
-  189: [188,12,0,0]
-  190: [10,14,207,30]
-  191: [10,14,208,30]
-  192: [10,14,209,30]
-  193: [10,14,210,30]
-  194: "isPointInStroke"
-  195: [194,12,0,0]
-  196: [10,14,213,32]
-  197: [10,14,214,32]
-  198: "lineCap"
-  199: [10,14,217,16]
-  200: "lineDashOffset"
-  201: [10,14,221,16]
-  202: [10,14,222,16]
-  203: "lineJoin"
-  204: [10,14,225,16]
-  205: "lineTo"
-  206: [205,12,0,0]
-  207: [10,14,229,23]
-  208: "lineWidth"
-  209: [10,14,232,16]
-  210: [10,14,233,16]
-  211: "measureText"
-  212: [211,12,0,0]
-  213: [10,14,236,28]
-  214: "miterLimit"
-  215: [10,14,239,16]
-  216: [10,14,240,16]
-  217: "moveTo"
-  218: [217,12,0,0]
-  219: [10,14,243,23]
-  220: "putImageData"
-  221: [220,12,0,0]
-  222: [10,14,246,29]
-  223: [[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],2,3]
-  224: [10,14,247,29]
-  225: "quadraticCurveTo"
-  226: [225,12,0,0]
-  227: [10,14,250,33]
-  228: "rect"
-  229: [228,12,0,0]
-  230: [10,14,253,21]
-  231: "resetTransform"
-  232: [231,12,0,0]
-  233: [10,14,256,31]
-  234: "restore"
-  235: [234,12,0,0]
-  236: [10,14,259,24]
-  237: "rotate"
-  238: [237,12,0,0]
-  239: [10,14,264,23]
-  240: "save"
-  241: [240,12,0,0]
-  242: [10,14,267,21]
-  243: "scale"
-  244: [243,12,0,0]
-  245: [10,14,270,22]
-  246: "setAlpha"
-  247: [246,12,0,0]
-  248: [10,14,273,25]
-  249: [10,14,274,25]
-  250: "setCompositeOperation"
-  251: "undefined"
-  252: [250,12,0,0]
-  253: [10,14,277,38]
-  254: [10,14,278,38]
-  255: "setFillColor"
-  256: [255,12,0,0]
-  257: [10,14,281,29]
-  258: [10,14,282,29]
-  259: [10,14,283,29]
-  260: [10,14,284,29]
-  261: [10,14,285,29]
-  262: [10,14,286,29]
-  263: "setLineCap"
-  264: [263,12,0,0]
-  265: [10,14,289,27]
-  266: [10,14,290,27]
-  267: "setLineDash"
-  268: [267,12,0,0]
-  269: [10,14,293,28]
-  270: "setLineJoin"
-  271: [270,12,0,0]
-  272: [10,14,296,28]
-  273: [10,14,297,28]
-  274: "setLineWidth"
-  275: [274,12,0,0]
-  276: [10,14,300,29]
-  277: [10,14,301,29]
-  278: "setMiterLimit"
-  279: [278,12,0,0]
-  280: [10,14,304,30]
-  281: [10,14,305,30]
-  282: "setShadow"
-  283: ""
-  284: [282,12,0,0]
-  285: [10,14,308,26]
-  286: [10,14,309,26]
-  287: [10,14,310,26]
-  288: [10,14,311,26]
-  289: [10,14,312,26]
-  290: [10,14,313,26]
-  291: "setStrokeColor"
-  292: [291,12,0,0]
-  293: [10,14,316,31]
-  294: [10,14,317,31]
-  295: [10,14,318,31]
-  296: [10,14,319,31]
-  297: [10,14,320,31]
-  298: [10,14,321,31]
-  299: "setTransform"
-  300: [299,12,0,0]
-  301: [10,14,324,29]
-  302: [10,14,325,51]
-  303: [10,14,325,28]
-  304: [10,14,326,51]
-  305: [10,14,326,28]
-  306: "shadowBlur"
-  307: [10,14,329,16]
-  308: [10,14,330,16]
-  309: "shadowColor"
-  310: [10,14,333,16]
-  311: [10,14,334,16]
-  312: "shadowOffsetX"
-  313: [10,14,337,16]
-  314: [10,14,338,16]
-  315: "shadowOffsetY"
-  316: [10,14,341,16]
-  317: [10,14,342,16]
-  318: "stroke"
-  319: [318,12,0,0]
-  320: [10,14,345,23]
-  321: [10,14,346,23]
-  322: "strokeRect"
-  323: [322,12,0,0]
-  324: [10,14,349,27]
-  325: "strokeStyle"
-  326: [10,14,352,16]
-  327: [10,14,353,16]
-  328: [10,14,354,16]
-  329: [10,14,355,16]
-  330: [10,14,356,16]
-  331: "strokeText"
-  332: [331,12,0,0]
-  333: [10,14,359,27]
-  334: [10,14,360,27]
-  335: "textAlign"
-  336: [10,14,363,16]
-  337: "textBaseline"
-  338: [10,14,367,16]
-  339: "transform"
-  340: [339,12,0,0]
-  341: [10,14,371,26]
-  342: "translate"
-  343: [342,12,0,0]
-  344: [10,14,374,26]
-  345: "webkitImageSmoothingEnabled"
-  346: [10,14,377,16]
-  347: [10,14,378,16]
-  348: "webkitLineDash"
-  349: [10,14,381,16]
-  350: [10,14,382,16]
-  351: "webkitLineDashOffset"
-  352: [10,14,385,16]
-  353: [10,14,386,16]
+        0: (anonymous function)
+        1: executeFrameFunction
 
 -- Running test case: Canvas.recording2D.memoryLimit
 initialState:
@@ -1489,48 +1100,16 @@ frames:
     0: arc(1, 2, 3, 4, 5, false)
       swizzleTypes: [Number, Number, Number, Number, Number, Boolean]
       trace:
-        0: arc - [native code] (13)
-        1: (anonymous function) - inspector/canvas/recording-2d.html:80:42 (15)
-        2: ignoreException - inspector/canvas/recording-2d.html:51:13 (17)
-        3: (anonymous function) - inspector/canvas/recording-2d.html:80:28 (18)
-        4: executeFrameFunction - inspector/canvas/recording-2d.html:393:24 (20)
-        5: performActions - inspector/canvas/recording-2d.html:397:25 (22)
-        6: Global Code - [program code] (24)
-        7: evaluateWithScopeExtension - [native code] (26)
-        8: _evaluateOn (28)
-        9: _evaluateAndWrap (30)
-data:
-  0: "source-over"
-  1: "butt"
-  2: "miter"
-  3: "rgba(0, 0, 0, 0)"
-  4: "10px sans-serif"
-  5: "start"
-  6: "alphabetic"
-  7: "ltr"
-  8: "#000000"
-  9: "low"
-  10: ""
-  11: "arc"
-  12: "[native code]"
-  13: [11,12,0,0]
-  14: "inspector/canvas/recording-2d.html"
-  15: [10,14,81,42]
-  16: "ignoreException"
-  17: [16,14,52,13]
-  18: [10,14,81,28]
-  19: "executeFrameFunction"
-  20: [19,14,394,24]
-  21: "performActions"
-  22: [21,14,398,25]
-  23: "global code"
-  24: [23,10,1,15]
-  25: "evaluateWithScopeExtension"
-  26: [25,12,0,0]
-  27: "_evaluateOn"
-  28: [27,10,130,29]
-  29: "_evaluateAndWrap"
-  30: [29,10,124,108]
+        0: arc
+        1: (anonymous function)
+        2: ignoreException
+        3: (anonymous function)
+        4: executeFrameFunction
+        5: performActions
+        6: Global Code
+        7: evaluateWithScopeExtension
+        8: _evaluateOn
+        9: _evaluateAndWrap
 
 -- Running test case: Canvas.recording2D.Console
 PASS: The recording should have the name "TEST".
diff --git a/LayoutTests/inspector/canvas/recording-bitmaprenderer-expected.txt b/LayoutTests/inspector/canvas/recording-bitmaprenderer-expected.txt
new file mode 100644 (file)
index 0000000..d2b4532
--- /dev/null
@@ -0,0 +1,72 @@
+Test that CanvasManager is able to record actions made to BitmapRenderer canvas contexts.
+
+
+== Running test suite: Canvas.recordingBitmapRenderer
+-- Running test case: Canvas.recordingBitmapRenderer.singleFrame
+initialState:
+  attributes:
+    width: 2
+    height: 2
+  parameters:
+  content: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
+frames:
+  0: (duration)
+    0: transferFromImageBitmap([object ImageBitmap])
+      swizzleTypes: [ImageBitmap]
+      trace:
+        0: transferFromImageBitmap
+        1: (anonymous function)
+        2: executeFrameFunction
+        3: (anonymous function)
+        4: asyncFunctionResume
+        5: (anonymous function)
+        6: promiseReactionJob
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="
+
+-- Running test case: Canvas.recordingBitmapRenderer.multipleFrames
+initialState:
+  attributes:
+    width: 2
+    height: 2
+  parameters:
+  content: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
+frames:
+  0: (duration)
+    0: transferFromImageBitmap([object ImageBitmap])
+      swizzleTypes: [ImageBitmap]
+      trace:
+        0: transferFromImageBitmap
+        1: (anonymous function)
+        2: executeFrameFunction
+        3: (anonymous function)
+        4: asyncFunctionResume
+        5: (anonymous function)
+        6: promiseReactionJob
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="
+
+-- Running test case: Canvas.recordingBitmapRenderer.memoryLimit
+initialState:
+  attributes:
+    width: 2
+    height: 2
+  parameters:
+  content: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
+frames:
+  0: (duration) (incomplete)
+    0: transferFromImageBitmap([object ImageBitmap])
+      swizzleTypes: [ImageBitmap]
+      trace:
+        0: transferFromImageBitmap
+        1: (anonymous function)
+        2: executeFrameFunction
+        3: (anonymous function)
+        4: asyncFunctionResume
+        5: (anonymous function)
+        6: promiseReactionJob
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC"
+
+-- Running test case: Canvas.recordingBitmapRenderer.Console
+PASS: The recording should have the name "TEST".
+PASS: The recording should have one frame.
+PASS: The first frame should have one action.
+
diff --git a/LayoutTests/inspector/canvas/recording-bitmaprenderer.html b/LayoutTests/inspector/canvas/recording-bitmaprenderer.html
new file mode 100644 (file)
index 0000000..1169ded
--- /dev/null
@@ -0,0 +1,134 @@
+<!DOCTYPE html>
+<html>
+<head>
+<script src="../../http/tests/inspector/resources/inspector-test.js"></script>
+<script src="resources/recording-utilities.js"></script>
+<script>
+let ctx = null;
+
+let redImage = new Image;
+redImage.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII=";
+
+let blueImage = new Image;
+blueImage.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABRJREFUCB1jZGD4/58BCJhABAgAAB0ZAgJSPDJ6AAAAAElFTkSuQmCC";
+
+let transparentImage = new Image;
+transparentImage.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAAAtJREFUCB1jYEAHAAASAAGAFMrMAAAAAElFTkSuQmCC";
+
+// Blank canvas
+let canvas = document.createElement("canvas");
+canvas.width = 2;
+canvas.height = 2;
+
+function load() {
+    ctx = canvas.getContext("bitmaprenderer");
+
+    document.body.appendChild(canvas);
+
+    runTest();
+}
+
+function ignoreException(func){
+    try {
+        func();
+    } catch (e) { }
+}
+
+let timeoutID = NaN;
+
+function cancelActions() {
+    clearTimeout(timeoutID);
+    timeoutID = NaN;
+
+    createImageBitmap(transparentImage).then((transparentBitmap) => {
+        ctx.transferFromImageBitmap(transparentBitmap);
+    });
+}
+
+async function performActions() {
+    let redBitmap = await createImageBitmap(redImage);
+
+    let frames = [
+        () => {
+            ctx.transferFromImageBitmap(redBitmap);
+        },
+        () => {
+            TestPage.dispatchEventToFrontend("LastFrame");
+        },
+    ];
+    let index = 0;
+    function executeFrameFunction() {
+        frames[index++]();
+        if (index < frames.length)
+            timeoutID = setTimeout(executeFrameFunction, 0);
+    };
+    executeFrameFunction();
+}
+
+async function performConsoleActions() {
+    let [redBitmap, blueBitmap] = await Promise.all([
+        createImageBitmap(redImage),
+        createImageBitmap(blueImage),
+    ]);
+
+    console.record(ctx, {name: "TEST"});
+
+    ctx.transferFromImageBitmap(redBitmap);
+
+    console.recordEnd(ctx);
+
+    ctx.transferFromImageBitmap(blueBitmap);
+}
+
+function test() {
+    let suite = InspectorTest.createAsyncSuite("Canvas.recordingBitmapRenderer");
+
+    suite.addTestCase({
+        name: "Canvas.recordingBitmapRenderer.singleFrame",
+        description: "Check that the recording is stopped after a single frame.",
+        test(resolve, reject) {
+            startRecording(WI.Canvas.ContextType.BitmapRenderer, resolve, reject, {singleFrame: true});
+        },
+    });
+
+    suite.addTestCase({
+        name: "Canvas.recordingBitmapRenderer.multipleFrames",
+        description: "Check that recording data is serialized correctly for multiple frames.",
+        test(resolve, reject) {
+            let canvas = startRecording(WI.Canvas.ContextType.BitmapRenderer, resolve, reject, {singleFrame: false});
+
+            InspectorTest.singleFireEventListener("LastFrame", () => {
+                CanvasAgent.stopRecording(canvas.identifier, (error) => {
+                    if (error) {
+                        reject(error);
+                        return;
+                    }
+                });
+            });
+        },
+    });
+
+    suite.addTestCase({
+        name: "Canvas.recordingBitmapRenderer.memoryLimit",
+        description: "Check that the recording is stopped when it reaches the memory limit.",
+        test(resolve, reject) {
+            startRecording(WI.Canvas.ContextType.BitmapRenderer, resolve, reject, {memoryLimit: 10});
+        },
+    });
+
+    suite.addTestCase({
+        name: "Canvas.recordingBitmapRenderer.Console",
+        description: "Check that a recording can be triggered by console.record().",
+        test(resolve, reject) {
+            consoleRecord(resolve, reject);
+        },
+    });
+
+    suite.runTestCasesAndFinish();
+}
+</script>
+</head>
+<body onload="load()">
+    <p>Test that CanvasManager is able to record actions made to BitmapRenderer canvas contexts.</p>
+</body>
+</html>
index 422cd49..6312e37 100644 (file)
@@ -15,33 +15,14 @@ frames:
     0: activeTexture(1)
       swizzleTypes: [Number]
       trace:
-        0: activeTexture - [native code] (2)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:72:34 (5)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
-        3: performActions - inspector/canvas/recording-webgl.html:495:25 (9)
-        4: Global Code - [program code] (11)
-        5: evaluateWithScopeExtension - [native code] (13)
-        6: _evaluateOn (15)
-        7: _evaluateAndWrap (17)
-data:
-  0: "activeTexture"
-  1: "[native code]"
-  2: [0,1,0,0]
-  3: ""
-  4: "inspector/canvas/recording-webgl.html"
-  5: [3,4,73,34]
-  6: "executeFrameFunction"
-  7: [6,4,492,24]
-  8: "performActions"
-  9: [8,4,496,25]
-  10: "global code"
-  11: [10,3,1,15]
-  12: "evaluateWithScopeExtension"
-  13: [12,1,0,0]
-  14: "_evaluateOn"
-  15: [14,3,130,29]
-  16: "_evaluateAndWrap"
-  17: [16,3,124,108]
+        0: activeTexture
+        1: (anonymous function)
+        2: executeFrameFunction
+        3: performActions
+        4: Global Code
+        5: evaluateWithScopeExtension
+        6: _evaluateOn
+        7: _evaluateAndWrap
 
 -- Running test case: Canvas.recordingWebGL.multipleFrames
 initialState:
@@ -56,1408 +37,975 @@ frames:
     0: activeTexture(1)
       swizzleTypes: [Number]
       trace:
-        0: activeTexture - [native code] (2)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:72:34 (5)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
-        3: performActions - inspector/canvas/recording-webgl.html:495:25 (9)
-        4: Global Code - [program code] (11)
-        5: evaluateWithScopeExtension - [native code] (13)
-        6: _evaluateOn (15)
-        7: _evaluateAndWrap (17)
+        0: activeTexture
+        1: (anonymous function)
+        2: executeFrameFunction
+        3: performActions
+        4: Global Code
+        5: evaluateWithScopeExtension
+        6: _evaluateOn
+        7: _evaluateAndWrap
   1: (duration)
     0: attachShader(0, 0)
       swizzleTypes: [WebGLProgram, WebGLShader]
       trace:
-        0: attachShader - [native code] (19)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:75:33 (20)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: attachShader
+        1: (anonymous function)
+        2: executeFrameFunction
   2: (duration)
     0: bindAttribLocation(0, 1, "test")
-      swizzleTypes: [WebGLProgram, Number, String (22)]
+      swizzleTypes: [WebGLProgram, Number, String]
       trace:
-        0: bindAttribLocation - [native code] (23)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:78:39 (24)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bindAttribLocation
+        1: (anonymous function)
+        2: executeFrameFunction
   3: (duration)
     0: bindBuffer(1, 0)
       swizzleTypes: [Number, WebGLBuffer]
       trace:
-        0: bindBuffer - [native code] (26)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:81:31 (27)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bindBuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   4: (duration)
     0: bindFramebuffer(1, 0)
       swizzleTypes: [Number, WebGLFramebuffer]
       trace:
-        0: bindFramebuffer - [native code] (29)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:84:36 (30)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bindFramebuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   5: (duration)
     0: bindRenderbuffer(1, 0)
       swizzleTypes: [Number, WebGLRenderbuffer]
       trace:
-        0: bindRenderbuffer - [native code] (32)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:87:37 (33)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bindRenderbuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   6: (duration)
     0: bindTexture(1, 0)
       swizzleTypes: [Number, WebGLTexture]
       trace:
-        0: bindTexture - [native code] (35)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:90:32 (36)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bindTexture
+        1: (anonymous function)
+        2: executeFrameFunction
   7: (duration)
     0: blendColor(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: blendColor - [native code] (38)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:93:31 (39)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: blendColor
+        1: (anonymous function)
+        2: executeFrameFunction
   8: (duration)
     0: blendEquation(1)
       swizzleTypes: [Number]
       trace:
-        0: blendEquation - [native code] (41)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:96:34 (42)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: blendEquation
+        1: (anonymous function)
+        2: executeFrameFunction
   9: (duration)
     0: blendEquationSeparate(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: blendEquationSeparate - [native code] (44)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:99:42 (45)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: blendEquationSeparate
+        1: (anonymous function)
+        2: executeFrameFunction
   10: (duration)
     0: blendFunc(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: blendFunc - [native code] (47)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:102:30 (48)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: blendFunc
+        1: (anonymous function)
+        2: executeFrameFunction
   11: (duration)
     0: blendFuncSeparate(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: blendFuncSeparate - [native code] (50)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:105:38 (51)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: blendFuncSeparate
+        1: (anonymous function)
+        2: executeFrameFunction
   12: (duration)
     0: bufferData(1, 0, 2)
       swizzleTypes: [Number, TypedArray, Number]
       trace:
-        0: bufferData - [native code] (53)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:108:31 (54)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bufferData
+        1: (anonymous function)
+        2: executeFrameFunction
     1: bufferData(3, 4, 5)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: bufferData - [native code] (53)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:109:31 (55)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bufferData
+        1: (anonymous function)
+        2: executeFrameFunction
   13: (duration)
     0: bufferSubData(1, 2, 0)
       swizzleTypes: [Number, Number, TypedArray]
       trace:
-        0: bufferSubData - [native code] (57)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:112:34 (58)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: bufferSubData
+        1: (anonymous function)
+        2: executeFrameFunction
   14: (duration)
     0: checkFramebufferStatus(1)
       swizzleTypes: [Number]
       trace:
-        0: checkFramebufferStatus - [native code] (60)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:115:43 (61)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: checkFramebufferStatus
+        1: (anonymous function)
+        2: executeFrameFunction
   15: (duration)
     0: clear(1)
       swizzleTypes: [Number]
       trace:
-        0: clear - [native code] (63)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:118:26 (64)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
-      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAylJREFUeAHt0DEBAAAAwqD1T20IX4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAdGL/UAAEPpnR6AAAAAElFTkSuQmCC" (65)
+        0: clear
+        1: (anonymous function)
+        2: executeFrameFunction
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAylJREFUeAHt0DEBAAAAwqD1T20IX4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAdGL/UAAEPpnR6AAAAAElFTkSuQmCC"
   16: (duration)
     0: clearColor(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: clearColor - [native code] (67)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:121:31 (68)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: clearColor
+        1: (anonymous function)
+        2: executeFrameFunction
   17: (duration)
     0: clearDepth(1)
       swizzleTypes: [Number]
       trace:
-        0: clearDepth - [native code] (70)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:124:31 (71)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: clearDepth
+        1: (anonymous function)
+        2: executeFrameFunction
   18: (duration)
     0: clearStencil(1)
       swizzleTypes: [Number]
       trace:
-        0: clearStencil - [native code] (73)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:127:33 (74)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: clearStencil
+        1: (anonymous function)
+        2: executeFrameFunction
   19: (duration)
     0: colorMask(true, false, true, false)
       swizzleTypes: [Boolean, Boolean, Boolean, Boolean]
       trace:
-        0: colorMask - [native code] (76)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:130:30 (77)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: colorMask
+        1: (anonymous function)
+        2: executeFrameFunction
   20: (duration)
     0: compileShader(0)
       swizzleTypes: [WebGLShader]
       trace:
-        0: compileShader - [native code] (79)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:133:34 (80)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: compileShader
+        1: (anonymous function)
+        2: executeFrameFunction
   21: (duration)
     0: compressedTexImage2D(1, 2, 3, 4, 5, 6, 0)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, TypedArray]
       trace:
-        0: compressedTexImage2D - [native code] (82)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:136:41 (83)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: compressedTexImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
   22: (duration)
     0: compressedTexSubImage2D(1, 2, 3, 4, 5, 6, 7, 0)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, TypedArray]
       trace:
-        0: compressedTexSubImage2D - [native code] (85)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:139:44 (86)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: compressedTexSubImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
   23: (duration)
     0: copyTexImage2D(1, 2, 3, 4, 5, 6, 7, 8)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: copyTexImage2D - [native code] (88)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:142:35 (89)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: copyTexImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
   24: (duration)
     0: copyTexSubImage2D(1, 2, 3, 4, 5, 6, 7, 8)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, Number]
       trace:
-        0: copyTexSubImage2D - [native code] (91)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:145:38 (92)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: copyTexSubImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
   25: (duration)
     0: createBuffer()
       trace:
-        0: createBuffer - [native code] (94)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:148:33 (95)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: createBuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   26: (duration)
     0: createFramebuffer()
       trace:
-        0: createFramebuffer - [native code] (97)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:151:38 (98)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: createFramebuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   27: (duration)
     0: createProgram()
       trace:
-        0: createProgram - [native code] (100)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:154:34 (101)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: createProgram
+        1: (anonymous function)
+        2: executeFrameFunction
   28: (duration)
     0: createRenderbuffer()
       trace:
-        0: createRenderbuffer - [native code] (103)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:157:39 (104)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: createRenderbuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   29: (duration)
     0: createShader(1)
       swizzleTypes: [Number]
       trace:
-        0: createShader - [native code] (106)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:160:33 (107)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: createShader
+        1: (anonymous function)
+        2: executeFrameFunction
   30: (duration)
     0: createTexture()
       trace:
-        0: createTexture - [native code] (109)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:163:34 (110)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: createTexture
+        1: (anonymous function)
+        2: executeFrameFunction
   31: (duration)
     0: cullFace(1)
       swizzleTypes: [Number]
       trace:
-        0: cullFace - [native code] (112)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:166:29 (113)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: cullFace
+        1: (anonymous function)
+        2: executeFrameFunction
   32: (duration)
     0: deleteBuffer(0)
       swizzleTypes: [WebGLBuffer]
       trace:
-        0: deleteBuffer - [native code] (115)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:169:33 (116)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: deleteBuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   33: (duration)
     0: deleteFramebuffer(0)
       swizzleTypes: [WebGLFramebuffer]
       trace:
-        0: deleteFramebuffer - [native code] (118)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:172:38 (119)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: deleteFramebuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   34: (duration)
     0: deleteProgram(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: deleteProgram - [native code] (121)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:175:34 (122)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: deleteProgram
+        1: (anonymous function)
+        2: executeFrameFunction
   35: (duration)
     0: deleteRenderbuffer(0)
       swizzleTypes: [WebGLRenderbuffer]
       trace:
-        0: deleteRenderbuffer - [native code] (124)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:178:39 (125)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: deleteRenderbuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   36: (duration)
     0: deleteShader(0)
       swizzleTypes: [WebGLShader]
       trace:
-        0: deleteShader - [native code] (127)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:181:33 (128)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: deleteShader
+        1: (anonymous function)
+        2: executeFrameFunction
   37: (duration)
     0: deleteTexture(0)
       swizzleTypes: [WebGLTexture]
       trace:
-        0: deleteTexture - [native code] (130)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:184:34 (131)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: deleteTexture
+        1: (anonymous function)
+        2: executeFrameFunction
   38: (duration)
     0: depthFunc(1)
       swizzleTypes: [Number]
       trace:
-        0: depthFunc - [native code] (133)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:187:30 (134)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: depthFunc
+        1: (anonymous function)
+        2: executeFrameFunction
   39: (duration)
     0: depthMask(true)
       swizzleTypes: [Boolean]
       trace:
-        0: depthMask - [native code] (136)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:190:30 (137)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: depthMask
+        1: (anonymous function)
+        2: executeFrameFunction
   40: (duration)
     0: depthRange(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: depthRange - [native code] (139)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:193:31 (140)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: depthRange
+        1: (anonymous function)
+        2: executeFrameFunction
   41: (duration)
     0: detachShader(0, 0)
       swizzleTypes: [WebGLProgram, WebGLShader]
       trace:
-        0: detachShader - [native code] (142)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:196:33 (143)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: detachShader
+        1: (anonymous function)
+        2: executeFrameFunction
   42: (duration)
     0: disable(1)
       swizzleTypes: [Number]
       trace:
-        0: disable - [native code] (145)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:199:28 (146)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: disable
+        1: (anonymous function)
+        2: executeFrameFunction
   43: (duration)
     0: disableVertexAttribArray(1)
       swizzleTypes: [Number]
       trace:
-        0: disableVertexAttribArray - [native code] (148)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:202:45 (149)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: disableVertexAttribArray
+        1: (anonymous function)
+        2: executeFrameFunction
   44: (duration)
     0: drawArrays(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: drawArrays - [native code] (151)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:205:31 (152)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
-      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAylJREFUeAHt0DEBAAAAwqD1T20IX4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAdGL/UAAEPpnR6AAAAAElFTkSuQmCC" (65)
+        0: drawArrays
+        1: (anonymous function)
+        2: executeFrameFunction
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAylJREFUeAHt0DEBAAAAwqD1T20IX4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAdGL/UAAEPpnR6AAAAAElFTkSuQmCC"
   45: (duration)
     0: drawElements(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: drawElements - [native code] (154)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:208:33 (155)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
-      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAylJREFUeAHt0DEBAAAAwqD1T20IX4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAdGL/UAAEPpnR6AAAAAElFTkSuQmCC" (65)
+        0: drawElements
+        1: (anonymous function)
+        2: executeFrameFunction
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAylJREFUeAHt0DEBAAAAwqD1T20IX4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAdGL/UAAEPpnR6AAAAAElFTkSuQmCC"
   46: (duration)
     0: enable(1)
       swizzleTypes: [Number]
       trace:
-        0: enable - [native code] (157)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:211:27 (158)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: enable
+        1: (anonymous function)
+        2: executeFrameFunction
   47: (duration)
     0: enableVertexAttribArray(1)
       swizzleTypes: [Number]
       trace:
-        0: enableVertexAttribArray - [native code] (160)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:214:44 (161)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: enableVertexAttribArray
+        1: (anonymous function)
+        2: executeFrameFunction
   48: (duration)
     0: finish()
       trace:
-        0: finish - [native code] (163)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:217:27 (164)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: finish
+        1: (anonymous function)
+        2: executeFrameFunction
   49: (duration)
     0: flush()
       trace:
-        0: flush - [native code] (166)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:220:26 (167)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: flush
+        1: (anonymous function)
+        2: executeFrameFunction
   50: (duration)
     0: framebufferRenderbuffer(1, 2, 3, 0)
       swizzleTypes: [Number, Number, Number, WebGLRenderbuffer]
       trace:
-        0: framebufferRenderbuffer - [native code] (169)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:223:44 (170)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: framebufferRenderbuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   51: (duration)
     0: framebufferTexture2D(1, 2, 3, 0, 4)
       swizzleTypes: [Number, Number, Number, WebGLTexture, Number]
       trace:
-        0: framebufferTexture2D - [native code] (172)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:226:41 (173)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: framebufferTexture2D
+        1: (anonymous function)
+        2: executeFrameFunction
   52: (duration)
     0: frontFace(1)
       swizzleTypes: [Number]
       trace:
-        0: frontFace - [native code] (175)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:229:30 (176)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: frontFace
+        1: (anonymous function)
+        2: executeFrameFunction
   53: (duration)
     0: generateMipmap(1)
       swizzleTypes: [Number]
       trace:
-        0: generateMipmap - [native code] (178)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:232:35 (179)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: generateMipmap
+        1: (anonymous function)
+        2: executeFrameFunction
   54: (duration)
     0: getActiveAttrib(0, 1)
       swizzleTypes: [WebGLProgram, Number]
       trace:
-        0: getActiveAttrib - [native code] (181)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:235:36 (182)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getActiveAttrib
+        1: (anonymous function)
+        2: executeFrameFunction
   55: (duration)
     0: getActiveUniform(0, 1)
       swizzleTypes: [WebGLProgram, Number]
       trace:
-        0: getActiveUniform - [native code] (184)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:238:37 (185)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getActiveUniform
+        1: (anonymous function)
+        2: executeFrameFunction
   56: (duration)
     0: getAttachedShaders(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: getAttachedShaders - [native code] (187)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:241:39 (188)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getAttachedShaders
+        1: (anonymous function)
+        2: executeFrameFunction
   57: (duration)
     0: getAttribLocation(0, "test")
-      swizzleTypes: [WebGLProgram, String (22)]
+      swizzleTypes: [WebGLProgram, String]
       trace:
-        0: getAttribLocation - [native code] (190)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:244:38 (191)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getAttribLocation
+        1: (anonymous function)
+        2: executeFrameFunction
   58: (duration)
     0: getBufferParameter(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: getBufferParameter - [native code] (193)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:247:39 (194)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getBufferParameter
+        1: (anonymous function)
+        2: executeFrameFunction
   59: (duration)
     0: getContextAttributes()
       trace:
-        0: getContextAttributes - [native code] (196)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:250:41 (197)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getContextAttributes
+        1: (anonymous function)
+        2: executeFrameFunction
   60: (duration)
     0: getError()
       trace:
-        0: getError - [native code] (199)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:253:29 (200)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getError
+        1: (anonymous function)
+        2: executeFrameFunction
   61: (duration)
     0: getExtension("test")
-      swizzleTypes: [String (22)]
+      swizzleTypes: [String]
       trace:
-        0: getExtension - [native code] (202)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:256:33 (203)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getExtension
+        1: (anonymous function)
+        2: executeFrameFunction
   62: (duration)
     0: getFramebufferAttachmentParameter(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: getFramebufferAttachmentParameter - [native code] (205)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:259:54 (206)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getFramebufferAttachmentParameter
+        1: (anonymous function)
+        2: executeFrameFunction
   63: (duration)
     0: getParameter(1)
       swizzleTypes: [Number]
       trace:
-        0: getParameter - [native code] (208)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:262:33 (209)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getParameter
+        1: (anonymous function)
+        2: executeFrameFunction
   64: (duration)
     0: getProgramInfoLog(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: getProgramInfoLog - [native code] (211)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:265:38 (212)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getProgramInfoLog
+        1: (anonymous function)
+        2: executeFrameFunction
   65: (duration)
     0: getProgramParameter(0, 1)
       swizzleTypes: [WebGLProgram, Number]
       trace:
-        0: getProgramParameter - [native code] (214)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:268:40 (215)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getProgramParameter
+        1: (anonymous function)
+        2: executeFrameFunction
   66: (duration)
     0: getRenderbufferParameter(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: getRenderbufferParameter - [native code] (217)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:271:45 (218)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getRenderbufferParameter
+        1: (anonymous function)
+        2: executeFrameFunction
   67: (duration)
     0: getShaderInfoLog(0)
       swizzleTypes: [WebGLShader]
       trace:
-        0: getShaderInfoLog - [native code] (220)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:274:37 (221)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getShaderInfoLog
+        1: (anonymous function)
+        2: executeFrameFunction
   68: (duration)
     0: getShaderParameter(0, 1)
       swizzleTypes: [WebGLShader, Number]
       trace:
-        0: getShaderParameter - [native code] (223)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:277:39 (224)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getShaderParameter
+        1: (anonymous function)
+        2: executeFrameFunction
   69: (duration)
     0: getShaderPrecisionFormat(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: getShaderPrecisionFormat - [native code] (226)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:280:45 (227)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getShaderPrecisionFormat
+        1: (anonymous function)
+        2: executeFrameFunction
   70: (duration)
     0: getShaderSource(0)
       swizzleTypes: [WebGLShader]
       trace:
-        0: getShaderSource - [native code] (229)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:283:36 (230)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getShaderSource
+        1: (anonymous function)
+        2: executeFrameFunction
   71: (duration)
     0: getSupportedExtensions()
       trace:
-        0: getSupportedExtensions - [native code] (232)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:286:43 (233)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getSupportedExtensions
+        1: (anonymous function)
+        2: executeFrameFunction
   72: (duration)
     0: getTexParameter(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: getTexParameter - [native code] (235)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:289:36 (236)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getTexParameter
+        1: (anonymous function)
+        2: executeFrameFunction
   73: (duration)
     0: getUniform(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: getUniform - [native code] (238)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:292:31 (239)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getUniform
+        1: (anonymous function)
+        2: executeFrameFunction
   74: (duration)
     0: getUniformLocation(0, "test")
-      swizzleTypes: [WebGLProgram, String (22)]
+      swizzleTypes: [WebGLProgram, String]
       trace:
-        0: getUniformLocation - [native code] (241)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:295:39 (242)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getUniformLocation
+        1: (anonymous function)
+        2: executeFrameFunction
   75: (duration)
     0: getVertexAttrib(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: getVertexAttrib - [native code] (244)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:298:36 (245)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getVertexAttrib
+        1: (anonymous function)
+        2: executeFrameFunction
   76: (duration)
     0: getVertexAttribOffset(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: getVertexAttribOffset - [native code] (247)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:301:42 (248)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: getVertexAttribOffset
+        1: (anonymous function)
+        2: executeFrameFunction
   77: (duration)
     0: hint(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: hint - [native code] (250)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:304:25 (251)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: hint
+        1: (anonymous function)
+        2: executeFrameFunction
   78: (duration)
     0: isBuffer(0)
       swizzleTypes: [WebGLBuffer]
       trace:
-        0: isBuffer - [native code] (253)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:307:29 (254)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isBuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   79: (duration)
     0: isContextLost()
       trace:
-        0: isContextLost - [native code] (256)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:310:34 (257)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isContextLost
+        1: (anonymous function)
+        2: executeFrameFunction
   80: (duration)
     0: isEnabled(1)
       swizzleTypes: [Number]
       trace:
-        0: isEnabled - [native code] (259)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:313:30 (260)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isEnabled
+        1: (anonymous function)
+        2: executeFrameFunction
   81: (duration)
     0: isFramebuffer(0)
       swizzleTypes: [WebGLFramebuffer]
       trace:
-        0: isFramebuffer - [native code] (262)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:316:34 (263)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isFramebuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   82: (duration)
     0: isProgram(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: isProgram - [native code] (265)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:319:30 (266)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isProgram
+        1: (anonymous function)
+        2: executeFrameFunction
   83: (duration)
     0: isRenderbuffer(0)
       swizzleTypes: [WebGLRenderbuffer]
       trace:
-        0: isRenderbuffer - [native code] (268)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:322:35 (269)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isRenderbuffer
+        1: (anonymous function)
+        2: executeFrameFunction
   84: (duration)
     0: isShader(0)
       swizzleTypes: [WebGLShader]
       trace:
-        0: isShader - [native code] (271)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:325:29 (272)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isShader
+        1: (anonymous function)
+        2: executeFrameFunction
   85: (duration)
     0: isTexture(0)
       swizzleTypes: [WebGLTexture]
       trace:
-        0: isTexture - [native code] (274)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:328:30 (275)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: isTexture
+        1: (anonymous function)
+        2: executeFrameFunction
   86: (duration)
     0: lineWidth(1)
       swizzleTypes: [Number]
       trace:
-        0: lineWidth - [native code] (277)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:331:30 (278)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: lineWidth
+        1: (anonymous function)
+        2: executeFrameFunction
   87: (duration)
     0: linkProgram(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: linkProgram - [native code] (280)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:334:32 (281)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: linkProgram
+        1: (anonymous function)
+        2: executeFrameFunction
   88: (duration)
     0: pixelStorei(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: pixelStorei - [native code] (283)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:337:32 (284)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: pixelStorei
+        1: (anonymous function)
+        2: executeFrameFunction
   89: (duration)
     0: polygonOffset(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: polygonOffset - [native code] (286)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:340:34 (287)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: polygonOffset
+        1: (anonymous function)
+        2: executeFrameFunction
   90: (duration)
     0: readPixels(1, 2, 3, 4, 5, 6, 0)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, TypedArray]
       trace:
-        0: readPixels - [native code] (289)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:343:31 (290)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: readPixels
+        1: (anonymous function)
+        2: executeFrameFunction
   91: (duration)
     0: releaseShaderCompiler()
       trace:
-        0: releaseShaderCompiler - [native code] (292)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:346:42 (293)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: releaseShaderCompiler
+        1: (anonymous function)
+        2: executeFrameFunction
   92: (duration)
     0: renderbufferStorage(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: renderbufferStorage - [native code] (295)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:349:40 (296)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: renderbufferStorage
+        1: (anonymous function)
+        2: executeFrameFunction
   93: (duration)
     0: sampleCoverage(1, true)
       swizzleTypes: [Number, Boolean]
       trace:
-        0: sampleCoverage - [native code] (298)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:352:35 (299)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: sampleCoverage
+        1: (anonymous function)
+        2: executeFrameFunction
   94: (duration)
     0: scissor(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: scissor - [native code] (301)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:355:28 (302)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: scissor
+        1: (anonymous function)
+        2: executeFrameFunction
   95: (duration)
     0: shaderSource(0, "test")
-      swizzleTypes: [WebGLShader, String (22)]
+      swizzleTypes: [WebGLShader, String]
       trace:
-        0: shaderSource - [native code] (304)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:358:33 (305)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: shaderSource
+        1: (anonymous function)
+        2: executeFrameFunction
   96: (duration)
     0: stencilFunc(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: stencilFunc - [native code] (307)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:361:32 (308)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: stencilFunc
+        1: (anonymous function)
+        2: executeFrameFunction
   97: (duration)
     0: stencilFuncSeparate(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: stencilFuncSeparate - [native code] (310)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:364:40 (311)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: stencilFuncSeparate
+        1: (anonymous function)
+        2: executeFrameFunction
   98: (duration)
     0: stencilMask(1)
       swizzleTypes: [Number]
       trace:
-        0: stencilMask - [native code] (313)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:367:32 (314)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: stencilMask
+        1: (anonymous function)
+        2: executeFrameFunction
   99: (duration)
     0: stencilMaskSeparate(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: stencilMaskSeparate - [native code] (316)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:370:40 (317)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: stencilMaskSeparate
+        1: (anonymous function)
+        2: executeFrameFunction
   100: (duration)
     0: stencilOp(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: stencilOp - [native code] (319)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:373:30 (320)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: stencilOp
+        1: (anonymous function)
+        2: executeFrameFunction
   101: (duration)
     0: stencilOpSeparate(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: stencilOpSeparate - [native code] (322)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:376:38 (323)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: stencilOpSeparate
+        1: (anonymous function)
+        2: executeFrameFunction
   102: (duration)
     0: texImage2D(1, 2, 3, 4, 5, [object HTMLImageElement])
-      swizzleTypes: [Number, Number, Number, Number, Number, Image (325)]
+      swizzleTypes: [Number, Number, Number, Number, Number, Image]
       trace:
-        0: texImage2D - [native code] (326)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:379:31 (327)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: texImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
     1: texImage2D(6, 7, 8, 9, 10, 11, 12, 13, 0)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, Number, TypedArray]
       trace:
-        0: texImage2D - [native code] (326)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:380:31 (328)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: texImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
   103: (duration)
     0: texParameterf(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: texParameterf - [native code] (330)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:383:34 (331)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: texParameterf
+        1: (anonymous function)
+        2: executeFrameFunction
   104: (duration)
     0: texParameteri(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: texParameteri - [native code] (333)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:386:34 (334)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: texParameteri
+        1: (anonymous function)
+        2: executeFrameFunction
   105: (duration)
     0: texSubImage2D(1, 2, 3, 4, 5, 6, [object HTMLImageElement])
-      swizzleTypes: [Number, Number, Number, Number, Number, Number, Image (325)]
+      swizzleTypes: [Number, Number, Number, Number, Number, Number, Image]
       trace:
-        0: texSubImage2D - [native code] (336)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:389:34 (337)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: texSubImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
     1: texSubImage2D(7, 8, 9, 10, 11, 12, 13, 14, 0)
       swizzleTypes: [Number, Number, Number, Number, Number, Number, Number, Number, TypedArray]
       trace:
-        0: texSubImage2D - [native code] (336)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:390:34 (338)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: texSubImage2D
+        1: (anonymous function)
+        2: executeFrameFunction
   106: (duration)
     0: uniform1f(1)
       swizzleTypes: [Number]
       trace:
-        0: uniform1f - [native code] (340)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:393:30 (341)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform1f
+        1: (anonymous function)
+        2: executeFrameFunction
   107: (duration)
     0: uniform1fv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform1fv - [native code] (343)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:396:31 (344)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform1fv
+        1: (anonymous function)
+        2: executeFrameFunction
   108: (duration)
     0: uniform1i(1)
       swizzleTypes: [Number]
       trace:
-        0: uniform1i - [native code] (346)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:399:30 (347)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform1i
+        1: (anonymous function)
+        2: executeFrameFunction
   109: (duration)
     0: uniform1iv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform1iv - [native code] (349)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:402:31 (350)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform1iv
+        1: (anonymous function)
+        2: executeFrameFunction
   110: (duration)
     0: uniform2f(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: uniform2f - [native code] (352)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:405:30 (353)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform2f
+        1: (anonymous function)
+        2: executeFrameFunction
   111: (duration)
     0: uniform2fv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform2fv - [native code] (355)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:408:31 (356)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform2fv
+        1: (anonymous function)
+        2: executeFrameFunction
   112: (duration)
     0: uniform2i(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: uniform2i - [native code] (358)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:411:30 (359)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform2i
+        1: (anonymous function)
+        2: executeFrameFunction
   113: (duration)
     0: uniform2iv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform2iv - [native code] (361)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:414:31 (362)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform2iv
+        1: (anonymous function)
+        2: executeFrameFunction
   114: (duration)
     0: uniform3f(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: uniform3f - [native code] (364)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:417:30 (365)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform3f
+        1: (anonymous function)
+        2: executeFrameFunction
   115: (duration)
     0: uniform3fv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform3fv - [native code] (367)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:420:31 (368)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform3fv
+        1: (anonymous function)
+        2: executeFrameFunction
   116: (duration)
     0: uniform3i(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: uniform3i - [native code] (370)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:423:30 (371)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform3i
+        1: (anonymous function)
+        2: executeFrameFunction
   117: (duration)
     0: uniform3iv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform3iv - [native code] (373)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:426:31 (374)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform3iv
+        1: (anonymous function)
+        2: executeFrameFunction
   118: (duration)
     0: uniform4f(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: uniform4f - [native code] (376)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:429:30 (377)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform4f
+        1: (anonymous function)
+        2: executeFrameFunction
   119: (duration)
     0: uniform4fv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform4fv - [native code] (379)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:432:31 (380)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform4fv
+        1: (anonymous function)
+        2: executeFrameFunction
   120: (duration)
     0: uniform4i(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: uniform4i - [native code] (382)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:435:30 (383)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform4i
+        1: (anonymous function)
+        2: executeFrameFunction
   121: (duration)
     0: uniform4iv(0)
       swizzleTypes: [TypedArray]
       trace:
-        0: uniform4iv - [native code] (385)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:438:31 (386)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniform4iv
+        1: (anonymous function)
+        2: executeFrameFunction
   122: (duration)
     0: uniformMatrix2fv(true, 0)
       swizzleTypes: [Boolean, TypedArray]
       trace:
-        0: uniformMatrix2fv - [native code] (388)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:441:37 (389)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniformMatrix2fv
+        1: (anonymous function)
+        2: executeFrameFunction
   123: (duration)
     0: uniformMatrix3fv(true, 0)
       swizzleTypes: [Boolean, TypedArray]
       trace:
-        0: uniformMatrix3fv - [native code] (391)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:444:37 (392)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniformMatrix3fv
+        1: (anonymous function)
+        2: executeFrameFunction
   124: (duration)
     0: uniformMatrix4fv(true, 0)
       swizzleTypes: [Boolean, TypedArray]
       trace:
-        0: uniformMatrix4fv - [native code] (394)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:447:37 (395)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: uniformMatrix4fv
+        1: (anonymous function)
+        2: executeFrameFunction
   125: (duration)
     0: useProgram(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: useProgram - [native code] (397)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:450:31 (398)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: useProgram
+        1: (anonymous function)
+        2: executeFrameFunction
   126: (duration)
     0: validateProgram(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: validateProgram - [native code] (400)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:453:36 (401)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: validateProgram
+        1: (anonymous function)
+        2: executeFrameFunction
   127: (duration)
     0: vertexAttrib1f(1, 2)
       swizzleTypes: [Number, Number]
       trace:
-        0: vertexAttrib1f - [native code] (403)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:456:35 (404)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib1f
+        1: (anonymous function)
+        2: executeFrameFunction
   128: (duration)
     0: vertexAttrib1fv(1, 0)
       swizzleTypes: [Number, TypedArray]
       trace:
-        0: vertexAttrib1fv - [native code] (406)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:459:36 (407)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib1fv
+        1: (anonymous function)
+        2: executeFrameFunction
   129: (duration)
     0: vertexAttrib2f(1, 2, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: vertexAttrib2f - [native code] (409)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:462:35 (410)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib2f
+        1: (anonymous function)
+        2: executeFrameFunction
   130: (duration)
     0: vertexAttrib2fv(1, 0)
       swizzleTypes: [Number, TypedArray]
       trace:
-        0: vertexAttrib2fv - [native code] (412)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:465:36 (413)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib2fv
+        1: (anonymous function)
+        2: executeFrameFunction
   131: (duration)
     0: vertexAttrib3f(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: vertexAttrib3f - [native code] (415)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:468:35 (416)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib3f
+        1: (anonymous function)
+        2: executeFrameFunction
   132: (duration)
     0: vertexAttrib3fv(1, 0)
       swizzleTypes: [Number, TypedArray]
       trace:
-        0: vertexAttrib3fv - [native code] (418)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:471:36 (419)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib3fv
+        1: (anonymous function)
+        2: executeFrameFunction
   133: (duration)
     0: vertexAttrib4f(1, 2, 3, 4, 5)
       swizzleTypes: [Number, Number, Number, Number, Number]
       trace:
-        0: vertexAttrib4f - [native code] (421)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:474:35 (422)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib4f
+        1: (anonymous function)
+        2: executeFrameFunction
   134: (duration)
     0: vertexAttrib4fv(1, 0)
       swizzleTypes: [Number, TypedArray]
       trace:
-        0: vertexAttrib4fv - [native code] (424)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:477:36 (425)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttrib4fv
+        1: (anonymous function)
+        2: executeFrameFunction
   135: (duration)
     0: vertexAttribPointer(1, 2, 3, true, 5, 6)
       swizzleTypes: [Number, Number, Number, Boolean, Number, Number]
       trace:
-        0: vertexAttribPointer - [native code] (427)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:480:40 (428)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
+        0: vertexAttribPointer
+        1: (anonymous function)
+        2: executeFrameFunction
   136: (duration)
     0: viewport(1, 2, 3, 4)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: viewport - [native code] (430)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:483:29 (431)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
-data:
-  0: "activeTexture"
-  1: "[native code]"
-  2: [0,1,0,0]
-  3: ""
-  4: "inspector/canvas/recording-webgl.html"
-  5: [3,4,73,34]
-  6: "executeFrameFunction"
-  7: [6,4,492,24]
-  8: "performActions"
-  9: [8,4,496,25]
-  10: "global code"
-  11: [10,3,1,15]
-  12: "evaluateWithScopeExtension"
-  13: [12,1,0,0]
-  14: "_evaluateOn"
-  15: [14,3,130,29]
-  16: "_evaluateAndWrap"
-  17: [16,3,124,108]
-  18: "attachShader"
-  19: [18,1,0,0]
-  20: [3,4,76,33]
-  21: "bindAttribLocation"
-  22: "test"
-  23: [21,1,0,0]
-  24: [3,4,79,39]
-  25: "bindBuffer"
-  26: [25,1,0,0]
-  27: [3,4,82,31]
-  28: "bindFramebuffer"
-  29: [28,1,0,0]
-  30: [3,4,85,36]
-  31: "bindRenderbuffer"
-  32: [31,1,0,0]
-  33: [3,4,88,37]
-  34: "bindTexture"
-  35: [34,1,0,0]
-  36: [3,4,91,32]
-  37: "blendColor"
-  38: [37,1,0,0]
-  39: [3,4,94,31]
-  40: "blendEquation"
-  41: [40,1,0,0]
-  42: [3,4,97,34]
-  43: "blendEquationSeparate"
-  44: [43,1,0,0]
-  45: [3,4,100,42]
-  46: "blendFunc"
-  47: [46,1,0,0]
-  48: [3,4,103,30]
-  49: "blendFuncSeparate"
-  50: [49,1,0,0]
-  51: [3,4,106,38]
-  52: "bufferData"
-  53: [52,1,0,0]
-  54: [3,4,109,31]
-  55: [3,4,110,31]
-  56: "bufferSubData"
-  57: [56,1,0,0]
-  58: [3,4,113,34]
-  59: "checkFramebufferStatus"
-  60: [59,1,0,0]
-  61: [3,4,116,43]
-  62: "clear"
-  63: [62,1,0,0]
-  64: [3,4,119,26]
-  65: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAAAylJREFUeAHt0DEBAAAAwqD1T20IX4hAYcCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYMCAAQMGDBgwYOAdGL/UAAEPpnR6AAAAAElFTkSuQmCC"
-  66: "clearColor"
-  67: [66,1,0,0]
-  68: [3,4,122,31]
-  69: "clearDepth"
-  70: [69,1,0,0]
-  71: [3,4,125,31]
-  72: "clearStencil"
-  73: [72,1,0,0]
-  74: [3,4,128,33]
-  75: "colorMask"
-  76: [75,1,0,0]
-  77: [3,4,131,30]
-  78: "compileShader"
-  79: [78,1,0,0]
-  80: [3,4,134,34]
-  81: "compressedTexImage2D"
-  82: [81,1,0,0]
-  83: [3,4,137,41]
-  84: "compressedTexSubImage2D"
-  85: [84,1,0,0]
-  86: [3,4,140,44]
-  87: "copyTexImage2D"
-  88: [87,1,0,0]
-  89: [3,4,143,35]
-  90: "copyTexSubImage2D"
-  91: [90,1,0,0]
-  92: [3,4,146,38]
-  93: "createBuffer"
-  94: [93,1,0,0]
-  95: [3,4,149,33]
-  96: "createFramebuffer"
-  97: [96,1,0,0]
-  98: [3,4,152,38]
-  99: "createProgram"
-  100: [99,1,0,0]
-  101: [3,4,155,34]
-  102: "createRenderbuffer"
-  103: [102,1,0,0]
-  104: [3,4,158,39]
-  105: "createShader"
-  106: [105,1,0,0]
-  107: [3,4,161,33]
-  108: "createTexture"
-  109: [108,1,0,0]
-  110: [3,4,164,34]
-  111: "cullFace"
-  112: [111,1,0,0]
-  113: [3,4,167,29]
-  114: "deleteBuffer"
-  115: [114,1,0,0]
-  116: [3,4,170,33]
-  117: "deleteFramebuffer"
-  118: [117,1,0,0]
-  119: [3,4,173,38]
-  120: "deleteProgram"
-  121: [120,1,0,0]
-  122: [3,4,176,34]
-  123: "deleteRenderbuffer"
-  124: [123,1,0,0]
-  125: [3,4,179,39]
-  126: "deleteShader"
-  127: [126,1,0,0]
-  128: [3,4,182,33]
-  129: "deleteTexture"
-  130: [129,1,0,0]
-  131: [3,4,185,34]
-  132: "depthFunc"
-  133: [132,1,0,0]
-  134: [3,4,188,30]
-  135: "depthMask"
-  136: [135,1,0,0]
-  137: [3,4,191,30]
-  138: "depthRange"
-  139: [138,1,0,0]
-  140: [3,4,194,31]
-  141: "detachShader"
-  142: [141,1,0,0]
-  143: [3,4,197,33]
-  144: "disable"
-  145: [144,1,0,0]
-  146: [3,4,200,28]
-  147: "disableVertexAttribArray"
-  148: [147,1,0,0]
-  149: [3,4,203,45]
-  150: "drawArrays"
-  151: [150,1,0,0]
-  152: [3,4,206,31]
-  153: "drawElements"
-  154: [153,1,0,0]
-  155: [3,4,209,33]
-  156: "enable"
-  157: [156,1,0,0]
-  158: [3,4,212,27]
-  159: "enableVertexAttribArray"
-  160: [159,1,0,0]
-  161: [3,4,215,44]
-  162: "finish"
-  163: [162,1,0,0]
-  164: [3,4,218,27]
-  165: "flush"
-  166: [165,1,0,0]
-  167: [3,4,221,26]
-  168: "framebufferRenderbuffer"
-  169: [168,1,0,0]
-  170: [3,4,224,44]
-  171: "framebufferTexture2D"
-  172: [171,1,0,0]
-  173: [3,4,227,41]
-  174: "frontFace"
-  175: [174,1,0,0]
-  176: [3,4,230,30]
-  177: "generateMipmap"
-  178: [177,1,0,0]
-  179: [3,4,233,35]
-  180: "getActiveAttrib"
-  181: [180,1,0,0]
-  182: [3,4,236,36]
-  183: "getActiveUniform"
-  184: [183,1,0,0]
-  185: [3,4,239,37]
-  186: "getAttachedShaders"
-  187: [186,1,0,0]
-  188: [3,4,242,39]
-  189: "getAttribLocation"
-  190: [189,1,0,0]
-  191: [3,4,245,38]
-  192: "getBufferParameter"
-  193: [192,1,0,0]
-  194: [3,4,248,39]
-  195: "getContextAttributes"
-  196: [195,1,0,0]
-  197: [3,4,251,41]
-  198: "getError"
-  199: [198,1,0,0]
-  200: [3,4,254,29]
-  201: "getExtension"
-  202: [201,1,0,0]
-  203: [3,4,257,33]
-  204: "getFramebufferAttachmentParameter"
-  205: [204,1,0,0]
-  206: [3,4,260,54]
-  207: "getParameter"
-  208: [207,1,0,0]
-  209: [3,4,263,33]
-  210: "getProgramInfoLog"
-  211: [210,1,0,0]
-  212: [3,4,266,38]
-  213: "getProgramParameter"
-  214: [213,1,0,0]
-  215: [3,4,269,40]
-  216: "getRenderbufferParameter"
-  217: [216,1,0,0]
-  218: [3,4,272,45]
-  219: "getShaderInfoLog"
-  220: [219,1,0,0]
-  221: [3,4,275,37]
-  222: "getShaderParameter"
-  223: [222,1,0,0]
-  224: [3,4,278,39]
-  225: "getShaderPrecisionFormat"
-  226: [225,1,0,0]
-  227: [3,4,281,45]
-  228: "getShaderSource"
-  229: [228,1,0,0]
-  230: [3,4,284,36]
-  231: "getSupportedExtensions"
-  232: [231,1,0,0]
-  233: [3,4,287,43]
-  234: "getTexParameter"
-  235: [234,1,0,0]
-  236: [3,4,290,36]
-  237: "getUniform"
-  238: [237,1,0,0]
-  239: [3,4,293,31]
-  240: "getUniformLocation"
-  241: [240,1,0,0]
-  242: [3,4,296,39]
-  243: "getVertexAttrib"
-  244: [243,1,0,0]
-  245: [3,4,299,36]
-  246: "getVertexAttribOffset"
-  247: [246,1,0,0]
-  248: [3,4,302,42]
-  249: "hint"
-  250: [249,1,0,0]
-  251: [3,4,305,25]
-  252: "isBuffer"
-  253: [252,1,0,0]
-  254: [3,4,308,29]
-  255: "isContextLost"
-  256: [255,1,0,0]
-  257: [3,4,311,34]
-  258: "isEnabled"
-  259: [258,1,0,0]
-  260: [3,4,314,30]
-  261: "isFramebuffer"
-  262: [261,1,0,0]
-  263: [3,4,317,34]
-  264: "isProgram"
-  265: [264,1,0,0]
-  266: [3,4,320,30]
-  267: "isRenderbuffer"
-  268: [267,1,0,0]
-  269: [3,4,323,35]
-  270: "isShader"
-  271: [270,1,0,0]
-  272: [3,4,326,29]
-  273: "isTexture"
-  274: [273,1,0,0]
-  275: [3,4,329,30]
-  276: "lineWidth"
-  277: [276,1,0,0]
-  278: [3,4,332,30]
-  279: "linkProgram"
-  280: [279,1,0,0]
-  281: [3,4,335,32]
-  282: "pixelStorei"
-  283: [282,1,0,0]
-  284: [3,4,338,32]
-  285: "polygonOffset"
-  286: [285,1,0,0]
-  287: [3,4,341,34]
-  288: "readPixels"
-  289: [288,1,0,0]
-  290: [3,4,344,31]
-  291: "releaseShaderCompiler"
-  292: [291,1,0,0]
-  293: [3,4,347,42]
-  294: "renderbufferStorage"
-  295: [294,1,0,0]
-  296: [3,4,350,40]
-  297: "sampleCoverage"
-  298: [297,1,0,0]
-  299: [3,4,353,35]
-  300: "scissor"
-  301: [300,1,0,0]
-  302: [3,4,356,28]
-  303: "shaderSource"
-  304: [303,1,0,0]
-  305: [3,4,359,33]
-  306: "stencilFunc"
-  307: [306,1,0,0]
-  308: [3,4,362,32]
-  309: "stencilFuncSeparate"
-  310: [309,1,0,0]
-  311: [3,4,365,40]
-  312: "stencilMask"
-  313: [312,1,0,0]
-  314: [3,4,368,32]
-  315: "stencilMaskSeparate"
-  316: [315,1,0,0]
-  317: [3,4,371,40]
-  318: "stencilOp"
-  319: [318,1,0,0]
-  320: [3,4,374,30]
-  321: "stencilOpSeparate"
-  322: [321,1,0,0]
-  323: [3,4,377,38]
-  324: "texImage2D"
-  325: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAIAAAACCAYAAABytg0kAAAAAXNSR0IArs4c6QAAABNJREFUCB1j/M/AAEQMDEwgAgQAHxcCAmtAm/sAAAAASUVORK5CYII="
-  326: [324,1,0,0]
-  327: [3,4,380,31]
-  328: [3,4,381,31]
-  329: "texParameterf"
-  330: [329,1,0,0]
-  331: [3,4,384,34]
-  332: "texParameteri"
-  333: [332,1,0,0]
-  334: [3,4,387,34]
-  335: "texSubImage2D"
-  336: [335,1,0,0]
-  337: [3,4,390,34]
-  338: [3,4,391,34]
-  339: "uniform1f"
-  340: [339,1,0,0]
-  341: [3,4,394,30]
-  342: "uniform1fv"
-  343: [342,1,0,0]
-  344: [3,4,397,31]
-  345: "uniform1i"
-  346: [345,1,0,0]
-  347: [3,4,400,30]
-  348: "uniform1iv"
-  349: [348,1,0,0]
-  350: [3,4,403,31]
-  351: "uniform2f"
-  352: [351,1,0,0]
-  353: [3,4,406,30]
-  354: "uniform2fv"
-  355: [354,1,0,0]
-  356: [3,4,409,31]
-  357: "uniform2i"
-  358: [357,1,0,0]
-  359: [3,4,412,30]
-  360: "uniform2iv"
-  361: [360,1,0,0]
-  362: [3,4,415,31]
-  363: "uniform3f"
-  364: [363,1,0,0]
-  365: [3,4,418,30]
-  366: "uniform3fv"
-  367: [366,1,0,0]
-  368: [3,4,421,31]
-  369: "uniform3i"
-  370: [369,1,0,0]
-  371: [3,4,424,30]
-  372: "uniform3iv"
-  373: [372,1,0,0]
-  374: [3,4,427,31]
-  375: "uniform4f"
-  376: [375,1,0,0]
-  377: [3,4,430,30]
-  378: "uniform4fv"
-  379: [378,1,0,0]
-  380: [3,4,433,31]
-  381: "uniform4i"
-  382: [381,1,0,0]
-  383: [3,4,436,30]
-  384: "uniform4iv"
-  385: [384,1,0,0]
-  386: [3,4,439,31]
-  387: "uniformMatrix2fv"
-  388: [387,1,0,0]
-  389: [3,4,442,37]
-  390: "uniformMatrix3fv"
-  391: [390,1,0,0]
-  392: [3,4,445,37]
-  393: "uniformMatrix4fv"
-  394: [393,1,0,0]
-  395: [3,4,448,37]
-  396: "useProgram"
-  397: [396,1,0,0]
-  398: [3,4,451,31]
-  399: "validateProgram"
-  400: [399,1,0,0]
-  401: [3,4,454,36]
-  402: "vertexAttrib1f"
-  403: [402,1,0,0]
-  404: [3,4,457,35]
-  405: "vertexAttrib1fv"
-  406: [405,1,0,0]
-  407: [3,4,460,36]
-  408: "vertexAttrib2f"
-  409: [408,1,0,0]
-  410: [3,4,463,35]
-  411: "vertexAttrib2fv"
-  412: [411,1,0,0]
-  413: [3,4,466,36]
-  414: "vertexAttrib3f"
-  415: [414,1,0,0]
-  416: [3,4,469,35]
-  417: "vertexAttrib3fv"
-  418: [417,1,0,0]
-  419: [3,4,472,36]
-  420: "vertexAttrib4f"
-  421: [420,1,0,0]
-  422: [3,4,475,35]
-  423: "vertexAttrib4fv"
-  424: [423,1,0,0]
-  425: [3,4,478,36]
-  426: "vertexAttribPointer"
-  427: [426,1,0,0]
-  428: [3,4,481,40]
-  429: "viewport"
-  430: [429,1,0,0]
-  431: [3,4,484,29]
+        0: viewport
+        1: (anonymous function)
+        2: executeFrameFunction
 
 -- Running test case: Canvas.recordingWebGL.memoryLimit
 initialState:
@@ -1472,33 +1020,14 @@ frames:
     0: activeTexture(1)
       swizzleTypes: [Number]
       trace:
-        0: activeTexture - [native code] (2)
-        1: (anonymous function) - inspector/canvas/recording-webgl.html:72:34 (5)
-        2: executeFrameFunction - inspector/canvas/recording-webgl.html:491:24 (7)
-        3: performActions - inspector/canvas/recording-webgl.html:495:25 (9)
-        4: Global Code - [program code] (11)
-        5: evaluateWithScopeExtension - [native code] (13)
-        6: _evaluateOn (15)
-        7: _evaluateAndWrap (17)
-data:
-  0: "activeTexture"
-  1: "[native code]"
-  2: [0,1,0,0]
-  3: ""
-  4: "inspector/canvas/recording-webgl.html"
-  5: [3,4,73,34]
-  6: "executeFrameFunction"
-  7: [6,4,492,24]
-  8: "performActions"
-  9: [8,4,496,25]
-  10: "global code"
-  11: [10,3,1,15]
-  12: "evaluateWithScopeExtension"
-  13: [12,1,0,0]
-  14: "_evaluateOn"
-  15: [14,3,130,29]
-  16: "_evaluateAndWrap"
-  17: [16,3,124,108]
+        0: activeTexture
+        1: (anonymous function)
+        2: executeFrameFunction
+        3: performActions
+        4: Global Code
+        5: evaluateWithScopeExtension
+        6: _evaluateOn
+        7: _evaluateAndWrap
 
 -- Running test case: Canvas.recordingWebGL.Console
 PASS: The recording should have the name "TEST".
index ca13262..51cfda8 100644 (file)
@@ -15,167 +15,125 @@ frames:
     0: useProgram(0)
       swizzleTypes: [WebGLProgram]
       trace:
-        0: useProgram - [native code] (2)
-        1: performActions - inspector/canvas/recording-webgl-snapshots.html:48:23 (5)
-        2: Global Code - [program code] (8)
-        3: evaluateWithScopeExtension - [native code] (10)
-        4: _evaluateOn (12)
-        5: _evaluateAndWrap (14)
+        0: useProgram
+        1: performActions
+        2: Global Code
+        3: evaluateWithScopeExtension
+        4: _evaluateOn
+        5: _evaluateAndWrap
     1: clearColor(0, 0, 0, 1)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: clearColor - [native code] (16)
-        1: clearContext - inspector/canvas/recording-webgl-snapshots.html:51:27 (18)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:80:17 (19)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
+        0: clearColor
+        1: clearContext
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
     2: clear(16384)
       swizzleTypes: [Number]
       trace:
-        0: clear - [native code] (21)
-        1: clearContext - inspector/canvas/recording-webgl-snapshots.html:52:22 (22)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:80:17 (19)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
-      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGxJREFUeAHt1MEJwDAMBEHF/fec5OEitDAG/485cc/MvP/3CBAgsF7grE8oIAECBK6AwXIKBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIfSAwCK2+QFXIAAAAASUVORK5CYII=" (23)
+        0: clear
+        1: clearContext
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGxJREFUeAHt1MEJwDAMBEHF/fec5OEitDAG/485cc/MvP/3CBAgsF7grE8oIAECBK6AwXIKBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIfSAwCK2+QFXIAAAAASUVORK5CYII="
     3: bufferData(34962, 0, 35044)
       swizzleTypes: [Number, TypedArray, Number]
       trace:
-        0: bufferData - [native code] (25)
-        1: drawArrays - inspector/canvas/recording-webgl-snapshots.html:61:27 (27)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:81:15 (28)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
+        0: bufferData
+        1: drawArrays
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
     4: drawArrays(4, 0, 3)
       swizzleTypes: [Number, Number, Number]
       trace:
-        0: drawArrays - [native code] (29)
-        1: drawArrays - inspector/canvas/recording-webgl-snapshots.html:63:27 (30)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:81:15 (28)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
-      snapshot: "data:image/png;base64,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" (31)
+        0: drawArrays
+        1: drawArrays
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
+      snapshot: "data:image/png;base64,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"
     5: clearColor(0, 0, 0, 1)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: clearColor - [native code] (16)
-        1: clearContext - inspector/canvas/recording-webgl-snapshots.html:51:27 (18)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:82:17 (32)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
+        0: clearColor
+        1: clearContext
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
     6: clear(16384)
       swizzleTypes: [Number]
       trace:
-        0: clear - [native code] (21)
-        1: clearContext - inspector/canvas/recording-webgl-snapshots.html:52:22 (22)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:82:17 (32)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
-      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGxJREFUeAHt1MEJwDAMBEHF/fec5OEitDAG/485cc/MvP/3CBAgsF7grE8oIAECBK6AwXIKBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIfSAwCK2+QFXIAAAAASUVORK5CYII=" (23)
+        0: clear
+        1: clearContext
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGxJREFUeAHt1MEJwDAMBEHF/fec5OEitDAG/485cc/MvP/3CBAgsF7grE8oIAECBK6AwXIKBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIfSAwCK2+QFXIAAAAASUVORK5CYII="
     7: bufferData(34962, 0, 35044)
       swizzleTypes: [Number, TypedArray, Number]
       trace:
-        0: bufferData - [native code] (25)
-        1: drawElements - inspector/canvas/recording-webgl-snapshots.html:72:27 (34)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:83:17 (35)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
+        0: bufferData
+        1: drawElements
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
     8: bufferData(34963, 0, 35044)
       swizzleTypes: [Number, TypedArray, Number]
       trace:
-        0: bufferData - [native code] (25)
-        1: drawElements - inspector/canvas/recording-webgl-snapshots.html:75:27 (36)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:83:17 (35)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
+        0: bufferData
+        1: drawElements
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
     9: drawElements(4, 3, 5123, 0)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: drawElements - [native code] (37)
-        1: drawElements - inspector/canvas/recording-webgl-snapshots.html:77:29 (38)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:83:17 (35)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
-      snapshot: "data:image/png;base64,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" (39)
+        0: drawElements
+        1: drawElements
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
+      snapshot: "data:image/png;base64,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"
     10: clearColor(0, 0, 0, 1)
       swizzleTypes: [Number, Number, Number, Number]
       trace:
-        0: clearColor - [native code] (16)
-        1: clearContext - inspector/canvas/recording-webgl-snapshots.html:51:27 (18)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:84:17 (40)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
+        0: clearColor
+        1: clearContext
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
     11: clear(16384)
       swizzleTypes: [Number]
       trace:
-        0: clear - [native code] (21)
-        1: clearContext - inspector/canvas/recording-webgl-snapshots.html:52:22 (22)
-        2: performActions - inspector/canvas/recording-webgl-snapshots.html:84:17 (40)
-        3: Global Code - [program code] (8)
-        4: evaluateWithScopeExtension - [native code] (10)
-        5: _evaluateOn (12)
-        6: _evaluateAndWrap (14)
-      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGxJREFUeAHt1MEJwDAMBEHF/fec5OEitDAG/485cc/MvP/3CBAgsF7grE8oIAECBK6AwXIKBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIfSAwCK2+QFXIAAAAASUVORK5CYII=" (23)
-data:
-  0: "useProgram"
-  1: "[native code]"
-  2: [0,1,0,0]
-  3: "performActions"
-  4: "inspector/canvas/recording-webgl-snapshots.html"
-  5: [3,4,49,23]
-  6: "global code"
-  7: ""
-  8: [6,7,1,15]
-  9: "evaluateWithScopeExtension"
-  10: [9,1,0,0]
-  11: "_evaluateOn"
-  12: [11,7,130,29]
-  13: "_evaluateAndWrap"
-  14: [13,7,124,108]
-  15: "clearColor"
-  16: [15,1,0,0]
-  17: "clearContext"
-  18: [17,4,52,27]
-  19: [3,4,81,17]
-  20: "clear"
-  21: [20,1,0,0]
-  22: [17,4,53,22]
-  23: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGxJREFUeAHt1MEJwDAMBEHF/fec5OEitDAG/485cc/MvP/3CBAgsF7grE8oIAECBK6AwXIKBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIfSAwCK2+QFXIAAAAASUVORK5CYII="
-  24: "bufferData"
-  25: [24,1,0,0]
-  26: "drawArrays"
-  27: [26,4,62,27]
-  28: [3,4,82,15]
-  29: [26,1,0,0]
-  30: [26,4,64,27]
-  31: "data:image/png;base64,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"
-  32: [3,4,83,17]
-  33: "drawElements"
-  34: [33,4,73,27]
-  35: [3,4,84,17]
-  36: [33,4,76,27]
-  37: [33,1,0,0]
-  38: [33,4,78,29]
-  39: "data:image/png;base64,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"
-  40: [3,4,85,17]
+        0: clear
+        1: clearContext
+        2: performActions
+        3: Global Code
+        4: evaluateWithScopeExtension
+        5: _evaluateOn
+        6: _evaluateAndWrap
+      snapshot: "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAASwAAACWCAYAAABkW7XSAAAAAXNSR0IArs4c6QAABGxJREFUeAHt1MEJwDAMBEHF/fec5OEitDAG/485cc/MvP/3CBAgsF7grE8oIAECBK6AwXIKBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIGyw0QIJARMFiZqgQlQMBguQECBDICBitTlaAECBgsN0CAQEbAYGWqEpQAAYPlBggQyAgYrExVghIgYLDcAAECGQGDlalKUAIEDJYbIEAgI2CwMlUJSoCAwXIDBAhkBAxWpipBCRAwWG6AAIGMgMHKVCUoAQIfSAwCK2+QFXIAAAAASUVORK5CYII="
 
index b06223a..bfe22c8 100644 (file)
@@ -47,12 +47,7 @@ TestPage.registerInitializer(() => {
                 InspectorTest.log(actionText);
 
                 if (action.swizzleTypes.length) {
-                    let swizzleNames = action.swizzleTypes.map((item, i) => {
-                        let swizzleText = WI.Recording.displayNameForSwizzleType(item);
-                        if (action.parameters[i] != action._payloadParameters[i] && Number.isInteger(action._payloadParameters[i]))
-                            swizzleText += " (" + action._payloadParameters[i] + ")";
-                        return swizzleText;
-                    });
+                    let swizzleNames = action.swizzleTypes.map((item) => WI.Recording.displayNameForSwizzleType(item));
                     InspectorTest.log("      swizzleTypes: [" + swizzleNames.join(", ") + "]");
                 }
 
@@ -60,31 +55,15 @@ TestPage.registerInitializer(() => {
                     InspectorTest.log("      trace:");
 
                     for (let k = 0; k < action.trace.length; ++k) {
-                        let callFrame = action.trace[k];
-                        let traceText = `        ${k}: `;
-                        traceText += callFrame.functionName || "(anonymous function)";
-
-                        if (callFrame.nativeCode)
-                            traceText += " - [native code]";
-                        else if (callFrame.programCode)
-                            traceText += " - [program code]";
-                        else if (callFrame.sourceCodeLocation) {
-                            let location = callFrame.sourceCodeLocation;
-                            traceText += " - " + sanitizeURL(location.sourceCode.url) + `:${location.lineNumber}:${location.columnNumber}`;
-                        }
-
-                        traceText += " (" + action._payloadTrace[k] + ")";
-                        InspectorTest.log(traceText);
+                        let functionName = action.trace[k].functionName || "(anonymous function)";
+                        InspectorTest.log(`        ${k}: ` + functionName);
                     }
                 }
 
                 if (action.snapshot)
-                    InspectorTest.log("      snapshot: " + JSON.stringify(action.snapshot) + " (" + action._payloadSnapshot + ")");
+                    InspectorTest.log("      snapshot: " + JSON.stringify(action.snapshot));
             }
         }
-
-        InspectorTest.log("data:");
-        log(recording.data, "  ");
     }
 
     window.getCanvas = function(type) {
index 9b408ef..2fd568e 100644 (file)
@@ -1,3 +1,13 @@
+2018-09-14  Devin Rousso  <webkit@devinrousso.com>
+
+        Web Inspector: Record actions performed on ImageBitmapRenderingContext
+        https://bugs.webkit.org/show_bug.cgi?id=181341
+
+        Reviewed by Joseph Pecoraro.
+
+        * inspector/protocol/Recording.json:
+        * inspector/scripts/codegen/generator.py:
+
 2018-09-14  Mike Gorse  <mgorse@suse.com>
 
         builtins directory causes name conflict on Python 3
index d7492d9..0432f81 100644 (file)
@@ -5,7 +5,7 @@
         {
             "id": "Type",
             "type": "string",
-            "enum": ["canvas-2d", "canvas-webgl"],
+            "enum": ["canvas-2d", "canvas-bitmaprenderer", "canvas-webgl"],
             "description": "The type of the recording."
         },
         {
index eed218d..3f4966b 100755 (executable)
@@ -42,6 +42,7 @@ _ALWAYS_SPECIALCASED_ENUM_VALUE_SUBSTRINGS = set(['2D', 'API', 'CSS', 'DOM', 'HT
 _ALWAYS_SPECIALCASED_ENUM_VALUE_LOOKUP_TABLE = dict([(s.upper(), s) for s in _ALWAYS_SPECIALCASED_ENUM_VALUE_SUBSTRINGS])
 
 _ENUM_IDENTIFIER_RENAME_MAP = {
+    'canvas-bitmaprenderer': 'CanvasBitmapRenderer',  # Recording.Type.canvas-bitmaprenderer
     'canvas-webgl': 'CanvasWebGL',  # Recording.Type.canvas-webgl
     'webgl': 'WebGL',  # Canvas.ContextType.webgl
     'webgl2': 'WebGL2',  # Canvas.ContextType.webgl2
index 1ceccd6..a59cd8c 100644 (file)
@@ -1,3 +1,24 @@
+2018-09-14  Devin Rousso  <webkit@devinrousso.com>
+
+        Web Inspector: Record actions performed on ImageBitmapRenderingContext
+        https://bugs.webkit.org/show_bug.cgi?id=181341
+
+        Reviewed by Joseph Pecoraro.
+
+        Test: inspector/canvas/recording-bitmaprenderer.html
+
+        * html/canvas/ImageBitmapRenderingContext.idl:
+
+        * inspector/InspectorCanvas.cpp:
+        (WebCore::shouldSnapshotBitmapRendererAction):
+        (WebCore::InspectorCanvas::recordAction):
+
+        * inspector/agents/InspectorCanvasAgent.cpp:
+        (WebCore::InspectorCanvasAgent::didFinishRecordingCanvasFrame):
+
+        * page/PageConsoleClient.cpp:
+        (canvasRenderingContext):
+
 2018-09-14  David Kilzer  <ddkilzer@apple.com>
 
         REGRESSION (r235954): Fix build failure on watchOS
index 572e5f1..c4bc1bc 100644 (file)
@@ -25,7 +25,8 @@
 
 [
     EnabledAtRuntime=ImageBitmapOffscreenCanvas,
-    Exposed=Window
+    Exposed=Window,
+    CallTracingCallback=recordCanvasAction,
 ] interface ImageBitmapRenderingContext {
     readonly attribute HTMLCanvasElement canvas;
 
index ab6f9fd..7ec5751 100644 (file)
@@ -121,6 +121,11 @@ bool InspectorCanvas::currentFrameHasData() const
     return !!m_frames;
 }
 
+static bool shouldSnapshotBitmapRendererAction(const String& name)
+{
+    return name == "transferFromImageBitmap";
+}
+
 static bool shouldSnapshotWebGLAction(const String& name)
 {
     return name == "clear"
@@ -156,8 +161,10 @@ void InspectorCanvas::recordAction(const String& name, Vector<RecordCanvasAction
     m_bufferUsed += action->memoryCost();
     m_currentActions->addItem(action.ptr());
 
+    if (is<ImageBitmapRenderingContext>(m_context) && shouldSnapshotBitmapRendererAction(name))
+        m_actionNeedingSnapshot = WTFMove(action);
 #if ENABLE(WEBGL)
-    if (is<WebGLRenderingContext>(m_context) && shouldSnapshotWebGLAction(name))
+    else if (is<WebGLRenderingContext>(m_context) && shouldSnapshotWebGLAction(name))
         m_actionNeedingSnapshot = WTFMove(action);
 #endif
 }
index 543937e..1546d50 100644 (file)
@@ -528,6 +528,8 @@ void InspectorCanvasAgent::didFinishRecordingCanvasFrame(CanvasRenderingContext&
     Inspector::Protocol::Recording::Type type;
     if (is<CanvasRenderingContext2D>(inspectorCanvas->context()))
         type = Inspector::Protocol::Recording::Type::Canvas2D;
+    else if (is<ImageBitmapRenderingContext>(inspectorCanvas->context()))
+        type = Inspector::Protocol::Recording::Type::CanvasBitmapRenderer;
 #if ENABLE(WEBGL)
     else if (is<WebGLRenderingContext>(inspectorCanvas->context()))
         type = Inspector::Protocol::Recording::Type::CanvasWebGL;
index d8f3039..9f65531 100644 (file)
 #include "Document.h"
 #include "Frame.h"
 #include "HTMLCanvasElement.h"
+#include "ImageBitmapRenderingContext.h"
 #include "InspectorController.h"
 #include "InspectorInstrumentation.h"
 #include "JSCanvasRenderingContext2D.h"
 #include "JSExecState.h"
 #include "JSHTMLCanvasElement.h"
+#include "JSImageBitmapRenderingContext.h"
 #include "JSOffscreenCanvas.h"
 #include "OffscreenCanvas.h"
 #include "Page.h"
@@ -235,6 +237,8 @@ static CanvasRenderingContext* canvasRenderingContext(JSC::VM& vm, ScriptArgumen
         return canvas->renderingContext();
     if (auto* context = JSCanvasRenderingContext2D::toWrapped(vm, target))
         return context;
+    if (auto* context = JSImageBitmapRenderingContext::toWrapped(vm, target))
+        return context;
 #if ENABLE(WEBGL)
     if (auto* context = JSWebGLRenderingContext::toWrapped(vm, target))
         return context;
index 6a84f40..b968db5 100644 (file)
@@ -1,3 +1,34 @@
+2018-09-14  Devin Rousso  <webkit@devinrousso.com>
+
+        Web Inspector: Record actions performed on ImageBitmapRenderingContext
+        https://bugs.webkit.org/show_bug.cgi?id=181341
+
+        Reviewed by Joseph Pecoraro.
+
+        * UserInterface/Models/Recording.js:
+        (WI.Recording.fromPayload):
+        (WI.Recording.prototype.createContext):
+
+        * UserInterface/Models/RecordingAction.js:
+        (WI.RecordingAction._prototypeForType):
+        (WI.RecordingAction.prototype.getImageParameters):
+
+        * UserInterface/Views/RecordingActionTreeElement.js:
+        (WI.RecordingActionTreeElement._classNameForAction.classNameForActionName):
+
+        * UserInterface/Views/RecordingContentView.js:
+        (WI.RecordingContentView):
+        (WI.RecordingContentView.prototype.get navigationItems):
+        (WI.RecordingContentView.prototype.updateActionIndex):
+        (WI.RecordingContentView.prototype.shown):
+        (WI.RecordingContentView.prototype.hidden):
+        (WI.RecordingContentView.prototype._generateContentFromSnapshot): Renamed.
+        (WI.RecordingContentView.prototype._updateImageGrid):
+        (WI.RecordingContentView.prototype._generateContentCanvasWebGL): Deleted.
+
+        * UserInterface/Views/CanvasContentView.js:
+        (WI.CanvasContentView):
+
 2018-09-13  Jamal Nasser  <jamaln@mail.com>
 
         Web Inspector: Dark Mode: bezier curve editor should be updated
index fb3c876..6629390 100644 (file)
@@ -58,6 +58,9 @@ WI.Recording = class Recording extends WI.Object
         case RecordingAgent.Type.Canvas2D:
             type = WI.Recording.Type.Canvas2D;
             break;
+        case RecordingAgent.Type.CanvasBitmapRenderer:
+            type = WI.Recording.Type.CanvasBitmapRenderer;
+            break;
         case RecordingAgent.Type.CanvasWebGL:
             type = WI.Recording.Type.CanvasWebGL;
             break;
@@ -319,6 +322,9 @@ WI.Recording = class Recording extends WI.Object
         if (this._type === WI.Recording.Type.Canvas2D)
             return createCanvasContext("2d");
 
+        if (this._type === WI.Recording.Type.BitmapRenderer)
+            return createCanvasContext("bitmaprenderer");
+
         if (this._type === WI.Recording.Type.CanvasWebGL)
             return createCanvasContext("webgl");
 
@@ -476,6 +482,7 @@ WI.Recording.CanvasRecordingNamesSymbol = Symbol("canvas-recording-names");
 
 WI.Recording.Type = {
     Canvas2D: "canvas-2d",
+    CanvasBitmapRenderer: "canvas-bitmaprenderer",
     CanvasWebGL: "canvas-webgl",
 };
 
index 238d2aa..89c8b51 100644 (file)
@@ -91,6 +91,8 @@ WI.RecordingAction = class RecordingAction extends WI.Object
     {
         if (type === WI.Recording.Type.Canvas2D)
             return CanvasRenderingContext2D.prototype;
+        if (type === WI.Recording.Type.CanvasBitmapRenderer)
+            return ImageBitmapRenderingContext.prototype;
         if (type === WI.Recording.Type.CanvasWebGL)
             return WebGLRenderingContext.prototype;
         return null;
@@ -345,6 +347,8 @@ WI.RecordingAction = class RecordingAction extends WI.Object
         case "strokeStyle":
         // 2D (non-standard)
         case "drawImageFromRect":
+        // BitmapRenderer
+        case "transferFromImageBitmap":
             return this._parameters.slice(0, 1);
         }
 
@@ -379,6 +383,9 @@ WI.RecordingAction._visualNames = {
         "strokeRect",
         "strokeText",
     ]),
+    [WI.Recording.Type.CanvasBitmapRenderer]: new Set([
+        "transferFromImageBitmap",
+    ]),
     [WI.Recording.Type.CanvasWebGL]: new Set([
         "clear",
         "drawArrays",
index d9b0134..2268f26 100644 (file)
@@ -43,7 +43,7 @@ WI.CanvasContentView = class CanvasContentView extends WI.ContentView
         this._pixelSizeElement = null;
         this._canvasNode = null;
 
-        if (this.representedObject.contextType === WI.Canvas.ContextType.Canvas2D || this.representedObject.contextType === WI.Canvas.ContextType.WebGL) {
+        if (this.representedObject.contextType === WI.Canvas.ContextType.Canvas2D || this.representedObject.contextType === WI.Canvas.ContextType.BitmapRenderer || this.representedObject.contextType === WI.Canvas.ContextType.WebGL) {
             const toolTip = WI.UIString("Start recording canvas actions.\nShift-click to record a single frame.");
             const altToolTip = WI.UIString("Stop recording canvas actions");
             this._recordButtonNavigationItem = new WI.ToggleButtonNavigationItem("record-start-stop", toolTip, altToolTip, "Images/Record.svg", "Images/Stop.svg", 13, 13);
index e6dc51f..f51b9fc 100644 (file)
@@ -273,6 +273,7 @@ WI.RecordingActionTreeElement = class RecordingActionTreeElement extends WI.Gene
             case "imageSmoothingEnabled":
             case "imageSmoothingQuality":
             case "putImageData":
+            case "transferFromImageBitmap":
             case "webkitImageSmoothingEnabled":
                 return "image";
 
index 4a8e010..22fccfe 100644 (file)
@@ -40,8 +40,9 @@ WI.RecordingContentView = class RecordingContentView extends WI.ContentView
         this.element.classList.add("recording", this.representedObject.type);
 
         let isCanvas2D = this.representedObject.type === WI.Recording.Type.Canvas2D;
+        let isCanvasBitmapRenderer = this.representedObject.type === WI.Recording.Type.CanvasBitmapRenderer;
         let isCanvasWebGL = this.representedObject.type === WI.Recording.Type.CanvasWebGL;
-        if (isCanvas2D || isCanvasWebGL) {
+        if (isCanvas2D || isCanvasBitmapRenderer || isCanvasWebGL) {
             if (isCanvas2D && WI.ImageUtilities.supportsCanvasPathDebugging()) {
                 this._pathContext = null;
 
@@ -89,8 +90,9 @@ WI.RecordingContentView = class RecordingContentView extends WI.ContentView
     get navigationItems()
     {
         let isCanvas2D = this.representedObject.type === WI.Recording.Type.Canvas2D;
+        let isCanvasBitmapRenderer = this.representedObject.type === WI.Recording.Type.CanvasBitmapRenderer;
         let isCanvasWebGL = this.representedObject.type === WI.Recording.Type.CanvasWebGL;
-        if (!isCanvas2D && !isCanvasWebGL)
+        if (!isCanvas2D && !isCanvasBitmapRenderer && !isCanvasWebGL)
             return [];
 
         let navigationItems = [this._exportButtonNavigationItem, new WI.DividerNavigationItem];
@@ -124,8 +126,8 @@ WI.RecordingContentView = class RecordingContentView extends WI.ContentView
 
         if (this.representedObject.type === WI.Recording.Type.Canvas2D)
             this._throttler._generateContentCanvas2D(index);
-        else if (this.representedObject.type === WI.Recording.Type.CanvasWebGL)
-            this._throttler._generateContentCanvasWebGL(index);
+        else if (this.representedObject.type === WI.Recording.Type.CanvasBitmapRenderer || this.representedObject.type === WI.Recording.Type.CanvasWebGL)
+            this._throttler._generateContentFromSnapshot(index);
 
         this._action = this.representedObject.actions[this._index];
 
@@ -137,8 +139,9 @@ WI.RecordingContentView = class RecordingContentView extends WI.ContentView
         super.shown();
 
         let isCanvas2D = this.representedObject.type === WI.Recording.Type.Canvas2D;
+        let isCanvasBitmapRenderer = this.representedObject.type === WI.Recording.Type.CanvasBitmapRenderer;
         let isCanvasWebGL = this.representedObject.type === WI.Recording.Type.CanvasWebGL;
-        if (isCanvas2D || isCanvasWebGL) {
+        if (isCanvas2D || isCanvasBitmapRenderer || isCanvasWebGL) {
             if (isCanvas2D)
                 this._updateCanvasPath();
             this._updateImageGrid();
@@ -150,7 +153,7 @@ WI.RecordingContentView = class RecordingContentView extends WI.ContentView
         super.hidden();
 
         this._generateContentCanvas2D.cancelThrottle();
-        this._generateContentCanvasWebGL.cancelThrottle();
+        this._generateContentFromSnapshot.cancelThrottle();
     }
 
     // Protected
@@ -377,18 +380,18 @@ WI.RecordingContentView = class RecordingContentView extends WI.ContentView
 
         applyActions(snapshot.index, this._index);
 
-        this._previewContainer.appendChild(snapshot.element);
+        this._previewContainer.insertAdjacentElement("afterbegin", snapshot.element);
         this._updateImageGrid();
     }
 
-    _generateContentCanvasWebGL(index)
+    _generateContentFromSnapshot(index)
     {
         let imageLoad = (event) => {
             // Loading took too long and the current action index has already changed.
             if (index !== this._index)
                 return;
 
-            this._generateContentCanvasWebGL(index);
+            this._generateContentFromSnapshot(index);
         };
 
         let initialState = this.representedObject.initialState;
@@ -441,9 +444,8 @@ WI.RecordingContentView = class RecordingContentView extends WI.ContentView
         let activated = WI.settings.showImageGrid.value;
         this._showGridButtonNavigationItem.activated = activated;
 
-        let snapshotIndex = Math.floor(this._index / WI.RecordingContentView.SnapshotInterval);
-        if (!isNaN(this._index) && this._snapshots[snapshotIndex])
-            this._snapshots[snapshotIndex].element.classList.toggle("show-grid", activated);
+        if (!isNaN(this._index))
+            this._previewContainer.firstElementChild.classList.toggle("show-grid", activated);
     }
 
     _updateSliderValue()