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 | |
13 | void RuntimeCallTimer::Start(RuntimeCallCounter* counter, |
14 | RuntimeCallTimer* parent) { |
15 | DCHECK(!IsStarted()); |
16 | counter_ = counter; |
17 | parent_.SetValue(parent); |
18 | if (TracingFlags::runtime_stats.load(std::memory_order_relaxed) == |
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 | |
28 | void RuntimeCallTimer::Pause(base::TimeTicks now) { |
29 | DCHECK(IsStarted()); |
30 | elapsed_ += (now - start_ticks_); |
31 | start_ticks_ = base::TimeTicks(); |
32 | } |
33 | |
34 | void RuntimeCallTimer::Resume(base::TimeTicks now) { |
35 | DCHECK(!IsStarted()); |
36 | start_ticks_ = now; |
37 | } |
38 | |
39 | RuntimeCallTimer* 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 | |
53 | void RuntimeCallTimer::CommitTimeToCounter() { |
54 | counter_->Add(elapsed_); |
55 | elapsed_ = base::TimeDelta(); |
56 | } |
57 | |
58 | bool RuntimeCallTimer::IsStarted() { return start_ticks_ != base::TimeTicks(); } |
59 | |
60 | RuntimeCallTimerScope::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 |