diff options
Diffstat (limited to 'deps/v8/tools/tickprocessor.js')
-rw-r--r-- | deps/v8/tools/tickprocessor.js | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/deps/v8/tools/tickprocessor.js b/deps/v8/tools/tickprocessor.js index 0ffe7342a9..abb2f2d7ee 100644 --- a/deps/v8/tools/tickprocessor.js +++ b/deps/v8/tools/tickprocessor.js @@ -170,7 +170,7 @@ function TickProcessor( processor: this.processSnapshotPosition }, 'tick': { parsers: [parseInt, parseInt, parseInt, parseInt, - parseInt, 'var-args'], + parseInt, parseInt, 'var-args'], processor: this.processTick }, 'heap-sample-begin': { parsers: [null, null, parseInt], processor: this.processHeapSampleBegin }, @@ -248,9 +248,8 @@ TickProcessor.VmStates = { JS: 0, GC: 1, COMPILER: 2, - PARALLEL_COMPILER: 3, - OTHER: 4, - EXTERNAL: 5 + OTHER: 3, + EXTERNAL: 4 }; @@ -368,7 +367,8 @@ TickProcessor.prototype.includeTick = function(vmState) { TickProcessor.prototype.processTick = function(pc, sp, ns_since_start, - external_callback, + is_external_callback, + tos_or_external_callback, vmState, stack) { this.distortion += this.distortion_per_entry; @@ -382,15 +382,23 @@ TickProcessor.prototype.processTick = function(pc, this.ticks_.excluded++; return; } - if (external_callback) { + if (is_external_callback) { // Don't use PC when in external callback code, as it can point // inside callback's code, and we will erroneously report // that a callback calls itself. Instead we use tos_or_external_callback, // as simply resetting PC will produce unaccounted ticks. - pc = 0; - } + pc = tos_or_external_callback; + tos_or_external_callback = 0; + } else if (tos_or_external_callback) { + // Find out, if top of stack was pointing inside a JS function + // meaning that we have encountered a frameless invocation. + var funcEntry = this.profile_.findEntry(tos_or_external_callback); + if (!funcEntry || !funcEntry.isJSFunction || !funcEntry.isJSFunction()) { + tos_or_external_callback = 0; + } + } - this.profile_.recordTick(this.processStack(pc, external_callback, stack)); + this.profile_.recordTick(this.processStack(pc, tos_or_external_callback, stack)); }; |