Index: src/counters-inl.h |
diff --git a/src/counters-inl.h b/src/counters-inl.h |
index 7219ef778a6ea6a06ce25ad457b7a1299c5d7194..c0a6f378902fc1fca30468722671a19d4c1a0020 100644 |
--- a/src/counters-inl.h |
+++ b/src/counters-inl.h |
@@ -10,6 +10,47 @@ |
namespace v8 { |
namespace internal { |
+inline void RuntimeCallTimer::Start(RuntimeCallCounter* counter, |
+ RuntimeCallTimer* parent) { |
+ counter_ = counter; |
+ parent_.SetValue(parent); |
+ if (FLAG_runtime_stats != |
+ v8::tracing::TracingCategoryObserver::ENABLED_BY_SAMPLING) { |
+ timer_.Start(); |
+ } |
+} |
+ |
+inline RuntimeCallTimer* RuntimeCallTimer::Stop() { |
+ if (!timer_.IsStarted()) return parent(); |
+ base::TimeDelta delta = timer_.Elapsed(); |
+ timer_.Stop(); |
+ counter_->count++; |
+ counter_->time += delta; |
+ if (parent()) { |
+ // Adjust parent timer so that it does not include sub timer's time. |
+ parent()->Subtract(delta); |
Camillo Bruni
2016/11/17 14:02:00
newly added Subtract
|
+ } |
+ return parent(); |
+} |
+ |
+inline void RuntimeCallTimer::Subtract(base::TimeDelta delta) { |
+ // Adjust the current timer instead of directly subtracting the sub-timers |
+ // from the current counter. This way we can easily the counter of an active |
Igor Sheludko
2016/11/18 09:55:45
.. can easily [change?] the counter of ...
|
+ // timer scope. Otherwise we would end up subtracting the time from the |
+ // previous counter and add the own time to the newly changed counter. |
+ timer_.AdjustBy(-delta); |
+} |
+ |
+inline void RuntimeCallTimer::Elapsed() { |
+ base::TimeDelta delta = timer_.Elapsed(); |
+ counter_->time += delta; |
+ if (parent()) { |
+ parent()->counter_->time -= delta; |
+ parent()->Elapsed(); |
+ } |
+ timer_.Restart(); |
+} |
+ |
RuntimeCallTimerScope::RuntimeCallTimerScope( |
Isolate* isolate, RuntimeCallStats::CounterId counter_id) { |
if (V8_UNLIKELY(FLAG_runtime_stats)) { |