Title: [143237] trunk
Revision
143237
Author
[email protected]
Date
2013-02-18 09:45:15 -0800 (Mon, 18 Feb 2013)

Log Message

Web Inspector: [Canvas] fix replay log grouping by frames
https://bugs.webkit.org/show_bug.cgi?id=110122

Reviewed by Pavel Feldman.

Source/WebCore:

Bug: log grouping by frames did not work if a frame end call is not a draw call.
Drive-by: Last draw call group may not contain a draw call. In this case merge it into the previous group.

* inspector/front-end/CanvasProfileView.js:
(WebInspector.CanvasProfileView.prototype._appendCallNode):
(WebInspector.CanvasProfileView.prototype._maybeMergeLastDrawCallGroups):

LayoutTests:

Canvas replay test: last command is not a draw call.

* inspector/profiler/canvas2d/canvas-replay-log-grid-expected.txt:
* inspector/profiler/canvas2d/canvas-replay-log-grid.html:

Modified Paths

Diff

Modified: trunk/LayoutTests/ChangeLog (143236 => 143237)


--- trunk/LayoutTests/ChangeLog	2013-02-18 17:42:03 UTC (rev 143236)
+++ trunk/LayoutTests/ChangeLog	2013-02-18 17:45:15 UTC (rev 143237)
@@ -1,3 +1,15 @@
+2013-02-18  Andrey Adaikin  <[email protected]>
+
+        Web Inspector: [Canvas] fix replay log grouping by frames
+        https://bugs.webkit.org/show_bug.cgi?id=110122
+
+        Reviewed by Pavel Feldman.
+
+        Canvas replay test: last command is not a draw call.
+
+        * inspector/profiler/canvas2d/canvas-replay-log-grid-expected.txt:
+        * inspector/profiler/canvas2d/canvas-replay-log-grid.html:
+
 2013-02-18  Stephen White  <[email protected]>
 
         [chromium] Unreviewed gardening.

Modified: trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid-expected.txt (143236 => 143237)


--- trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid-expected.txt	2013-02-18 17:42:03 UTC (rev 143236)
+++ trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid-expected.txt	2013-02-18 17:45:15 UTC (rev 143237)
@@ -4,29 +4,39 @@
 
    |                   Frame #1 |                                | |
    |         Draw call group #1 |                                | |
- 1 |                beginPath() | canvas-replay-log-grid.html:26 | |
- 2 |       rect(0, 0, 100, 100) | canvas-replay-log-grid.html:27 | |
- 3 |    context.fillStyle = red | canvas-replay-log-grid.html:28 | |
- 4 |                     fill() | canvas-replay-log-grid.html:29 | |
+ 1 |                     save() | canvas-replay-log-grid.html:26 | |
+ 2 |                beginPath() | canvas-replay-log-grid.html:27 | |
+ 3 |       rect(0, 0, 100, 100) | canvas-replay-log-grid.html:28 | |
+ 4 |    context.fillStyle = red | canvas-replay-log-grid.html:29 | |
+ 5 |                     fill() | canvas-replay-log-grid.html:30 | |
    |         Draw call group #2 |                                | |
- 5 |                beginPath() | canvas-replay-log-grid.html:26 | |
- 6 |         rect(5, 5, 95, 95) | canvas-replay-log-grid.html:27 | |
- 7 |  context.fillStyle = green | canvas-replay-log-grid.html:28 | |
- 8 |                     fill() | canvas-replay-log-grid.html:29 | |
+ 6 |                  restore() | canvas-replay-log-grid.html:31 | |
+ 7 |                     save() | canvas-replay-log-grid.html:26 | |
+ 8 |                beginPath() | canvas-replay-log-grid.html:27 | |
+ 9 |         rect(5, 5, 95, 95) | canvas-replay-log-grid.html:28 | |
+10 |  context.fillStyle = green | canvas-replay-log-grid.html:29 | |
+11 |                     fill() | canvas-replay-log-grid.html:30 | |
+12 |                  restore() | canvas-replay-log-grid.html:31 | |
    |                   Frame #2 |                                | |
    |         Draw call group #3 |                                | |
- 9 |                beginPath() | canvas-replay-log-grid.html:26 | |
-10 |       rect(10, 10, 90, 90) | canvas-replay-log-grid.html:27 | |
-11 |   context.fillStyle = blue | canvas-replay-log-grid.html:28 | |
-12 |                     fill() | canvas-replay-log-grid.html:29 | |
+13 |                     save() | canvas-replay-log-grid.html:26 | |
+14 |                beginPath() | canvas-replay-log-grid.html:27 | |
+15 |       rect(10, 10, 90, 90) | canvas-replay-log-grid.html:28 | |
+16 |   context.fillStyle = blue | canvas-replay-log-grid.html:29 | |
+17 |                     fill() | canvas-replay-log-grid.html:30 | |
    |         Draw call group #4 |                                | |
-13 |                beginPath() | canvas-replay-log-grid.html:26 | |
-14 |       rect(15, 15, 85, 85) | canvas-replay-log-grid.html:27 | |
-15 | context.fillStyle = yellow | canvas-replay-log-grid.html:28 | |
-16 |                     fill() | canvas-replay-log-grid.html:29 | |
+18 |                  restore() | canvas-replay-log-grid.html:31 | |
+19 |                     save() | canvas-replay-log-grid.html:26 | |
+20 |                beginPath() | canvas-replay-log-grid.html:27 | |
+21 |       rect(15, 15, 85, 85) | canvas-replay-log-grid.html:28 | |
+22 | context.fillStyle = yellow | canvas-replay-log-grid.html:29 | |
+23 |                     fill() | canvas-replay-log-grid.html:30 | |
    |         Draw call group #5 |                                | |
-17 |                beginPath() | canvas-replay-log-grid.html:26 | |
-18 |       rect(20, 20, 80, 80) | canvas-replay-log-grid.html:27 | |
-19 |  context.fillStyle = black | canvas-replay-log-grid.html:28 | |
-20 |                     fill() | canvas-replay-log-grid.html:29 | |
+24 |                  restore() | canvas-replay-log-grid.html:31 | |
+25 |                     save() | canvas-replay-log-grid.html:26 | |
+26 |                beginPath() | canvas-replay-log-grid.html:27 | |
+27 |       rect(20, 20, 80, 80) | canvas-replay-log-grid.html:28 | |
+28 |  context.fillStyle = black | canvas-replay-log-grid.html:29 | |
+29 |                     fill() | canvas-replay-log-grid.html:30 | |
+30 |                  restore() | canvas-replay-log-grid.html:31 | |
 

Modified: trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid.html (143236 => 143237)


--- trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid.html	2013-02-18 17:42:03 UTC (rev 143236)
+++ trunk/LayoutTests/inspector/profiler/canvas2d/canvas-replay-log-grid.html	2013-02-18 17:45:15 UTC (rev 143237)
@@ -23,10 +23,12 @@
     repeats = repeats || 1;
     while (repeats-- > 0) {
         var offset = 5 * round;
+        context.save();
         context.beginPath();
         context.rect(offset, offset, 100 - offset, 100 - offset);
         context.fillStyle = colors[round % colors.length];
         context.fill();
+        context.restore();
         ++round;
     }
 }

Modified: trunk/Source/WebCore/ChangeLog (143236 => 143237)


--- trunk/Source/WebCore/ChangeLog	2013-02-18 17:42:03 UTC (rev 143236)
+++ trunk/Source/WebCore/ChangeLog	2013-02-18 17:45:15 UTC (rev 143237)
@@ -1,3 +1,17 @@
+2013-02-18  Andrey Adaikin  <[email protected]>
+
+        Web Inspector: [Canvas] fix replay log grouping by frames
+        https://bugs.webkit.org/show_bug.cgi?id=110122
+
+        Reviewed by Pavel Feldman.
+
+        Bug: log grouping by frames did not work if a frame end call is not a draw call.
+        Drive-by: Last draw call group may not contain a draw call. In this case merge it into the previous group.
+
+        * inspector/front-end/CanvasProfileView.js:
+        (WebInspector.CanvasProfileView.prototype._appendCallNode):
+        (WebInspector.CanvasProfileView.prototype._maybeMergeLastDrawCallGroups):
+
 2013-02-18  Christophe Dumez  <[email protected]>
 
         [Soup] Superfluous HashMap check in SocketStreamHandleSoup::getHandleFromId()

Modified: trunk/Source/WebCore/inspector/front-end/CanvasProfileView.js (143236 => 143237)


--- trunk/Source/WebCore/inspector/front-end/CanvasProfileView.js	2013-02-18 17:42:03 UTC (rev 143236)
+++ trunk/Source/WebCore/inspector/front-end/CanvasProfileView.js	2013-02-18 17:45:15 UTC (rev 143237)
@@ -359,7 +359,7 @@
         var drawCallGroup = this._drawCallGroups.peekLast();
         if (drawCallGroup) {
             var lastNode = drawCallGroup.children.peekLast();
-            if (lastNode && lastNode.call.isDrawingCall)
+            if (lastNode && (lastNode.call.isDrawingCall || lastNode.call.isFrameEndCall))
                 drawCallGroup = null;
         }
         if (!drawCallGroup) {
@@ -375,6 +375,8 @@
             this._appendDrawCallGroup(drawCallGroup);
         }
         drawCallGroup.appendChild(gridNode);
+        if (gridNode.call.isFrameEndCall)
+            this._maybeMergeLastDrawCallGroups();
     },
 
     /**
@@ -404,6 +406,26 @@
         frameGroup.appendChild(drawCallGroup);
     },
 
+    _maybeMergeLastDrawCallGroups: function()
+    {
+        var frameGroup = this._frameGroups.peekLast();
+        if (!frameGroup)
+            return;
+        var groups = frameGroup.children.length;
+        if (groups < 2)
+            return;
+        var src = "" - 1]
+        for (var i = 0, n = src.children.length; i < n; ++i) {
+            if (src.children[i].call.isDrawingCall)
+                return;
+        }
+        var dst = frameGroup.children[groups - 2];
+        while (src.children.length)
+            dst.appendChild(src.children[0]);
+        frameGroup.removeChild(src);
+        this._drawCallGroups.pop();
+    },
+
     /**
      * @param {number} index
      * @param {CanvasAgent.Call} call
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to