Chromium Code Reviews| Index: src/counters-inl.h |
| diff --git a/src/counters-inl.h b/src/counters-inl.h |
| index 7219ef778a6ea6a06ce25ad457b7a1299c5d7194..d135e0c77cce5a1ce2edbe8cbf5b580c32a66065 100644 |
| --- a/src/counters-inl.h |
| +++ b/src/counters-inl.h |
| @@ -10,6 +10,52 @@ |
| namespace v8 { |
| namespace internal { |
| +void RuntimeCallTimer::Start(RuntimeCallCounter* counter, |
| + RuntimeCallTimer* parent) { |
| + counter_ = counter; |
| + parent_.SetValue(parent); |
| + if (FLAG_runtime_stats != |
| + v8::tracing::TracingCategoryObserver::ENABLED_BY_SAMPLING) { |
| + timer_.Start(); |
| + } |
| +} |
| + |
| +RuntimeCallTimer* RuntimeCallTimer::Stop() { |
| + if (!timer_.IsStarted()) return parent(); |
| + base::TimeDelta delta = timer_.Elapsed(); |
| + timer_.Stop(); |
| + counter_->count++; |
| + counter_->time += delta; |
| + if (parent()) { |
| + // Adjust parent timer so that it does not include sub timer's time. |
| + parent()->Subtract(delta); |
| + } |
| + return parent(); |
| +} |
| + |
| +void RuntimeCallTimer::Subtract(base::TimeDelta delta) { |
| + // Adjust the current timer instead of directly subtracting the sub-timers |
| + // from the current counter. This way we can easily change the counter of an |
| + // active timer scope. Otherwise we would end up subtracting the time from the |
| + // previous counter and add the own time to the newly changed counter. |
| + timer_.Subtract(delta); |
| +} |
| + |
| +void RuntimeCallTimer::Snapshot() { |
| + base::TimeTicks now = base::TimeTicks::HighResolutionNow(); |
| + RuntimeCallTimer* timer = this; |
| + base::TimeDelta delta = base::TimeDeltae::FromMicroseconds(0); |
|
Igor Sheludko
2016/11/21 10:54:02
s/TimeDeltae/TimeDelta/
|
| + // Walk up the timer chain until the the timer doesn't have a parent. |
| + while (timer != nullptr) { |
| + // Iteration 1: subtract 0 from the the current timer (this). |
|
Igor Sheludko
2016/11/21 10:54:02
s/the the/the/
|
| + // Iteration n+1: subtract the time (delta) from the subtimer. |
|
Igor Sheludko
2016/11/21 10:54:02
subtract subtimer's time (delta) from the the curr
|
| + timer->Subtract(delta); |
| + delta = timer->timer_.Restart(now); |
| + timer->counter_->time += delta; |
| + timer = timer->parent(); |
| + } |
| +} |
| + |
| RuntimeCallTimerScope::RuntimeCallTimerScope( |
| Isolate* isolate, RuntimeCallStats::CounterId counter_id) { |
| if (V8_UNLIKELY(FLAG_runtime_stats)) { |