Line data Source code
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 27429 : void RuntimeCallTimer::Start(RuntimeCallCounter* counter,
14 : RuntimeCallTimer* parent) {
15 : DCHECK(!IsStarted());
16 27429 : counter_ = counter;
17 : parent_.SetValue(parent);
18 27429 : if (TracingFlags::runtime_stats.load(std::memory_order_relaxed) ==
19 : v8::tracing::TracingCategoryObserver::ENABLED_BY_SAMPLING) {
20 0 : return;
21 : }
22 27429 : base::TimeTicks now = RuntimeCallTimer::Now();
23 27429 : 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 54808 : start_ticks_ = base::TimeTicks();
32 : }
33 :
34 : void RuntimeCallTimer::Resume(base::TimeTicks now) {
35 : DCHECK(!IsStarted());
36 54808 : start_ticks_ = now;
37 : }
38 :
39 27429 : RuntimeCallTimer* RuntimeCallTimer::Stop() {
40 27429 : if (!IsStarted()) return parent();
41 27429 : base::TimeTicks now = RuntimeCallTimer::Now();
42 : Pause(now);
43 27429 : counter_->Increment();
44 : CommitTimeToCounter();
45 :
46 : RuntimeCallTimer* parent_timer = parent();
47 27429 : if (parent_timer) {
48 : parent_timer->Resume(now);
49 : }
50 : return parent_timer;
51 : }
52 :
53 : void RuntimeCallTimer::CommitTimeToCounter() {
54 27436 : counter_->Add(elapsed_);
55 27436 : 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 54005423 : : RuntimeCallTimerScope(isolate, counter_id) {}
64 :
65 : } // namespace internal
66 : } // namespace v8
67 :
68 : #endif // V8_COUNTERS_INL_H_
|