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

Side by Side Diff: Source/devtools/front_end/CPUProfileView.js

Issue 235453008: DevTools: Extract CPU profile model out of CPUProfileView. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 8 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « LayoutTests/inspector/profiler/profiler-test.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2008 Apple Inc. All Rights Reserved. 2 * Copyright (C) 2008 Apple Inc. All Rights Reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions 5 * modification, are permitted provided that the following conditions
6 * are met: 6 * are met:
7 * 1. Redistributions of source code must retain the above copyright 7 * 1. Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer. 8 * notice, this list of conditions and the following disclaimer.
9 * 2. Redistributions in binary form must reproduce the above copyright 9 * 2. Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the 10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution. 11 * documentation and/or other materials provided with the distribution.
12 * 12 *
13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY 13 * THIS SOFTWARE IS PROVIDED BY APPLE INC. ``AS IS'' AND ANY
14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 14 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 15 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR 16 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL APPLE INC. OR
17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 17 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 18 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR 19 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY 20 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 21 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 22 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 23 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
24 */ 24 */
25 25
26
27 /**
28 * @constructor
29 * @param {!ProfilerAgent.CPUProfile} profile
30 */
31 WebInspector.CPUProfileDataModel = function(profile)
32 {
33 this.profileHead = profile.head;
34 this.samples = profile.samples;
35 this._calculateTimes(profile);
36 this._assignParentsInProfile();
37 if (this.samples)
38 this._buildIdToNodeMap();
39 }
40
41 WebInspector.CPUProfileDataModel.prototype = {
42 /**
43 * @param {!ProfilerAgent.CPUProfile} profile
44 */
45 _calculateTimes: function(profile)
46 {
47 function totalHitCount(node) {
48 var result = node.hitCount;
49 for (var i = 0; i < node.children.length; i++)
50 result += totalHitCount(node.children[i]);
51 return result;
52 }
53 profile.totalHitCount = totalHitCount(profile.head);
54
55 var durationMs = 1000 * (profile.endTime - profile.startTime);
56 var samplingInterval = durationMs / profile.totalHitCount;
57 this.samplingIntervalMs = samplingInterval;
58
59 function calculateTimesForNode(node) {
60 node.selfTime = node.hitCount * samplingInterval;
61 var totalHitCount = node.hitCount;
62 for (var i = 0; i < node.children.length; i++)
63 totalHitCount += calculateTimesForNode(node.children[i]);
64 node.totalTime = totalHitCount * samplingInterval;
65 return totalHitCount;
66 }
67 calculateTimesForNode(profile.head);
68 },
69
70 _assignParentsInProfile: function()
71 {
72 var head = this.profileHead;
73 head.parent = null;
74 head.head = null;
75 var nodesToTraverse = [ head ];
76 while (nodesToTraverse.length) {
77 var parent = nodesToTraverse.pop();
78 var children = parent.children;
79 var length = children.length;
80 for (var i = 0; i < length; ++i) {
81 var child = children[i];
82 child.head = head;
83 child.parent = parent;
84 if (child.children.length)
85 nodesToTraverse.push(child);
86 }
87 }
88 },
89
90 _buildIdToNodeMap: function()
91 {
92 /** @type {!Object.<number, !ProfilerAgent.CPUProfileNode>} */
93 this._idToNode = {};
94 var idToNode = this._idToNode;
95 var stack = [this.profileHead];
96 while (stack.length) {
97 var node = stack.pop();
98 idToNode[node.id] = node;
99 for (var i = 0; i < node.children.length; i++)
100 stack.push(node.children[i]);
101 }
102
103 var topLevelNodes = this.profileHead.children;
104 for (var i = 0; i < topLevelNodes.length; i++) {
105 var node = topLevelNodes[i];
106 if (node.functionName === "(garbage collector)") {
107 this._gcNode = node;
108 break;
109 }
110 }
111 }
112 }
113
114
26 /** 115 /**
27 * @constructor 116 * @constructor
28 * @extends {WebInspector.VBox} 117 * @extends {WebInspector.VBox}
29 * @param {!WebInspector.CPUProfileHeader} profileHeader 118 * @param {!WebInspector.CPUProfileHeader} profileHeader
30 */ 119 */
31 WebInspector.CPUProfileView = function(profileHeader) 120 WebInspector.CPUProfileView = function(profileHeader)
32 { 121 {
33 WebInspector.VBox.call(this); 122 WebInspector.VBox.call(this);
34 this.element.classList.add("cpu-profile-view"); 123 this.element.classList.add("cpu-profile-view");
35 124
(...skipping 29 matching lines...) Expand all
65 this.excludeButton = new WebInspector.StatusBarButton(WebInspector.UIString( "Exclude selected function."), "exclude-profile-node-status-bar-item"); 154 this.excludeButton = new WebInspector.StatusBarButton(WebInspector.UIString( "Exclude selected function."), "exclude-profile-node-status-bar-item");
66 this.excludeButton.setEnabled(false); 155 this.excludeButton.setEnabled(false);
67 this.excludeButton.addEventListener("click", this._excludeClicked, this); 156 this.excludeButton.addEventListener("click", this._excludeClicked, this);
68 this._statusBarButtonsElement.appendChild(this.excludeButton.element); 157 this._statusBarButtonsElement.appendChild(this.excludeButton.element);
69 158
70 this.resetButton = new WebInspector.StatusBarButton(WebInspector.UIString("R estore all functions."), "reset-profile-status-bar-item"); 159 this.resetButton = new WebInspector.StatusBarButton(WebInspector.UIString("R estore all functions."), "reset-profile-status-bar-item");
71 this.resetButton.visible = false; 160 this.resetButton.visible = false;
72 this.resetButton.addEventListener("click", this._resetClicked, this); 161 this.resetButton.addEventListener("click", this._resetClicked, this);
73 this._statusBarButtonsElement.appendChild(this.resetButton.element); 162 this._statusBarButtonsElement.appendChild(this.resetButton.element);
74 163
75 this.profileHead = /** @type {?ProfilerAgent.CPUProfileNode} */ (null); 164 this._profileHeader = profileHeader;
76 this.profile = profileHeader;
77
78 this._linkifier = new WebInspector.Linkifier(new WebInspector.Linkifier.Defa ultFormatter(30)); 165 this._linkifier = new WebInspector.Linkifier(new WebInspector.Linkifier.Defa ultFormatter(30));
79 166
80 if (this.profile._profile) // If the profile has been loaded from file then use it. 167 this.profile = new WebInspector.CPUProfileDataModel(profileHeader._profile | | profileHeader.protocolProfile());
81 this._processProfileData(this.profile._profile); 168
82 else 169 this._changeView();
83 this._processProfileData(this.profile.protocolProfile()); 170 if (this._flameChart)
171 this._flameChart.update();
84 } 172 }
85 173
86 WebInspector.CPUProfileView._TypeFlame = "Flame"; 174 WebInspector.CPUProfileView._TypeFlame = "Flame";
87 WebInspector.CPUProfileView._TypeTree = "Tree"; 175 WebInspector.CPUProfileView._TypeTree = "Tree";
88 WebInspector.CPUProfileView._TypeHeavy = "Heavy"; 176 WebInspector.CPUProfileView._TypeHeavy = "Heavy";
89 177
90 WebInspector.CPUProfileView.prototype = { 178 WebInspector.CPUProfileView.prototype = {
91 /** 179 /**
92 * @param {!number} timeLeft 180 * @param {!number} timeLeft
93 * @param {!number} timeRight 181 * @param {!number} timeRight
94 */ 182 */
95 selectRange: function(timeLeft, timeRight) 183 selectRange: function(timeLeft, timeRight)
96 { 184 {
97 if (!this._flameChart) 185 if (!this._flameChart)
98 return; 186 return;
99 this._flameChart.selectRange(timeLeft, timeRight); 187 this._flameChart.selectRange(timeLeft, timeRight);
100 }, 188 },
101 189
102 /**
103 * @param {?ProfilerAgent.CPUProfile} profile
104 */
105 _processProfileData: function(profile)
106 {
107 this.profileHead = profile.head;
108 this.samples = profile.samples;
109
110 this._calculateTimes(profile);
111
112 this._assignParentsInProfile();
113 if (this.samples)
114 this._buildIdToNodeMap();
115 this._changeView();
116 if (this._flameChart)
117 this._flameChart.update();
118 },
119
120 get statusBarItems() 190 get statusBarItems()
121 { 191 {
122 return [this.viewSelectComboBox.element, this._statusBarButtonsElement]; 192 return [this.viewSelectComboBox.element, this._statusBarButtonsElement];
123 }, 193 },
124 194
125 /** 195 /**
126 * @return {!WebInspector.ProfileDataGridTree} 196 * @return {!WebInspector.ProfileDataGridTree}
127 */ 197 */
128 _getBottomUpProfileDataGridTree: function() 198 _getBottomUpProfileDataGridTree: function()
129 { 199 {
130 if (!this._bottomUpProfileDataGridTree) 200 if (!this._bottomUpProfileDataGridTree)
131 this._bottomUpProfileDataGridTree = new WebInspector.BottomUpProfile DataGridTree(this, /** @type {!ProfilerAgent.CPUProfileNode} */ (this.profileHea d)); 201 this._bottomUpProfileDataGridTree = new WebInspector.BottomUpProfile DataGridTree(this, /** @type {!ProfilerAgent.CPUProfileNode} */ (this.profile.pr ofileHead));
132 return this._bottomUpProfileDataGridTree; 202 return this._bottomUpProfileDataGridTree;
133 }, 203 },
134 204
135 /** 205 /**
136 * @return {!WebInspector.ProfileDataGridTree} 206 * @return {!WebInspector.ProfileDataGridTree}
137 */ 207 */
138 _getTopDownProfileDataGridTree: function() 208 _getTopDownProfileDataGridTree: function()
139 { 209 {
140 if (!this._topDownProfileDataGridTree) 210 if (!this._topDownProfileDataGridTree)
141 this._topDownProfileDataGridTree = new WebInspector.TopDownProfileDa taGridTree(this, /** @type {!ProfilerAgent.CPUProfileNode} */ (this.profileHead) ); 211 this._topDownProfileDataGridTree = new WebInspector.TopDownProfileDa taGridTree(this, /** @type {!ProfilerAgent.CPUProfileNode} */ (this.profile.prof ileHead));
142 return this._topDownProfileDataGridTree; 212 return this._topDownProfileDataGridTree;
143 }, 213 },
144 214
145 willHide: function() 215 willHide: function()
146 { 216 {
147 this._currentSearchResultIndex = -1; 217 this._currentSearchResultIndex = -1;
148 }, 218 },
149 219
150 refresh: function() 220 refresh: function()
151 { 221 {
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 return; 433 return;
364 434
365 var profileNode = searchResult.profileNode; 435 var profileNode = searchResult.profileNode;
366 profileNode.revealAndSelect(); 436 profileNode.revealAndSelect();
367 }, 437 },
368 438
369 _ensureFlameChartCreated: function() 439 _ensureFlameChartCreated: function()
370 { 440 {
371 if (this._flameChart) 441 if (this._flameChart)
372 return; 442 return;
373 this._dataProvider = new WebInspector.CPUFlameChartDataProvider(this); 443 this._dataProvider = new WebInspector.CPUFlameChartDataProvider(this.pro file, this._profileHeader.target());
374 this._flameChart = new WebInspector.CPUProfileFlameChart(this._dataProvi der); 444 this._flameChart = new WebInspector.CPUProfileFlameChart(this._dataProvi der);
375 this._flameChart.addEventListener(WebInspector.FlameChart.Events.EntrySe lected, this._onEntrySelected.bind(this)); 445 this._flameChart.addEventListener(WebInspector.FlameChart.Events.EntrySe lected, this._onEntrySelected.bind(this));
376 }, 446 },
377 447
378 /** 448 /**
379 * @param {!WebInspector.Event} event 449 * @param {!WebInspector.Event} event
380 */ 450 */
381 _onEntrySelected: function(event) 451 _onEntrySelected: function(event)
382 { 452 {
383 var entryIndex = event.data; 453 var entryIndex = event.data;
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 "self": "selfTime", 556 "self": "selfTime",
487 "total": "totalTime", 557 "total": "totalTime",
488 "function": "functionName" 558 "function": "functionName"
489 }[sortColumnIdentifier]; 559 }[sortColumnIdentifier];
490 560
491 this.profileDataGridTree.sort(WebInspector.ProfileDataGridTree.propertyC omparator(sortProperty, sortAscending)); 561 this.profileDataGridTree.sort(WebInspector.ProfileDataGridTree.propertyC omparator(sortProperty, sortAscending));
492 562
493 this.refresh(); 563 this.refresh();
494 }, 564 },
495 565
496 _calculateTimes: function(profile)
497 {
498 function totalHitCount(node) {
499 var result = node.hitCount;
500 for (var i = 0; i < node.children.length; i++)
501 result += totalHitCount(node.children[i]);
502 return result;
503 }
504 profile.totalHitCount = totalHitCount(profile.head);
505
506 var durationMs = 1000 * (profile.endTime - profile.startTime);
507 var samplingInterval = durationMs / profile.totalHitCount;
508 this.samplingIntervalMs = samplingInterval;
509
510 function calculateTimesForNode(node) {
511 node.selfTime = node.hitCount * samplingInterval;
512 var totalHitCount = node.hitCount;
513 for (var i = 0; i < node.children.length; i++)
514 totalHitCount += calculateTimesForNode(node.children[i]);
515 node.totalTime = totalHitCount * samplingInterval;
516 return totalHitCount;
517 }
518 calculateTimesForNode(profile.head);
519 },
520
521 _assignParentsInProfile: function()
522 {
523 var head = this.profileHead;
524 head.parent = null;
525 head.head = null;
526 var nodesToTraverse = [ head ];
527 while (nodesToTraverse.length) {
528 var parent = nodesToTraverse.pop();
529 var children = parent.children;
530 var length = children.length;
531 for (var i = 0; i < length; ++i) {
532 var child = children[i];
533 child.head = head;
534 child.parent = parent;
535 if (child.children.length)
536 nodesToTraverse.push(child);
537 }
538 }
539 },
540
541 _buildIdToNodeMap: function()
542 {
543 /** @type {!Object.<string, !ProfilerAgent.CPUProfileNode>} */
544 this._idToNode = {};
545 var idToNode = this._idToNode;
546 var stack = [this.profileHead];
547 while (stack.length) {
548 var node = stack.pop();
549 idToNode[node.id] = node;
550 for (var i = 0; i < node.children.length; i++)
551 stack.push(node.children[i]);
552 }
553
554 var topLevelNodes = this.profileHead.children;
555 for (var i = 0; i < topLevelNodes.length; i++) {
556 var node = topLevelNodes[i];
557 if (node.functionName === "(garbage collector)") {
558 this._gcNode = node;
559 break;
560 }
561 }
562 },
563
564 __proto__: WebInspector.VBox.prototype 566 __proto__: WebInspector.VBox.prototype
565 } 567 }
566 568
567 /** 569 /**
568 * @constructor 570 * @constructor
569 * @extends {WebInspector.ProfileType} 571 * @extends {WebInspector.ProfileType}
570 * @implements {WebInspector.CPUProfilerModel.Delegate} 572 * @implements {WebInspector.CPUProfilerModel.Delegate}
571 */ 573 */
572 WebInspector.CPUProfileType = function() 574 WebInspector.CPUProfileType = function()
573 { 575 {
(...skipping 417 matching lines...) Expand 10 before | Expand all | Expand 10 after
991 colorGenerator.colorForID("(program)::0", 50); 993 colorGenerator.colorForID("(program)::0", 50);
992 colorGenerator.colorForID("(garbage collector)::0", 50); 994 colorGenerator.colorForID("(garbage collector)::0", 50);
993 WebInspector.CPUProfileView._colorGenerator = colorGenerator; 995 WebInspector.CPUProfileView._colorGenerator = colorGenerator;
994 } 996 }
995 return WebInspector.CPUProfileView._colorGenerator; 997 return WebInspector.CPUProfileView._colorGenerator;
996 } 998 }
997 999
998 /** 1000 /**
999 * @constructor 1001 * @constructor
1000 * @implements {WebInspector.FlameChartDataProvider} 1002 * @implements {WebInspector.FlameChartDataProvider}
1001 * @param {!WebInspector.CPUProfileView} cpuProfileView 1003 * @param {!WebInspector.CPUProfileDataModel} cpuProfile
1004 * @param {!WebInspector.Target} target
1002 */ 1005 */
1003 WebInspector.CPUFlameChartDataProvider = function(cpuProfileView) 1006 WebInspector.CPUFlameChartDataProvider = function(cpuProfile, target)
1004 { 1007 {
1005 WebInspector.FlameChartDataProvider.call(this); 1008 WebInspector.FlameChartDataProvider.call(this);
1006 this._cpuProfileView = cpuProfileView; 1009 this._cpuProfile = cpuProfile;
1010 this._target = target;
1007 this._colorGenerator = WebInspector.CPUProfileView.colorGenerator(); 1011 this._colorGenerator = WebInspector.CPUProfileView.colorGenerator();
1008 } 1012 }
1009 1013
1010 WebInspector.CPUFlameChartDataProvider.prototype = { 1014 WebInspector.CPUFlameChartDataProvider.prototype = {
1011 /** 1015 /**
1012 * @return {number} 1016 * @return {number}
1013 */ 1017 */
1014 barHeight: function() 1018 barHeight: function()
1015 { 1019 {
1016 return 15; 1020 return 15;
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
1048 zeroTime: function() 1052 zeroTime: function()
1049 { 1053 {
1050 return 0; 1054 return 0;
1051 }, 1055 },
1052 1056
1053 /** 1057 /**
1054 * @return {number} 1058 * @return {number}
1055 */ 1059 */
1056 totalTime: function() 1060 totalTime: function()
1057 { 1061 {
1058 return this._cpuProfileView.profileHead.totalTime; 1062 return this._cpuProfile.profileHead.totalTime;
1059 }, 1063 },
1060 1064
1061 /** 1065 /**
1062 * @return {number} 1066 * @return {number}
1063 */ 1067 */
1064 maxStackDepth: function() 1068 maxStackDepth: function()
1065 { 1069 {
1066 return this._maxStackDepth; 1070 return this._maxStackDepth;
1067 }, 1071 },
1068 1072
1069 /** 1073 /**
1070 * @return {?WebInspector.FlameChart.TimelineData} 1074 * @return {?WebInspector.FlameChart.TimelineData}
1071 */ 1075 */
1072 timelineData: function() 1076 timelineData: function()
1073 { 1077 {
1074 return this._timelineData || this._calculateTimelineData(); 1078 return this._timelineData || this._calculateTimelineData();
1075 }, 1079 },
1076 1080
1077 /** 1081 /**
1078 * @return {?WebInspector.FlameChart.TimelineData} 1082 * @return {?WebInspector.FlameChart.TimelineData}
1079 */ 1083 */
1080 _calculateTimelineData: function() 1084 _calculateTimelineData: function()
1081 { 1085 {
1082 if (!this._cpuProfileView.profileHead) 1086 if (!this._cpuProfile.profileHead)
1083 return null; 1087 return null;
1084 1088
1085 var samples = this._cpuProfileView.samples; 1089 var samples = this._cpuProfile.samples;
1086 var idToNode = this._cpuProfileView._idToNode; 1090 var idToNode = this._cpuProfile._idToNode;
1087 var gcNode = this._cpuProfileView._gcNode; 1091 var gcNode = this._cpuProfile._gcNode;
1088 var samplesCount = samples.length; 1092 var samplesCount = samples.length;
1089 var samplingInterval = this._cpuProfileView.samplingIntervalMs; 1093 var samplingInterval = this._cpuProfile.samplingIntervalMs;
1090 1094
1091 var index = 0; 1095 var index = 0;
1092 1096
1093 var openIntervals = []; 1097 var openIntervals = [];
1094 var stackTrace = []; 1098 var stackTrace = [];
1095 var maxDepth = 5; // minimum stack depth for the case when we see no act ivity. 1099 var maxDepth = 5; // minimum stack depth for the case when we see no act ivity.
1096 var depth = 0; 1100 var depth = 0;
1097 1101
1098 /** 1102 /**
1099 * @constructor 1103 * @constructor
(...skipping 128 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 row.title = title; 1232 row.title = title;
1229 row.text = text; 1233 row.text = text;
1230 entryInfo.push(row); 1234 entryInfo.push(row);
1231 } 1235 }
1232 1236
1233 pushEntryInfoRow(WebInspector.UIString("Name"), node.functionName); 1237 pushEntryInfoRow(WebInspector.UIString("Name"), node.functionName);
1234 var selfTime = this._millisecondsToString(this._entrySelfTimes[entryInde x]); 1238 var selfTime = this._millisecondsToString(this._entrySelfTimes[entryInde x]);
1235 var totalTime = this._millisecondsToString(timelineData.entryTotalTimes[ entryIndex]); 1239 var totalTime = this._millisecondsToString(timelineData.entryTotalTimes[ entryIndex]);
1236 pushEntryInfoRow(WebInspector.UIString("Self time"), selfTime); 1240 pushEntryInfoRow(WebInspector.UIString("Self time"), selfTime);
1237 pushEntryInfoRow(WebInspector.UIString("Total time"), totalTime); 1241 pushEntryInfoRow(WebInspector.UIString("Total time"), totalTime);
1238 var target = this._cpuProfileView.profile.target(); 1242 var target = this._target;
1239 var text = WebInspector.Linkifier.liveLocationText(target, node.scriptId , node.lineNumber, node.columnNumber); 1243 var text = WebInspector.Linkifier.liveLocationText(target, node.scriptId , node.lineNumber, node.columnNumber);
1240 pushEntryInfoRow(WebInspector.UIString("URL"), text); 1244 pushEntryInfoRow(WebInspector.UIString("URL"), text);
1241 pushEntryInfoRow(WebInspector.UIString("Aggregated self time"), Number.s econdsToString(node.selfTime / 1000, true)); 1245 pushEntryInfoRow(WebInspector.UIString("Aggregated self time"), Number.s econdsToString(node.selfTime / 1000, true));
1242 pushEntryInfoRow(WebInspector.UIString("Aggregated total time"), Number. secondsToString(node.totalTime / 1000, true)); 1246 pushEntryInfoRow(WebInspector.UIString("Aggregated total time"), Number. secondsToString(node.totalTime / 1000, true));
1243 if (node.deoptReason && node.deoptReason !== "no reason") 1247 if (node.deoptReason && node.deoptReason !== "no reason")
1244 pushEntryInfoRow(WebInspector.UIString("Not optimized"), node.deoptR eason); 1248 pushEntryInfoRow(WebInspector.UIString("Not optimized"), node.deoptR eason);
1245 1249
1246 return entryInfo; 1250 return entryInfo;
1247 }, 1251 },
1248 1252
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
1338 1342
1339 /** 1343 /**
1340 * @param {number} entryIndex 1344 * @param {number} entryIndex
1341 * @return {!string} 1345 * @return {!string}
1342 */ 1346 */
1343 textColor: function(entryIndex) 1347 textColor: function(entryIndex)
1344 { 1348 {
1345 return "#333"; 1349 return "#333";
1346 } 1350 }
1347 } 1351 }
OLDNEW
« no previous file with comments | « LayoutTests/inspector/profiler/profiler-test.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698