| OLD | NEW |
| 1 // Copyright 2009 the V8 project authors. All rights reserved. | 1 // Copyright 2009 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 69 * @type {Object} | 69 * @type {Object} |
| 70 */ | 70 */ |
| 71 this.backRefsCommands_ = {}; | 71 this.backRefsCommands_ = {}; |
| 72 this.initBackRefsCommands_(); | 72 this.initBackRefsCommands_(); |
| 73 | 73 |
| 74 /** | 74 /** |
| 75 * Back references for decompression. | 75 * Back references for decompression. |
| 76 * @type {Array.<string>} | 76 * @type {Array.<string>} |
| 77 */ | 77 */ |
| 78 this.backRefs_ = []; | 78 this.backRefs_ = []; |
| 79 |
| 80 /** |
| 81 * Current line. |
| 82 * @type {number} |
| 83 */ |
| 84 this.lineNum_ = 0; |
| 85 |
| 86 /** |
| 87 * CSV lines parser. |
| 88 * @type {devtools.profiler.CsvParser} |
| 89 */ |
| 90 this.csvParser_ = new devtools.profiler.CsvParser(); |
| 79 }; | 91 }; |
| 80 | 92 |
| 81 | 93 |
| 82 /** | 94 /** |
| 83 * Creates a parser for an address entry. | 95 * Creates a parser for an address entry. |
| 84 * | 96 * |
| 85 * @param {string} addressTag Address tag to perform offset decoding. | 97 * @param {string} addressTag Address tag to perform offset decoding. |
| 86 * @return {function(string):number} Address parser. | 98 * @return {function(string):number} Address parser. |
| 87 */ | 99 */ |
| 88 devtools.profiler.LogReader.prototype.createAddressParser = function( | 100 devtools.profiler.LogReader.prototype.createAddressParser = function( |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 129 * Processes a portion of V8 profiler event log. | 141 * Processes a portion of V8 profiler event log. |
| 130 * | 142 * |
| 131 * @param {string} chunk A portion of log. | 143 * @param {string} chunk A portion of log. |
| 132 */ | 144 */ |
| 133 devtools.profiler.LogReader.prototype.processLogChunk = function(chunk) { | 145 devtools.profiler.LogReader.prototype.processLogChunk = function(chunk) { |
| 134 this.processLog_(chunk.split('\n')); | 146 this.processLog_(chunk.split('\n')); |
| 135 }; | 147 }; |
| 136 | 148 |
| 137 | 149 |
| 138 /** | 150 /** |
| 151 * Processes a line of V8 profiler event log. |
| 152 * |
| 153 * @param {string} line A line of log. |
| 154 */ |
| 155 devtools.profiler.LogReader.prototype.processLogLine = function(line) { |
| 156 this.processLog_([line]); |
| 157 }; |
| 158 |
| 159 |
| 160 /** |
| 139 * Processes stack record. | 161 * Processes stack record. |
| 140 * | 162 * |
| 141 * @param {number} pc Program counter. | 163 * @param {number} pc Program counter. |
| 142 * @param {number} func JS Function. | 164 * @param {number} func JS Function. |
| 143 * @param {Array.<string>} stack String representation of a stack. | 165 * @param {Array.<string>} stack String representation of a stack. |
| 144 * @return {Array.<number>} Processed stack. | 166 * @return {Array.<number>} Processed stack. |
| 145 */ | 167 */ |
| 146 devtools.profiler.LogReader.prototype.processStack = function(pc, func, stack) { | 168 devtools.profiler.LogReader.prototype.processStack = function(pc, func, stack) { |
| 147 var fullStack = func ? [pc, func] : [pc]; | 169 var fullStack = func ? [pc, func] : [pc]; |
| 148 var prevFrame = pc; | 170 var prevFrame = pc; |
| (...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 273 }; | 295 }; |
| 274 | 296 |
| 275 | 297 |
| 276 /** | 298 /** |
| 277 * Processes log lines. | 299 * Processes log lines. |
| 278 * | 300 * |
| 279 * @param {Array.<string>} lines Log lines. | 301 * @param {Array.<string>} lines Log lines. |
| 280 * @private | 302 * @private |
| 281 */ | 303 */ |
| 282 devtools.profiler.LogReader.prototype.processLog_ = function(lines) { | 304 devtools.profiler.LogReader.prototype.processLog_ = function(lines) { |
| 283 var csvParser = new devtools.profiler.CsvParser(); | 305 for (var i = 0, n = lines.length; i < n; ++i, ++this.lineNum_) { |
| 284 try { | 306 var line = lines[i]; |
| 285 for (var i = 0, n = lines.length; i < n; ++i) { | 307 if (!line) { |
| 286 var line = lines[i]; | 308 continue; |
| 287 if (!line) { | 309 } |
| 288 continue; | 310 try { |
| 289 } | |
| 290 if (line.charAt(0) == '#' || | 311 if (line.charAt(0) == '#' || |
| 291 line.substr(0, line.indexOf(',')) in this.backRefsCommands_) { | 312 line.substr(0, line.indexOf(',')) in this.backRefsCommands_) { |
| 292 line = this.expandBackRef_(line); | 313 line = this.expandBackRef_(line); |
| 293 } | 314 } |
| 294 var fields = csvParser.parseLine(line); | 315 var fields = this.csvParser_.parseLine(line); |
| 295 this.dispatchLogRow_(fields); | 316 this.dispatchLogRow_(fields); |
| 296 } | 317 } catch (e) { |
| 297 } catch (e) { | 318 this.printError('line ' + (this.lineNum_ + 1) + ': ' + (e.message || e)); |
| 298 // An error on the last line is acceptable since log file can be truncated. | |
| 299 if (i < n - 1) { | |
| 300 this.printError('line ' + (i + 1) + ': ' + (e.message || e)); | |
| 301 throw e; | |
| 302 } | 319 } |
| 303 } | 320 } |
| 304 }; | 321 }; |
| 305 | 322 |
| 306 | 323 |
| 307 /** | 324 /** |
| 308 * Processes repeat log record. Expands it according to calls count and | 325 * Processes repeat log record. Expands it according to calls count and |
| 309 * invokes processing. | 326 * invokes processing. |
| 310 * | 327 * |
| 311 * @param {number} count Count. | 328 * @param {number} count Count. |
| 312 * @param {Array.<string>} cmd Parsed command. | 329 * @param {Array.<string>} cmd Parsed command. |
| 313 * @private | 330 * @private |
| 314 */ | 331 */ |
| 315 devtools.profiler.LogReader.prototype.processRepeat_ = function(count, cmd) { | 332 devtools.profiler.LogReader.prototype.processRepeat_ = function(count, cmd) { |
| 316 // Replace the repeat-prefixed command from backrefs list with a non-prefixed. | 333 // Replace the repeat-prefixed command from backrefs list with a non-prefixed. |
| 317 this.backRefs_[0] = cmd.join(','); | 334 this.backRefs_[0] = cmd.join(','); |
| 318 for (var i = 0; i < count; ++i) { | 335 for (var i = 0; i < count; ++i) { |
| 319 this.dispatchLogRow_(cmd); | 336 this.dispatchLogRow_(cmd); |
| 320 } | 337 } |
| 321 }; | 338 }; |
| OLD | NEW |