Chromium Code Reviews| Index: third_party/WebKit/Source/devtools/front_end/timeline/TimelineJSProfile.js |
| diff --git a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineJSProfile.js b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineJSProfile.js |
| index ea1e23a3123759c3492dfe581a30c41828784ed1..fa1c1a3063afb9b567a3a8cda7f76eedf81609b6 100644 |
| --- a/third_party/WebKit/Source/devtools/front_end/timeline/TimelineJSProfile.js |
| +++ b/third_party/WebKit/Source/devtools/front_end/timeline/TimelineJSProfile.js |
| @@ -6,15 +6,12 @@ |
| WebInspector.TimelineJSProfileProcessor = { }; |
| /** |
| - * @param {!ProfilerAgent.CPUProfile} jsProfile |
| + * @param {!WebInspector.CPUProfileDataModel} jsProfileModel |
| * @param {!WebInspector.TracingModel.Thread} thread |
| * @return {!Array<!WebInspector.TracingModel.Event>} |
| */ |
| -WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = function(jsProfile, thread) |
| +WebInspector.TimelineJSProfileProcessor.generateTracingEventsFromCpuProfile = function(jsProfileModel, thread) |
| { |
| - if (!jsProfile.samples) |
| - return []; |
| - var jsProfileModel = new WebInspector.CPUProfileDataModel(jsProfile); |
| var idleNode = jsProfileModel.idleNode; |
| var programNode = jsProfileModel.programNode; |
| var gcNode = jsProfileModel.gcNode; |
| @@ -494,3 +491,48 @@ WebInspector.TimelineJSProfileProcessor.processRawV8Samples = function(events) |
| return samples; |
| } |
| + |
| +/** |
| + * @param {!WebInspector.CPUProfileDataModel} profile |
| + */ |
| +WebInspector.TimelineJSProfileProcessor.buildLineLevelProfiles = function(profile) |
| +{ |
| + if (!Runtime.experiments.isEnabled("lineLevelProfile")) |
| + return; |
| + var nodesToGo = [profile.profileHead]; |
| + var sampleDuration = (profile.profileEndTime - profile.profileStartTime) / profile.totalHitCount; |
| + /** @type {!Map<string, !Map<number,number>>} */ |
| + var files = new Map(); |
| + while (nodesToGo.length) { |
| + var nodes = nodesToGo.pop().children; |
| + for (var i = 0; i < nodes.length; ++i) { |
| + var node = nodes[i]; |
| + if (!node.url) continue; |
|
lushnikov
2016/03/02 03:19:13
new line
alph
2016/03/02 18:34:34
Done.
|
| + var fileInfo = files.get(node.url); |
| + if (!fileInfo) { |
| + fileInfo = new Map(); |
| + files.set(node.url, fileInfo); |
| + } |
| + for (var j = 0; j < node.positionTicks.length; ++j) { |
| + var lineInfo = node.positionTicks[j]; |
| + var line = lineInfo.line; |
| + var time = lineInfo.ticks * sampleDuration; |
| + fileInfo.set(line, (fileInfo.get(line) || 0) + time); |
| + } |
| + nodesToGo.push(node); |
| + } |
| + } |
| + for (var fileInfo of files) { |
| + var uiSourceCode = WebInspector.workspace.uiSourceCodeForURL(fileInfo[0]); |
| + if (!uiSourceCode) |
| + continue; |
| + uiSourceCode.setProfileInfo(fileInfo[1]); |
| + } |
| +} |
| + |
| +WebInspector.TimelineJSProfileProcessor.resetLineLevelProfiles = function() |
| +{ |
| + if (!Runtime.experiments.isEnabled("lineLevelProfile")) |
| + return; |
| + WebInspector.workspace.uiSourceCodes().forEach(uiSourceCode => uiSourceCode.setProfileInfo(null)); |
| +} |