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

Side by Side Diff: tools/ic-explorer.html

Issue 2451173002: [tools] Support more map information in --trace-ic and ic-explorer.html (Closed)
Patch Set: parenthesis to the rescue Created 4 years, 1 month 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
« no previous file with comments | « src/ic/ic.cc ('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 <html> 1 <html>
2 <!-- 2 <!--
3 Copyright 2016 the V8 project authors. All rights reserved. Use of this source 3 Copyright 2016 the V8 project authors. All rights reserved. Use of this source
4 code is governed by a BSD-style license that can be found in the LICENSE file. 4 code is governed by a BSD-style license that can be found in the LICENSE file.
5 --> 5 -->
6 6
7 <head> 7 <head>
8 <style> 8 <style>
9 .entry-details {} 9 .entry-details {}
10 10
(...skipping 22 matching lines...) Expand all
33 33
34 .drilldown-group-title { 34 .drilldown-group-title {
35 font-weight: bold; 35 font-weight: bold;
36 padding: 0.5em 0 0.2em 0; 36 padding: 0.5em 0 0.2em 0;
37 } 37 }
38 </style> 38 </style>
39 <script> 39 <script>
40 "use strict" 40 "use strict"
41 var entries = []; 41 var entries = [];
42 42
43 var properties = ['type', 'category', 'file', 'filePosition', 'state',
44 'key', 'isNative', 'map', 'propertiesMode', 'numberOfOwnProperties',
45 'instanceType'
46 ]
47
43 class Entry { 48 class Entry {
44 constructor(id, line) { 49 constructor(id, line) {
45 this.id = id; 50 this.id = id;
46 this.line = line; 51 this.line = line;
47 var parts = line.split(" "); 52 var parts = line.split(" ");
48 if (parts.length < 6) return 53 if (parts.length < 6) return
49 this.isValid = false; 54 this.isValid = false;
50 if (parts[0][0] !== "[") return; 55 if (parts[0][0] !== "[") return;
51 if (parts[1] === "patching") return; 56 if (parts[1] === "patching") return;
52 this.type = parts[0].substr(1); 57 this.type = parts[0].substr(1);
53 this.category = "Other"; 58 this.category = "unknown";
54 this.map = undefined; 59 this.map = "unknown";
60 this.propertiesMode = "unknown";
61 this.numberOfOwnProperties = 0;
62 this.instanceType = "unknown";
55 if (this.type.indexOf("Store") !== -1) { 63 if (this.type.indexOf("Store") !== -1) {
56 this.category = "Store"; 64 this.category = "Store";
57 } else if (this.type.indexOf("Load") !== -1) { 65 } else if (this.type.indexOf("Load") !== -1) {
58 this.category = "Load"; 66 this.category = "Load";
59 } 67 }
60 if (this.type.length == 0) return; 68 if (this.type.length == 0) return;
61 if (this.type.indexOf('BinaryOpIC(') === 0) { 69 if (this.type.indexOf('BinaryOpIC(') === 0) {
62 this.type = "BinaryOpIC"; 70 this.type = "BinaryOpIC";
63 var split = parts[0].split('('); 71 var split = parts[0].split('(');
64 this.state = "(" + split[1] + " => " + parts[2]; 72 this.state = "(" + split[1] + " => " + parts[2];
65 var offset = this.parsePositionAndFile(parts, 6); 73 var offset = this.parsePositionAndFile(parts, 6);
66 if (offset == -1) return 74 if (offset == -1) return
67 if (this.file === undefined) return 75 if (this.file === undefined) return
68 this.file = this.file.slice(0, -1); 76 this.file = this.file.slice(0, -1);
69 } else { 77 } else {
70 var offset = this.parsePositionAndFile(parts, 2); 78 var offset = this.parsePositionAndFile(parts, 2);
71 if (offset == -1) return 79 if (offset == -1) return
72 this.state = parts[++offset]; 80 this.state = parts[++offset];
73 this.map = parts[offset + 1]; 81 var mapPart = parts[offset + 1];
74 if (this.map !== undefined && this.map.startsWith("map=")) { 82 if (mapPart !== undefined && mapPart.startsWith("map=")) {
75 this.map = this.map.substring(4); 83 if (mapPart[4] == "(") {
76 offset++; 84 if (mapPart.endsWith(")")) {
77 } else { 85 this.map = mapPart.substr(5, mapPart.length-6);
78 this.map = undefined; 86 } else {
79 } 87 this.map = mapPart.substr(5);
88 }
89 offset++;
90 offset = this.parseMapProperties(parts, offset);
91 } else {
92 this.map = mapPart.substr(4);
93 offset++;
94 }
95 if (this.map == "(nil)") this.map = "unknown";
96 }
80 if (this.type !== "CompareIC") { 97 if (this.type !== "CompareIC") {
81 // if there is no address we have a smi key 98 // if there is no address we have a smi key
82 var address = parts[++offset]; 99 var address = parts[++offset];
83 if (address !== undefined && address.indexOf("0x") === 0) { 100 if (address !== undefined && address.indexOf("0x") === 0) {
84 this.key = parts.slice(++offset).join(" "); 101 this.key = parts.slice(++offset).join(" ");
85 } else { 102 } else {
86 this.key = address; 103 this.key = address;
87 } 104 }
88 } 105 }
89 } 106 }
(...skipping 11 matching lines...) Expand all
101 } else if (this.key.endsWith("]")) { 118 } else if (this.key.endsWith("]")) {
102 this.key = this.key.slice(0, -1); 119 this.key = this.key.slice(0, -1);
103 } 120 }
104 if (isStringKey) { 121 if (isStringKey) {
105 this.key = this.key + "\""; 122 this.key = this.key + "\"";
106 } 123 }
107 } 124 }
108 this.isValid = true; 125 this.isValid = true;
109 } 126 }
110 127
128 parseMapProperties(parts, offset) {
129 var next = parts[++offset];
130 if (!next.startsWith('dict')) return offset;
131 this.propertiesMode =
132 next.substr(5) == "0" ? "fast" : "slow";
133 this.numberOfOwnProperties = parts[++offset].substr(4);
134 next = parts[++offset];
135 this.instanceType = next.substr(5, next.length-6);
136 return offset;
137 }
138
111 parsePositionAndFile(parts, start) { 139 parsePositionAndFile(parts, start) {
112 // find the position of 'at' in the parts array. 140 // find the position of 'at' in the parts array.
113 var offset = start; 141 var offset = start;
114 for (var i = start + 1; i < parts.length; i++) { 142 for (var i = start + 1; i < parts.length; i++) {
115 offset++; 143 offset++;
116 if (parts[i] == 'at') break; 144 if (parts[i] == 'at') break;
117 } 145 }
118 if (parts[offset] !== 'at') return -1; 146 if (parts[offset] !== 'at') return -1;
119 this.position = parts.slice(start, offset).join(' '); 147 this.position = parts.slice(start, offset).join(' ');
120 offset += 1; 148 offset += 1;
(...skipping 29 matching lines...) Expand all
150 } 178 }
151 179
152 document.getElementById("count").innerHTML = i; 180 document.getElementById("count").innerHTML = i;
153 updateTable(); 181 updateTable();
154 } 182 }
155 reader.readAsText(file); 183 reader.readAsText(file);
156 initGroupKeySelect(); 184 initGroupKeySelect();
157 } 185 }
158 186
159 187
160
161 var properties = ['type', 'category', 'file', 'filePosition', 'state',
162 'key', 'isNative', 'map'
163 ]
164
165 class Group { 188 class Group {
166 constructor(property, key, entry) { 189 constructor(property, key, entry) {
167 this.property = property; 190 this.property = property;
168 this.key = key; 191 this.key = key;
169 this.count = 1; 192 this.count = 1;
170 this.entries = [entry]; 193 this.entries = [entry];
171 this.percentage = undefined; 194 this.percentage = undefined;
172 this.groups = undefined; 195 this.groups = undefined;
173 } 196 }
174 197
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
325 } 348 }
326 349
327 function initGroupKeySelect() { 350 function initGroupKeySelect() {
328 var select = document.getElementById("group-key"); 351 var select = document.getElementById("group-key");
329 for (var i in properties) { 352 for (var i in properties) {
330 var option = document.createElement("option"); 353 var option = document.createElement("option");
331 option.text = properties[i]; 354 option.text = properties[i];
332 select.add(option); 355 select.add(option);
333 } 356 }
334 } 357 }
358
359 function handleOnLoad() {
360 document.querySelector("#uploadInput").focus();
361 }
335 </script> 362 </script>
336 </head> 363 </head>
337 364
338 <body> 365 <body onload="handleOnLoad()">
339 <h1> 366 <h1>
340 <span style="color: #00FF00">I</span> 367 <span style="color: #00FF00">I</span>
341 <span style="color: #FF00FF">C</span> 368 <span style="color: #FF00FF">C</span>
342 <span style="color: #00FFFF">E</span> 369 <span style="color: #00FFFF">E</span>
343 </h1> Your IC-Explorer. 370 </h1> Your IC-Explorer.
344 371
345 <div id="legend" style="padding-right: 200px"> 372 <div id="legend" style="padding-right: 200px">
346 <div style="float:right; border-style: solid; border-width: 1px; padding:20 px"> 373 <div style="float:right; border-style: solid; border-width: 1px; padding:20 px">
347 0 uninitialized<br> 374 0 uninitialized<br>
348 . premonomorphic<br> 375 . premonomorphic<br>
(...skipping 21 matching lines...) Expand all
370 </p> 397 </p>
371 <p> 398 <p>
372 <table id="table" width="100%"> 399 <table id="table" width="100%">
373 <tbody id="table-body"> 400 <tbody id="table-body">
374 </tbody> 401 </tbody>
375 </table> 402 </table>
376 </p> 403 </p>
377 </body> 404 </body>
378 405
379 </html> 406 </html>
OLDNEW
« no previous file with comments | « src/ic/ic.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698