Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(2188)

Unified Diff: Source/devtools/front_end/timeline/TimelineJSProfile.js

Issue 1204473005: DevTools: Tweak v8 code objects name parsing. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: added a test. Created 5 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « Source/devtools/front_end/common/ParsedURL.js ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: Source/devtools/front_end/timeline/TimelineJSProfile.js
diff --git a/Source/devtools/front_end/timeline/TimelineJSProfile.js b/Source/devtools/front_end/timeline/TimelineJSProfile.js
index c49f7f5d7619d555c980bd1eba433e22fd96af48..324e94b77eb6ae6222cd54e5f0b03b80183474f4 100644
--- a/Source/devtools/front_end/timeline/TimelineJSProfile.js
+++ b/Source/devtools/front_end/timeline/TimelineJSProfile.js
@@ -307,56 +307,80 @@ WebInspector.TimelineJSProfileProcessor.CodeMap.prototype = {
}
/**
- * @param {!Array<!WebInspector.TracingModel.Event>} events
- * @return {!Array<!WebInspector.TracingModel.Event>}
+ * @param {string} functionName
+ * @param {string=} url
+ * @param {string=} scriptId
+ * @param {number=} line
+ * @param {number=} column
+ * @return {!ConsoleAgent.CallFrame}
*/
-WebInspector.TimelineJSProfileProcessor.processRawV8Samples = function(events)
+WebInspector.TimelineJSProfileProcessor._createFrame = function(functionName, url, scriptId, line, column)
{
- var unknownFrame = {
- functionName: "(unknown)",
- url: "",
- scriptId: "0",
- lineNumber: 0,
- columnNumber: 0
- };
- /**
- * @param {string} address
- * @return {!ConsoleAgent.CallFrame}
- */
- function convertRawFrame(address)
- {
- return codeMap.lookupEntry(address) || unknownFrame;
- }
+ return /** @type {!ConsoleAgent.CallFrame} */ ({
+ "functionName": functionName,
+ "url": url || "",
+ "scriptId": scriptId || "0",
+ "lineNumber": line || 0,
+ "columnNumber": column || 0
+ });
+}
+/**
+ * @param {string} name
+ * @param {number} scriptId
+ * @return {!ConsoleAgent.CallFrame}
+ */
+WebInspector.TimelineJSProfileProcessor._buildCallFrame = function(name, scriptId)
+{
// Code states:
// (empty) -> compiled
// ~ -> optimizable
// * -> optimized
- var reName = /^(\S*:)?[*~]?(\S*)(?: (\S*))?$/;
+ var rePrefix = /^(\w*:)?[*~]?(.*)$/m;
+
+ var tokens = rePrefix.exec(name);
+ var prefix = tokens[1];
+ var body = tokens[2];
+ var rawName;
+ var rawUrl;
+ if (prefix === "Script:") {
+ rawName = "";
+ rawUrl = body;
+ } else {
+ var spacePos = body.lastIndexOf(" ");
+ rawName = spacePos !== -1 ? body.substr(0, spacePos) : body;
+ rawUrl = spacePos !== -1 ? body.substr(spacePos + 1) : "";
+ }
+ var functionName = rawName;
+ var urlData = WebInspector.ParsedURL.splitLineAndColumn(rawUrl);
+ var url = urlData.url || "";
+ var line = urlData.lineNumber || 0;
+ var column = urlData.columnNumber || 0;
+ return WebInspector.TimelineJSProfileProcessor._createFrame(functionName, url, String(scriptId), line, column);
+}
+
+/**
+ * @param {!Array<!WebInspector.TracingModel.Event>} events
+ * @return {!Array<!WebInspector.TracingModel.Event>}
+ */
+WebInspector.TimelineJSProfileProcessor.processRawV8Samples = function(events)
+{
+ var missingAddesses = new Set();
/**
- * @param {string} name
- * @param {number} scriptId
+ * @param {string} address
* @return {!ConsoleAgent.CallFrame}
*/
- function buildCallFrame(name, scriptId)
+ function convertRawFrame(address)
{
- var parsed = reName.exec(name);
- if (!parsed)
- return unknownFrame;
- var functionName = parsed[2] || "";
- var urlData = WebInspector.ParsedURL.splitLineAndColumn(parsed[3] || "");
- var url = urlData && urlData.url || "";
- var line = urlData && urlData.lineNumber || 0;
- var column = urlData && urlData.columnNumber || 0;
- var frame = {
- "functionName": functionName,
- "url": url,
- "scriptId": String(scriptId),
- "lineNumber": line,
- "columnNumber": column
- };
- return frame;
+ var entry = codeMap.lookupEntry(address);
+ if (entry)
+ return entry;
+ if (!missingAddesses.has(address)) {
+ missingAddesses.add(address);
+ console.error("Address " + address + " has missing code entry");
+ }
+ return WebInspector.TimelineJSProfileProcessor._createFrame(address);
}
var recordTypes = WebInspector.TimelineModel.RecordType;
@@ -367,7 +391,8 @@ WebInspector.TimelineJSProfileProcessor.processRawV8Samples = function(events)
var data = e.args["data"];
switch (e.name) {
case recordTypes.JitCodeAdded:
- codeMap.addEntry(data["code_start"], data["code_len"], buildCallFrame(data["name"], data["script_id"]));
+ var frame = WebInspector.TimelineJSProfileProcessor._buildCallFrame(data["name"], data["script_id"]);
+ codeMap.addEntry(data["code_start"], data["code_len"], frame);
break;
case recordTypes.JitCodeMoved:
codeMap.moveEntry(data["code_start"], data["new_code_start"], data["code_len"]);
« no previous file with comments | « Source/devtools/front_end/common/ParsedURL.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698