diff options
Diffstat (limited to 'deps/v8/src/counters-inl.h')
-rw-r--r-- | deps/v8/src/counters-inl.h | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/deps/v8/src/counters-inl.h b/deps/v8/src/counters-inl.h index 7219ef778a..ce77806cdc 100644 --- a/deps/v8/src/counters-inl.h +++ b/deps/v8/src/counters-inl.h @@ -10,6 +10,57 @@ namespace v8 { namespace internal { +void RuntimeCallTimer::Start(RuntimeCallCounter* counter, + RuntimeCallTimer* parent) { + DCHECK(!IsStarted()); + counter_ = counter; + parent_.SetValue(parent); + if (FLAG_runtime_stats == + v8::tracing::TracingCategoryObserver::ENABLED_BY_SAMPLING) { + return; + } + base::TimeTicks now = Now(); + if (parent) parent->Pause(now); + Resume(now); + DCHECK(IsStarted()); +} + +void RuntimeCallTimer::Pause(base::TimeTicks now) { + DCHECK(IsStarted()); + elapsed_ += (now - start_ticks_); + start_ticks_ = base::TimeTicks(); +} + +void RuntimeCallTimer::Resume(base::TimeTicks now) { + DCHECK(!IsStarted()); + start_ticks_ = now; +} + +RuntimeCallTimer* RuntimeCallTimer::Stop() { + if (!IsStarted()) return parent(); + base::TimeTicks now = Now(); + Pause(now); + counter_->Increment(); + CommitTimeToCounter(); + + RuntimeCallTimer* parent_timer = parent(); + if (parent_timer) { + parent_timer->Resume(now); + } + return parent_timer; +} + +void RuntimeCallTimer::CommitTimeToCounter() { + counter_->Add(elapsed_); + elapsed_ = base::TimeDelta(); +} + +bool RuntimeCallTimer::IsStarted() { return start_ticks_ != base::TimeTicks(); } + +base::TimeTicks RuntimeCallTimer::Now() { + return base::TimeTicks::HighResolutionNow(); +} + RuntimeCallTimerScope::RuntimeCallTimerScope( Isolate* isolate, RuntimeCallStats::CounterId counter_id) { if (V8_UNLIKELY(FLAG_runtime_stats)) { |