1 // Copyright 2016 the V8 project authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef V8_COUNTERS_INL_H_ 6 #define V8_COUNTERS_INL_H_ 7 8 #include "src/counters.h" 9 10 namespace v8 { 11 namespace internal { 12 Start(RuntimeCallCounter * counter,RuntimeCallTimer * parent)13void RuntimeCallTimer::Start(RuntimeCallCounter* counter, 14 RuntimeCallTimer* parent) { 15 DCHECK(!IsStarted()); 16 counter_ = counter; 17 parent_.SetValue(parent); 18 if (base::AsAtomic32::Relaxed_Load(&FLAG_runtime_stats) == 19 v8::tracing::TracingCategoryObserver::ENABLED_BY_SAMPLING) { 20 return; 21 } 22 base::TimeTicks now = RuntimeCallTimer::Now(); 23 if (parent) parent->Pause(now); 24 Resume(now); 25 DCHECK(IsStarted()); 26 } 27 Pause(base::TimeTicks now)28void RuntimeCallTimer::Pause(base::TimeTicks now) { 29 DCHECK(IsStarted()); 30 elapsed_ += (now - start_ticks_); 31 start_ticks_ = base::TimeTicks(); 32 } 33 Resume(base::TimeTicks now)34void RuntimeCallTimer::Resume(base::TimeTicks now) { 35 DCHECK(!IsStarted()); 36 start_ticks_ = now; 37 } 38 Stop()39RuntimeCallTimer* RuntimeCallTimer::Stop() { 40 if (!IsStarted()) return parent(); 41 base::TimeTicks now = RuntimeCallTimer::Now(); 42 Pause(now); 43 counter_->Increment(); 44 CommitTimeToCounter(); 45 46 RuntimeCallTimer* parent_timer = parent(); 47 if (parent_timer) { 48 parent_timer->Resume(now); 49 } 50 return parent_timer; 51 } 52 CommitTimeToCounter()53void RuntimeCallTimer::CommitTimeToCounter() { 54 counter_->Add(elapsed_); 55 elapsed_ = base::TimeDelta(); 56 } 57 IsStarted()58bool RuntimeCallTimer::IsStarted() { return start_ticks_ != base::TimeTicks(); } 59 RuntimeCallTimerScope(Isolate * isolate,HeapObject * heap_object,RuntimeCallCounterId counter_id)60RuntimeCallTimerScope::RuntimeCallTimerScope(Isolate* isolate, 61 HeapObject* heap_object, 62 RuntimeCallCounterId counter_id) 63 : RuntimeCallTimerScope(isolate, counter_id) {} 64 65 } // namespace internal 66 } // namespace v8 67 68 #endif // V8_COUNTERS_INL_H_ 69