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

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

Issue 184303005: CPUFlameChart: remove unnecessary arrays and calculate colors on demand. (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: Created 6 years, 9 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 | « no previous file | 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
(...skipping 1113 matching lines...) Expand 10 before | Expand all | Expand 10 after
1124 1124
1125 var index = 0; 1125 var index = 0;
1126 1126
1127 var openIntervals = []; 1127 var openIntervals = [];
1128 var stackTrace = []; 1128 var stackTrace = [];
1129 var maxDepth = 5; // minimum stack depth for the case when we see no act ivity. 1129 var maxDepth = 5; // minimum stack depth for the case when we see no act ivity.
1130 var depth = 0; 1130 var depth = 0;
1131 1131
1132 /** 1132 /**
1133 * @constructor 1133 * @constructor
1134 * @param {string} color
1135 * @param {number} depth 1134 * @param {number} depth
1136 * @param {number} duration 1135 * @param {number} duration
1137 * @param {number} startTime 1136 * @param {number} startTime
1138 * @param {!Object} node 1137 * @param {!Object} node
1139 */ 1138 */
1140 function ChartEntry(color, depth, duration, startTime, node) 1139 function ChartEntry(depth, duration, startTime, node)
1141 { 1140 {
1142 this.color = color;
1143 this.depth = depth; 1141 this.depth = depth;
1144 this.duration = duration; 1142 this.duration = duration;
1145 this.startTime = startTime; 1143 this.startTime = startTime;
1146 this.node = node; 1144 this.node = node;
1147 this.selfTime = 0; 1145 this.selfTime = 0;
1148 } 1146 }
1149 var entries = /** @type {!Array.<!ChartEntry>} */ ([]); 1147 var entries = /** @type {!Array.<!ChartEntry>} */ ([]);
1150 1148
1151 for (var sampleIndex = 0; sampleIndex < samplesCount; sampleIndex++) { 1149 for (var sampleIndex = 0; sampleIndex < samplesCount; sampleIndex++) {
1152 var node = idToNode[samples[sampleIndex]]; 1150 var node = idToNode[samples[sampleIndex]];
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1185 if (depth < openIntervals.length) 1183 if (depth < openIntervals.length)
1186 openIntervals.length = depth; 1184 openIntervals.length = depth;
1187 if (!node) { 1185 if (!node) {
1188 entries[intervalIndex].selfTime += samplingInterval; 1186 entries[intervalIndex].selfTime += samplingInterval;
1189 continue; 1187 continue;
1190 } 1188 }
1191 1189
1192 var colorGenerator = this._colorGenerator; 1190 var colorGenerator = this._colorGenerator;
1193 var color = ""; 1191 var color = "";
1194 while (node) { 1192 while (node) {
1195 color = colorGenerator.colorForID(node.functionName + ":" + node .url + ":" + node.lineNumber); 1193 entries.push(new ChartEntry(depth, samplingInterval, sampleIndex * samplingInterval, node));
1196 entries.push(new ChartEntry(color, depth, samplingInterval, samp leIndex * samplingInterval, node));
1197 openIntervals.push({node: node, index: index}); 1194 openIntervals.push({node: node, index: index});
1198 ++index; 1195 ++index;
1199 1196
1200 node = stackTrace.pop(); 1197 node = stackTrace.pop();
1201 ++depth; 1198 ++depth;
1202 } 1199 }
1203 entries[entries.length - 1].selfTime += samplingInterval; 1200 entries[entries.length - 1].selfTime += samplingInterval;
1204 } 1201 }
1205 1202
1206 var entryColors = new Array(entries.length);
1207 var entryNodes = new Array(entries.length); 1203 var entryNodes = new Array(entries.length);
1208 var entryLevels = new Uint8Array(entries.length); 1204 var entryLevels = new Uint8Array(entries.length);
1209 var entryTotalTimes = new Float32Array(entries.length); 1205 var entryTotalTimes = new Float32Array(entries.length);
1210 var entrySelfTimes = new Float32Array(entries.length); 1206 var entrySelfTimes = new Float32Array(entries.length);
1211 var entryOffsets = new Float32Array(entries.length); 1207 var entryOffsets = new Float32Array(entries.length);
1212 var entryTitles = new Array(entries.length);
1213 var entryDeoptFlags = new Uint8Array(entries.length);
1214 1208
1215 for (var i = 0; i < entries.length; ++i) { 1209 for (var i = 0; i < entries.length; ++i) {
1216 var entry = entries[i]; 1210 var entry = entries[i];
1217 entryNodes[i] = entry.node; 1211 entryNodes[i] = entry.node;
1218 entryColors[i] = entry.color;
1219 entryLevels[i] = entry.depth; 1212 entryLevels[i] = entry.depth;
1220 entryTotalTimes[i] = entry.duration; 1213 entryTotalTimes[i] = entry.duration;
1221 entryOffsets[i] = entry.startTime; 1214 entryOffsets[i] = entry.startTime;
1222 entryTitles[i] = entry.node.functionName; 1215 entrySelfTimes[i] = entry.selfTime;
1223 var reason = entry.node.deoptReason;
1224 entryDeoptFlags[i] = (reason && reason !== "no reason");
1225 } 1216 }
1226 1217
1227 this._maxStackDepth = Math.max(maxDepth, depth); 1218 this._maxStackDepth = Math.max(maxDepth, depth);
1228 1219
1229 this._timelineData = { 1220 this._timelineData = {
1230 entryLevels: entryLevels, 1221 entryLevels: entryLevels,
1231 entryTotalTimes: entryTotalTimes, 1222 entryTotalTimes: entryTotalTimes,
1232 entryOffsets: entryOffsets, 1223 entryOffsets: entryOffsets,
1233 }; 1224 };
1234 1225
1235 this._entryTitles = entryTitles;
1236 this._entryNodes = entryNodes; 1226 this._entryNodes = entryNodes;
1237 this._entrySelfTimes = entrySelfTimes; 1227 this._entrySelfTimes = entrySelfTimes;
1238 this._entryDeoptFlags = entryDeoptFlags;
1239 this._entryColors = entryColors;
1240 1228
1241 return /** @type {!WebInspector.FlameChart.TimelineData} */ (this._timel ineData); 1229 return /** @type {!WebInspector.FlameChart.TimelineData} */ (this._timel ineData);
1242 }, 1230 },
1243 1231
1244 /** 1232 /**
1245 * @param {number} ms 1233 * @param {number} ms
1246 * @return {string} 1234 * @return {string}
1247 */ 1235 */
1248 _millisecondsToString: function(ms) 1236 _millisecondsToString: function(ms)
1249 { 1237 {
(...skipping 17 matching lines...) Expand all
1267 1255
1268 var entryInfo = []; 1256 var entryInfo = [];
1269 function pushEntryInfoRow(title, text) 1257 function pushEntryInfoRow(title, text)
1270 { 1258 {
1271 var row = {}; 1259 var row = {};
1272 row.title = title; 1260 row.title = title;
1273 row.text = text; 1261 row.text = text;
1274 entryInfo.push(row); 1262 entryInfo.push(row);
1275 } 1263 }
1276 1264
1277 pushEntryInfoRow(WebInspector.UIString("Name"), this._entryTitles[entryI ndex]); 1265 pushEntryInfoRow(WebInspector.UIString("Name"), node.functionName);
1278 var selfTime = this._millisecondsToString(this._entrySelfTimes[entryInde x]); 1266 var selfTime = this._millisecondsToString(this._entrySelfTimes[entryInde x]);
1279 var totalTime = this._millisecondsToString(timelineData.entryTotalTimes[ entryIndex]); 1267 var totalTime = this._millisecondsToString(timelineData.entryTotalTimes[ entryIndex]);
1280 pushEntryInfoRow(WebInspector.UIString("Self time"), selfTime); 1268 pushEntryInfoRow(WebInspector.UIString("Self time"), selfTime);
1281 pushEntryInfoRow(WebInspector.UIString("Total time"), totalTime); 1269 pushEntryInfoRow(WebInspector.UIString("Total time"), totalTime);
1282 if (node.url) 1270 if (node.url)
1283 pushEntryInfoRow(WebInspector.UIString("URL"), node.url + ":" + node .lineNumber); 1271 pushEntryInfoRow(WebInspector.UIString("URL"), node.url + ":" + node .lineNumber);
1284 pushEntryInfoRow(WebInspector.UIString("Aggregated self time"), Number.s econdsToString(node.selfTime / 1000, true)); 1272 pushEntryInfoRow(WebInspector.UIString("Aggregated self time"), Number.s econdsToString(node.selfTime / 1000, true));
1285 pushEntryInfoRow(WebInspector.UIString("Aggregated total time"), Number. secondsToString(node.totalTime / 1000, true)); 1273 pushEntryInfoRow(WebInspector.UIString("Aggregated total time"), Number. secondsToString(node.totalTime / 1000, true));
1286 if (node.deoptReason && node.deoptReason !== "no reason") 1274 if (node.deoptReason && node.deoptReason !== "no reason")
1287 pushEntryInfoRow(WebInspector.UIString("Not optimized"), node.deoptR eason); 1275 pushEntryInfoRow(WebInspector.UIString("Not optimized"), node.deoptR eason);
1288 1276
1289 return entryInfo; 1277 return entryInfo;
1290 }, 1278 },
1291 1279
1292 /** 1280 /**
1293 * @param {number} entryIndex 1281 * @param {number} entryIndex
1294 * @return {boolean} 1282 * @return {boolean}
1295 */ 1283 */
1296 canJumpToEntry: function(entryIndex) 1284 canJumpToEntry: function(entryIndex)
1297 { 1285 {
1298 return this._entryNodes[entryIndex].scriptId !== "0"; 1286 return this._entryNodes[entryIndex].scriptId !== "0";
1299 }, 1287 },
1300 1288
1301 /** 1289 /**
1302 * @param {number} entryIndex 1290 * @param {number} entryIndex
1303 * @return {?string} 1291 * @return {?string}
1304 */ 1292 */
1305 entryTitle: function(entryIndex) 1293 entryTitle: function(entryIndex)
1306 { 1294 {
1307 return this._entryTitles[entryIndex]; 1295 var node = this._entryNodes[entryIndex];
1296 return node.functionName;
1308 }, 1297 },
1309 1298
1310 /** 1299 /**
1311 * @param {number} entryIndex 1300 * @param {number} entryIndex
1312 * @return {?string} 1301 * @return {?string}
1313 */ 1302 */
1314 entryFont: function(entryIndex) 1303 entryFont: function(entryIndex)
1315 { 1304 {
1316 if (!this._font) { 1305 if (!this._font) {
1317 this._font = (this.barHeight() - 4) + "px " + WebInspector.fontFamil y(); 1306 this._font = (this.barHeight() - 4) + "px " + WebInspector.fontFamil y();
1318 this._boldFont = "bold " + this._font; 1307 this._boldFont = "bold " + this._font;
1319 } 1308 }
1320 return this._entryDeoptFlags[entryIndex] ? this._boldFont : this._font; 1309 var node = this._entryNodes[entryIndex];
1310 var reason = node.deoptReason;
1311 return (reason && reason !== "no reason") ? this._boldFont : this._font;
1321 }, 1312 },
1322 1313
1323 /** 1314 /**
1324 * @param {number} entryIndex 1315 * @param {number} entryIndex
1325 * @return {!Object} 1316 * @return {!Object}
1326 */ 1317 */
1327 entryData: function(entryIndex) 1318 entryData: function(entryIndex)
1328 { 1319 {
1329 return this._entryNodes[entryIndex]; 1320 return this._entryNodes[entryIndex];
1330 }, 1321 },
1331 1322
1332 /** 1323 /**
1333 * @param {number} entryIndex 1324 * @param {number} entryIndex
1334 * @return {!string} 1325 * @return {!string}
1335 */ 1326 */
1336 entryColor: function(entryIndex) 1327 entryColor: function(entryIndex)
1337 { 1328 {
1338 return this._entryColors[entryIndex]; 1329 var node = this._entryNodes[entryIndex];
1330 return this._colorGenerator.colorForID(node.functionName + ":" + node.ur l + ":" + node.lineNumber);;
1339 }, 1331 },
1340 } 1332 }
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698