Title: [129877] trunk/Source/WebCore
Revision
129877
Author
[email protected]
Date
2012-09-28 05:09:12 -0700 (Fri, 28 Sep 2012)

Log Message

Web Inspector: [Canvas] log property setters too along with function calls
https://bugs.webkit.org/show_bug.cgi?id=97776

Patch by Andrey Adaikin <[email protected]> on 2012-09-28
Reviewed by Pavel Feldman.

Trace logs should also contain property setter calls.

* inspector/InjectedScriptCanvasModuleSource.js:
(.):
* inspector/Inspector.json:
* inspector/front-end/CanvasProfileView.js:
(WebInspector.CanvasProfileView.prototype._showTraceLog):

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (129876 => 129877)


--- trunk/Source/WebCore/ChangeLog	2012-09-28 12:02:32 UTC (rev 129876)
+++ trunk/Source/WebCore/ChangeLog	2012-09-28 12:09:12 UTC (rev 129877)
@@ -1,3 +1,18 @@
+2012-09-28  Andrey Adaikin  <[email protected]>
+
+        Web Inspector: [Canvas] log property setters too along with function calls
+        https://bugs.webkit.org/show_bug.cgi?id=97776
+
+        Reviewed by Pavel Feldman.
+
+        Trace logs should also contain property setter calls.
+
+        * inspector/InjectedScriptCanvasModuleSource.js:
+        (.):
+        * inspector/Inspector.json:
+        * inspector/front-end/CanvasProfileView.js:
+        (WebInspector.CanvasProfileView.prototype._showTraceLog):
+
 2012-09-28  Kent Tamura  <[email protected]>
 
         Remove LocalizedNumber*.*

Modified: trunk/Source/WebCore/inspector/InjectedScriptCanvasModuleSource.js (129876 => 129877)


--- trunk/Source/WebCore/inspector/InjectedScriptCanvasModuleSource.js	2012-09-28 12:02:32 UTC (rev 129876)
+++ trunk/Source/WebCore/inspector/InjectedScriptCanvasModuleSource.js	2012-09-28 12:09:12 UTC (rev 129877)
@@ -288,6 +288,9 @@
     this._args = Array.prototype.slice.call(args, 0);
     this._result = result;
     this._stackTrace = stackTrace || null;
+
+    if (!this._functionName)
+        console.assert(this._args.length === 2 && typeof this._args[0] === "string");
 }
 
 Call.prototype = {
@@ -308,6 +311,14 @@
     },
 
     /**
+     * @return {boolean}
+     */
+    isPropertySetter: function()
+    {
+        return !this._functionName;
+    },
+    
+    /**
      * @return {Array}
      */
     args: function()
@@ -382,18 +393,24 @@
     replay: function(replayableCall, cache)
     {
         var replayObject = ReplayableResource.replay(replayableCall.resource(), cache);
-        var replayFunction = replayObject[replayableCall.functionName()];
-        console.assert(typeof replayFunction === "function", "Expected a function to replay");
         var replayArgs = replayableCall.args().map(function(obj) {
             return ReplayableResource.replay(obj, cache);
         });
-        var replayResult = replayFunction.apply(replayObject, replayArgs);
-        if (replayableCall.result() instanceof ReplayableResource) {
-            var resource = replayableCall.result().replay(cache);
-            if (!resource.wrappedObject())
-                resource.setWrappedObject(replayResult);
+        var replayResult = undefined;
+
+        if (replayableCall.isPropertySetter())
+            replayObject[replayArgs[0]] = replayArgs[1];
+        else {
+            var replayFunction = replayObject[replayableCall.functionName()];
+            console.assert(typeof replayFunction === "function", "Expected a function to replay");
+            replayResult = replayFunction.apply(replayObject, replayArgs);
+            if (replayableCall.result() instanceof ReplayableResource) {
+                var resource = replayableCall.result().replay(cache);
+                if (!resource.wrappedObject())
+                    resource.setWrappedObject(replayResult);
+            }
         }
-
+    
         this._thisObject = replayObject;
         this._functionName = replayableCall.functionName();
         this._args = replayArgs;
@@ -439,6 +456,14 @@
     },
 
     /**
+     * @return {boolean}
+     */
+    isPropertySetter: function()
+    {
+        return !this._functionName;
+    },
+
+    /**
      * @return {Array.<ReplayableResource|*>}
      */
     args: function()
@@ -699,12 +724,7 @@
                     {
                         return wrappedObject[property];
                     },
-                    set: function(value)
-                    {
-                        // FIXME: Log the setter calls.
-                        console.error("FIXME: Setting an attribute %s was not logged.", property);
-                        wrappedObject[property] = value;
-                    },
+                    set: self._wrapPropertySetter(self, wrappedObject, property),
                     enumerable: true
                 });
             }
@@ -773,6 +793,30 @@
     },
 
     /**
+     * @param {Resource} resource
+     * @param {Object} originalObject
+     * @param {string} propertyName
+     * @return {Function}
+     */
+    _wrapPropertySetter: function(resource, originalObject, propertyName)
+    {
+        return function(value)
+        {
+            var manager = resource.manager();
+            if (!manager || !manager.capturing()) {
+                originalObject[propertyName] = value;
+                return;
+            }
+            var args = [propertyName, value];
+            manager.captureArguments(resource, args);
+            originalObject[propertyName] = value;
+            var stackTrace = StackTrace.create(1, arguments.callee);
+            var call = new Call(resource, "", args, undefined, stackTrace);
+            manager.captureCall(call);
+        };
+    },
+
+    /**
      * @return {Object.<string, Function>}
      */
     _customWrapFunctions: function()
@@ -2270,14 +2314,20 @@
             var stackTrace = call.stackTrace();
             var callFrame = stackTrace ? stackTrace.callFrame(0) || {} : {};
             var traceLogItem = {
-                functionName: call.functionName(),
-                arguments: args,
                 sourceURL: callFrame.sourceURL,
                 lineNumber: callFrame.lineNumber,
                 columnNumber: callFrame.columnNumber
             };
-            if (call.result())
-                traceLogItem.result = call.result() + "";
+            if (call.functionName()) {
+                traceLogItem.functionName = call.functionName();
+                traceLogItem.arguments = args;
+            } else {
+                traceLogItem.property = args[0];
+                traceLogItem.value = args[1];
+            }
+            var callResult = call.result();
+            if (callResult !== undefined && callResult !== null)
+                traceLogItem.result = callResult + "";
             result.calls.push(traceLogItem);
         }
         return result;

Modified: trunk/Source/WebCore/inspector/Inspector.json (129876 => 129877)


--- trunk/Source/WebCore/inspector/Inspector.json	2012-09-28 12:02:32 UTC (rev 129876)
+++ trunk/Source/WebCore/inspector/Inspector.json	2012-09-28 12:09:12 UTC (rev 129877)
@@ -3101,8 +3101,10 @@
                 "id": "Call",
                 "type": "object",
                 "properties": [
-                    { "name": "functionName", "type": "string" },
-                    { "name": "arguments", "type": "array", "items": { "type": "string" } },
+                    { "name": "functionName", "type": "string", "optional": true },
+                    { "name": "arguments", "type": "array", "items": { "type": "string" }, "optional": true },
+                    { "name": "property", "type": "string", "optional": true },
+                    { "name": "value", "type": "string", "optional": true },
                     { "name": "result", "type": "string", "optional": true },
                     { "name": "sourceURL", "type": "string", "optional": true },
                     { "name": "lineNumber", "type": "integer", "optional": true },

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


--- trunk/Source/WebCore/inspector/front-end/CanvasProfileView.js	2012-09-28 12:02:32 UTC (rev 129876)
+++ trunk/Source/WebCore/inspector/front-end/CanvasProfileView.js	2012-09-28 12:09:12 UTC (rev 129877)
@@ -110,17 +110,22 @@
                 traceLogItem.stepNo = i;
                 traceLogItem.appendChild(document.createTextNode("(" + (i+1) + ") "));
 
+                var sourceText = call.functionName || "context." + call.property;
                 if (call.sourceURL) {
                     // FIXME(62725): stack trace line/column numbers are one-based.
                     var lineNumber = Math.max(0, call.lineNumber - 1) || 0;
                     var columnNumber = Math.max(0, call.columnNumber - 1) || 0;
                     var linkElement = this._linkifier.linkifyLocation(call.sourceURL, lineNumber, columnNumber);
-                    linkElement.textContent = call.functionName;
+                    linkElement.textContent = sourceText;
                     traceLogItem.appendChild(linkElement);
                 } else
-                    traceLogItem.appendChild(document.createTextNode(call.functionName));
+                    traceLogItem.appendChild(document.createTextNode(sourceText));
 
-                traceLogItem.appendChild(document.createTextNode("(" + call.arguments.join(", ") + ")"));
+                if (call.arguments)
+                    traceLogItem.appendChild(document.createTextNode("(" + call.arguments.join(", ") + ")"));
+                else
+                    traceLogItem.appendChild(document.createTextNode(" = " + call.value));
+
                 if (typeof call.result !== "undefined")
                     traceLogItem.appendChild(document.createTextNode(" => " + call.result));
                 this._traceLogElement.appendChild(traceLogItem);
_______________________________________________
webkit-changes mailing list
[email protected]
http://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to