// Copyright 2021 the V8 project authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #ifndef V8_LOGGING_RUNTIME_CALL_STATS_SCOPE_H_ #define V8_LOGGING_RUNTIME_CALL_STATS_SCOPE_H_ #include #include "src/execution/isolate.h" #include "src/execution/local-isolate.h" #include "src/logging/counters.h" #include "src/logging/runtime-call-stats.h" #include "src/logging/tracing-flags.h" namespace v8 { namespace internal { #ifdef V8_RUNTIME_CALL_STATS // Make the line number part of the scope's name to avoid -Wshadow warnings. #define RCS_SCOPE(...) \ v8::internal::RuntimeCallTimerScope CONCAT(rcs_timer_scope, \ __LINE__)(__VA_ARGS__) RuntimeCallTimerScope::RuntimeCallTimerScope(Isolate* isolate, RuntimeCallCounterId counter_id) { if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; stats_ = isolate->counters()->runtime_call_stats(); stats_->Enter(&timer_, counter_id); } RuntimeCallTimerScope::RuntimeCallTimerScope( LocalIsolate* isolate, RuntimeCallCounterId counter_id, RuntimeCallStats::CounterMode mode) { if (V8_LIKELY(!TracingFlags::is_runtime_stats_enabled())) return; DCHECK_NOT_NULL(isolate->runtime_call_stats()); stats_ = isolate->runtime_call_stats(); if (mode == RuntimeCallStats::CounterMode::kThreadSpecific) { counter_id = stats_->CounterIdForThread(counter_id); } DCHECK(stats_->IsCounterAppropriateForThread(counter_id)); stats_->Enter(&timer_, counter_id); } #else // RUNTIME_CALL_STATS #define RCS_SCOPE(...) #endif // defined(V8_RUNTIME_CALL_STATS) } // namespace internal } // namespace v8 #endif // V8_LOGGING_RUNTIME_CALL_STATS_SCOPE_H_