V8 API Reference, 7.2.502.16 (for Deno 0.2.4)
counters-inl.h
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 (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 
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_
Definition: libplatform.h:13