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 128 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
139 }; | 139 }; |
140 | 140 |
141 | 141 |
142 SnapshotLogProcessor.prototype.getSerializedEntryName = function(pos) { | 142 SnapshotLogProcessor.prototype.getSerializedEntryName = function(pos) { |
143 var entry = this.serializedEntries_[pos]; | 143 var entry = this.serializedEntries_[pos]; |
144 return entry ? entry.getRawName() : null; | 144 return entry ? entry.getRawName() : null; |
145 }; | 145 }; |
146 | 146 |
147 | 147 |
148 function TickProcessor( | 148 function TickProcessor( |
149 cppEntriesProvider, separateIc, ignoreUnknown, stateFilter, snapshotLogProce
ssor) { | 149 cppEntriesProvider, |
| 150 separateIc, |
| 151 callGraphSize, |
| 152 ignoreUnknown, |
| 153 stateFilter, |
| 154 snapshotLogProcessor) { |
150 LogReader.call(this, { | 155 LogReader.call(this, { |
151 'shared-library': { parsers: [null, parseInt, parseInt], | 156 'shared-library': { parsers: [null, parseInt, parseInt], |
152 processor: this.processSharedLibrary }, | 157 processor: this.processSharedLibrary }, |
153 'code-creation': { | 158 'code-creation': { |
154 parsers: [null, parseInt, parseInt, null, 'var-args'], | 159 parsers: [null, parseInt, parseInt, null, 'var-args'], |
155 processor: this.processCodeCreation }, | 160 processor: this.processCodeCreation }, |
156 'code-move': { parsers: [parseInt, parseInt], | 161 'code-move': { parsers: [parseInt, parseInt], |
157 processor: this.processCodeMove }, | 162 processor: this.processCodeMove }, |
158 'code-delete': { parsers: [parseInt], | 163 'code-delete': { parsers: [parseInt], |
159 processor: this.processCodeDelete }, | 164 processor: this.processCodeDelete }, |
(...skipping 14 matching lines...) Expand all Loading... |
174 'function-creation': null, | 179 'function-creation': null, |
175 'function-move': null, | 180 'function-move': null, |
176 'function-delete': null, | 181 'function-delete': null, |
177 'heap-sample-item': null, | 182 'heap-sample-item': null, |
178 // Obsolete row types. | 183 // Obsolete row types. |
179 'code-allocate': null, | 184 'code-allocate': null, |
180 'begin-code-region': null, | 185 'begin-code-region': null, |
181 'end-code-region': null }); | 186 'end-code-region': null }); |
182 | 187 |
183 this.cppEntriesProvider_ = cppEntriesProvider; | 188 this.cppEntriesProvider_ = cppEntriesProvider; |
| 189 this.callGraphSize_ = callGraphSize; |
184 this.ignoreUnknown_ = ignoreUnknown; | 190 this.ignoreUnknown_ = ignoreUnknown; |
185 this.stateFilter_ = stateFilter; | 191 this.stateFilter_ = stateFilter; |
186 this.snapshotLogProcessor_ = snapshotLogProcessor; | 192 this.snapshotLogProcessor_ = snapshotLogProcessor; |
187 this.deserializedEntriesNames_ = []; | 193 this.deserializedEntriesNames_ = []; |
188 var ticks = this.ticks_ = | 194 var ticks = this.ticks_ = |
189 { total: 0, unaccounted: 0, excluded: 0, gc: 0 }; | 195 { total: 0, unaccounted: 0, excluded: 0, gc: 0 }; |
190 | 196 |
191 V8Profile.prototype.handleUnknownCode = function( | 197 V8Profile.prototype.handleUnknownCode = function( |
192 operation, addr, opt_stackPos) { | 198 operation, addr, opt_stackPos) { |
193 var op = Profile.Operation; | 199 var op = Profile.Operation; |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
233 TickProcessor.CodeTypes = { | 239 TickProcessor.CodeTypes = { |
234 CPP: 0, | 240 CPP: 0, |
235 SHARED_LIB: 1 | 241 SHARED_LIB: 1 |
236 }; | 242 }; |
237 // Otherwise, this is JS-related code. We are not adding it to | 243 // Otherwise, this is JS-related code. We are not adding it to |
238 // codeTypes_ map because there can be zillions of them. | 244 // codeTypes_ map because there can be zillions of them. |
239 | 245 |
240 | 246 |
241 TickProcessor.CALL_PROFILE_CUTOFF_PCT = 2.0; | 247 TickProcessor.CALL_PROFILE_CUTOFF_PCT = 2.0; |
242 | 248 |
| 249 TickProcessor.CALL_GRAPH_SIZE = 5; |
243 | 250 |
244 /** | 251 /** |
245 * @override | 252 * @override |
246 */ | 253 */ |
247 TickProcessor.prototype.printError = function(str) { | 254 TickProcessor.prototype.printError = function(str) { |
248 print(str); | 255 print(str); |
249 }; | 256 }; |
250 | 257 |
251 | 258 |
252 TickProcessor.prototype.setCodeType = function(name, type) { | 259 TickProcessor.prototype.setCodeType = function(name, type) { |
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
528 var self = this; | 535 var self = this; |
529 var indent = opt_indent || 0; | 536 var indent = opt_indent || 0; |
530 var indentStr = padLeft('', indent); | 537 var indentStr = padLeft('', indent); |
531 this.processProfile(profile, function() { return true; }, function (rec) { | 538 this.processProfile(profile, function() { return true; }, function (rec) { |
532 // Cut off too infrequent callers. | 539 // Cut off too infrequent callers. |
533 if (rec.parentTotalPercent < TickProcessor.CALL_PROFILE_CUTOFF_PCT) return; | 540 if (rec.parentTotalPercent < TickProcessor.CALL_PROFILE_CUTOFF_PCT) return; |
534 print(' ' + padLeft(rec.totalTime, 5) + ' ' + | 541 print(' ' + padLeft(rec.totalTime, 5) + ' ' + |
535 padLeft(rec.parentTotalPercent.toFixed(1), 5) + '% ' + | 542 padLeft(rec.parentTotalPercent.toFixed(1), 5) + '% ' + |
536 indentStr + rec.internalFuncName); | 543 indentStr + rec.internalFuncName); |
537 // Limit backtrace depth. | 544 // Limit backtrace depth. |
538 if (indent < 10) { | 545 if (indent < 2 * self.callGraphSize_) { |
539 self.printHeavyProfile(rec.children, indent + 2); | 546 self.printHeavyProfile(rec.children, indent + 2); |
540 } | 547 } |
541 // Delimit top-level functions. | 548 // Delimit top-level functions. |
542 if (indent == 0) { | 549 if (indent == 0) { |
543 print(''); | 550 print(''); |
544 } | 551 } |
545 }); | 552 }); |
546 }; | 553 }; |
547 | 554 |
548 | 555 |
(...skipping 208 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
757 '-j': ['stateFilter', TickProcessor.VmStates.JS, | 764 '-j': ['stateFilter', TickProcessor.VmStates.JS, |
758 'Show only ticks from JS VM state'], | 765 'Show only ticks from JS VM state'], |
759 '-g': ['stateFilter', TickProcessor.VmStates.GC, | 766 '-g': ['stateFilter', TickProcessor.VmStates.GC, |
760 'Show only ticks from GC VM state'], | 767 'Show only ticks from GC VM state'], |
761 '-c': ['stateFilter', TickProcessor.VmStates.COMPILER, | 768 '-c': ['stateFilter', TickProcessor.VmStates.COMPILER, |
762 'Show only ticks from COMPILER VM state'], | 769 'Show only ticks from COMPILER VM state'], |
763 '-o': ['stateFilter', TickProcessor.VmStates.OTHER, | 770 '-o': ['stateFilter', TickProcessor.VmStates.OTHER, |
764 'Show only ticks from OTHER VM state'], | 771 'Show only ticks from OTHER VM state'], |
765 '-e': ['stateFilter', TickProcessor.VmStates.EXTERNAL, | 772 '-e': ['stateFilter', TickProcessor.VmStates.EXTERNAL, |
766 'Show only ticks from EXTERNAL VM state'], | 773 'Show only ticks from EXTERNAL VM state'], |
| 774 '--call-graph-size': ['callGraphSize', TickProcessor.CALL_GRAPH_SIZE, |
| 775 'Set the call graph size'], |
767 '--ignore-unknown': ['ignoreUnknown', true, | 776 '--ignore-unknown': ['ignoreUnknown', true, |
768 'Exclude ticks of unknown code entries from processing'], | 777 'Exclude ticks of unknown code entries from processing'], |
769 '--separate-ic': ['separateIc', true, | 778 '--separate-ic': ['separateIc', true, |
770 'Separate IC entries'], | 779 'Separate IC entries'], |
771 '--unix': ['platform', 'unix', | 780 '--unix': ['platform', 'unix', |
772 'Specify that we are running on *nix platform'], | 781 'Specify that we are running on *nix platform'], |
773 '--windows': ['platform', 'windows', | 782 '--windows': ['platform', 'windows', |
774 'Specify that we are running on Windows platform'], | 783 'Specify that we are running on Windows platform'], |
775 '--mac': ['platform', 'mac', | 784 '--mac': ['platform', 'mac', |
776 'Specify that we are running on Mac OS X platform'], | 785 'Specify that we are running on Mac OS X platform'], |
777 '--nm': ['nm', 'nm', | 786 '--nm': ['nm', 'nm', |
778 'Specify the \'nm\' executable to use (e.g. --nm=/my_dir/nm)'], | 787 'Specify the \'nm\' executable to use (e.g. --nm=/my_dir/nm)'], |
779 '--snapshot-log': ['snapshotLogFileName', 'snapshot.log', | 788 '--snapshot-log': ['snapshotLogFileName', 'snapshot.log', |
780 'Specify snapshot log file to use (e.g. --snapshot-log=snapshot.log)'] | 789 'Specify snapshot log file to use (e.g. --snapshot-log=snapshot.log)'] |
781 }; | 790 }; |
782 this.argsDispatch_['--js'] = this.argsDispatch_['-j']; | 791 this.argsDispatch_['--js'] = this.argsDispatch_['-j']; |
783 this.argsDispatch_['--gc'] = this.argsDispatch_['-g']; | 792 this.argsDispatch_['--gc'] = this.argsDispatch_['-g']; |
784 this.argsDispatch_['--compiler'] = this.argsDispatch_['-c']; | 793 this.argsDispatch_['--compiler'] = this.argsDispatch_['-c']; |
785 this.argsDispatch_['--other'] = this.argsDispatch_['-o']; | 794 this.argsDispatch_['--other'] = this.argsDispatch_['-o']; |
786 this.argsDispatch_['--external'] = this.argsDispatch_['-e']; | 795 this.argsDispatch_['--external'] = this.argsDispatch_['-e']; |
787 }; | 796 }; |
788 | 797 |
789 | 798 |
790 ArgumentsProcessor.DEFAULTS = { | 799 ArgumentsProcessor.DEFAULTS = { |
791 logFileName: 'v8.log', | 800 logFileName: 'v8.log', |
792 snapshotLogFileName: null, | 801 snapshotLogFileName: null, |
793 platform: 'unix', | 802 platform: 'unix', |
794 stateFilter: null, | 803 stateFilter: null, |
| 804 callGraphSize: 5, |
795 ignoreUnknown: false, | 805 ignoreUnknown: false, |
796 separateIc: false, | 806 separateIc: false, |
797 nm: 'nm' | 807 nm: 'nm' |
798 }; | 808 }; |
799 | 809 |
800 | 810 |
801 ArgumentsProcessor.prototype.parse = function() { | 811 ArgumentsProcessor.prototype.parse = function() { |
802 while (this.args_.length) { | 812 while (this.args_.length) { |
803 var arg = this.args_[0]; | 813 var arg = this.args_[0]; |
804 if (arg.charAt(0) != '-') { | 814 if (arg.charAt(0) != '-') { |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
852 if (arg !== synArg && dispatch === this.argsDispatch_[synArg]) { | 862 if (arg !== synArg && dispatch === this.argsDispatch_[synArg]) { |
853 synonims.push(synArg); | 863 synonims.push(synArg); |
854 delete this.argsDispatch_[synArg]; | 864 delete this.argsDispatch_[synArg]; |
855 } | 865 } |
856 } | 866 } |
857 print(' ' + padRight(synonims.join(', '), 20) + dispatch[2]); | 867 print(' ' + padRight(synonims.join(', '), 20) + dispatch[2]); |
858 } | 868 } |
859 quit(2); | 869 quit(2); |
860 }; | 870 }; |
861 | 871 |
OLD | NEW |