| Index: tools/tickprocessor.js
|
| diff --git a/tools/tickprocessor.js b/tools/tickprocessor.js
|
| index 187e647033fda8b7710c5233507aad2179f8b488..acd7a71c41b770ab7abd57c481e7feb49496447b 100644
|
| --- a/tools/tickprocessor.js
|
| +++ b/tools/tickprocessor.js
|
| @@ -441,12 +441,6 @@ TickProcessor.prototype.printStatistics = function() {
|
|
|
| if (this.ticks_.total == 0) return;
|
|
|
| - // Print the unknown ticks percentage if they are not ignored.
|
| - if (!this.ignoreUnknown_ && this.ticks_.unaccounted > 0) {
|
| - this.printHeader('Unknown');
|
| - this.printCounter(this.ticks_.unaccounted, this.ticks_.total);
|
| - }
|
| -
|
| var flatProfile = this.profile_.getFlatProfile();
|
| var flatView = this.viewBuilder_.buildView(flatProfile);
|
| // Sort by self time, desc, then by name, desc.
|
| @@ -457,33 +451,39 @@ TickProcessor.prototype.printStatistics = function() {
|
| if (this.ignoreUnknown_) {
|
| totalTicks -= this.ticks_.unaccounted;
|
| }
|
| - // Our total time contains all the ticks encountered,
|
| - // while profile only knows about the filtered ticks.
|
| - flatView.head.totalTime = totalTicks;
|
|
|
| // Count library ticks
|
| var flatViewNodes = flatView.head.children;
|
| var self = this;
|
| +
|
| var libraryTicks = 0;
|
| - this.processProfile(flatViewNodes,
|
| + this.printHeader('Shared libraries');
|
| + this.printEntries(flatViewNodes, totalTicks, null,
|
| function(name) { return self.isSharedLibrary(name); },
|
| function(rec) { libraryTicks += rec.selfTime; });
|
| var nonLibraryTicks = totalTicks - libraryTicks;
|
|
|
| - this.printHeader('Shared libraries');
|
| - this.printEntries(flatViewNodes, null,
|
| - function(name) { return self.isSharedLibrary(name); });
|
| -
|
| + var jsTicks = 0;
|
| this.printHeader('JavaScript');
|
| - this.printEntries(flatViewNodes, nonLibraryTicks,
|
| - function(name) { return self.isJsCode(name); });
|
| + this.printEntries(flatViewNodes, totalTicks, nonLibraryTicks,
|
| + function(name) { return self.isJsCode(name); },
|
| + function(rec) { jsTicks += rec.selfTime; });
|
|
|
| + var cppTicks = 0;
|
| this.printHeader('C++');
|
| - this.printEntries(flatViewNodes, nonLibraryTicks,
|
| - function(name) { return self.isCppCode(name); });
|
| -
|
| - this.printHeader('GC');
|
| - this.printCounter(this.ticks_.gc, totalTicks);
|
| + this.printEntries(flatViewNodes, totalTicks, nonLibraryTicks,
|
| + function(name) { return self.isCppCode(name); },
|
| + function(rec) { cppTicks += rec.selfTime; });
|
| +
|
| + this.printHeader('Summary');
|
| + this.printLine('JavaScript', jsTicks, totalTicks, nonLibraryTicks);
|
| + this.printLine('C++', cppTicks, totalTicks, nonLibraryTicks);
|
| + this.printLine('GC', this.ticks_.gc, totalTicks, nonLibraryTicks);
|
| + this.printLine('Shared libraries', libraryTicks, totalTicks, null);
|
| + if (!this.ignoreUnknown_ && this.ticks_.unaccounted > 0) {
|
| + this.printLine('Unaccounted', this.ticks_.unaccounted,
|
| + this.ticks_.total, null);
|
| + }
|
|
|
| this.printHeavyProfHeader();
|
| var heavyProfile = this.profile_.getBottomUpProfile();
|
| @@ -517,6 +517,18 @@ TickProcessor.prototype.printHeader = function(headerTitle) {
|
| };
|
|
|
|
|
| +TickProcessor.prototype.printLine = function(
|
| + entry, ticks, totalTicks, nonLibTicks) {
|
| + var pct = ticks * 100 / totalTicks;
|
| + var nonLibPct = nonLibTicks != null
|
| + ? padLeft((ticks * 100 / nonLibTicks).toFixed(1), 5) + '% '
|
| + : ' ';
|
| + print(' ' + padLeft(ticks, 5) + ' ' +
|
| + padLeft(pct.toFixed(1), 5) + '% ' +
|
| + nonLibPct +
|
| + entry);
|
| +}
|
| +
|
| TickProcessor.prototype.printHeavyProfHeader = function() {
|
| print('\n [Bottom up (heavy) profile]:');
|
| print(' Note: percentage shows a share of a particular caller in the ' +
|
| @@ -529,12 +541,6 @@ TickProcessor.prototype.printHeavyProfHeader = function() {
|
| };
|
|
|
|
|
| -TickProcessor.prototype.printCounter = function(ticksCount, totalTicksCount) {
|
| - var pct = ticksCount * 100.0 / totalTicksCount;
|
| - print(' ' + padLeft(ticksCount, 5) + ' ' + padLeft(pct.toFixed(1), 5) + '%');
|
| -};
|
| -
|
| -
|
| TickProcessor.prototype.processProfile = function(
|
| profile, filterP, func) {
|
| for (var i = 0, n = profile.length; i < n; ++i) {
|
| @@ -580,18 +586,13 @@ TickProcessor.prototype.formatFunctionName = function(funcName) {
|
| };
|
|
|
| TickProcessor.prototype.printEntries = function(
|
| - profile, nonLibTicks, filterP) {
|
| + profile, totalTicks, nonLibTicks, filterP, callback) {
|
| var that = this;
|
| this.processProfile(profile, filterP, function (rec) {
|
| if (rec.selfTime == 0) return;
|
| - var nonLibPct = nonLibTicks != null ?
|
| - rec.selfTime * 100.0 / nonLibTicks : 0.0;
|
| + callback(rec);
|
| var funcName = that.formatFunctionName(rec.internalFuncName);
|
| -
|
| - print(' ' + padLeft(rec.selfTime, 5) + ' ' +
|
| - padLeft(rec.selfPercent.toFixed(1), 5) + '% ' +
|
| - padLeft(nonLibPct.toFixed(1), 5) + '% ' +
|
| - funcName);
|
| + that.printLine(funcName, rec.selfTime, totalTicks, nonLibTicks);
|
| });
|
| };
|
|
|
|
|