Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(355)

Unified Diff: src/tracing/trace-event.h

Issue 2296243002: [RuntimeCallStats] Move tracing runtime instrumentation closer to the original version. (Closed)
Patch Set: Rebase Created 4 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/parsing/parser.cc ('k') | src/tracing/trace-event.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/tracing/trace-event.h
diff --git a/src/tracing/trace-event.h b/src/tracing/trace-event.h
index 25ccd8045a8a72919c550bc11417e46d3d4bfc1e..d1f52b84b3ed54ca0669cae3a4303bfa9d14c454 100644
--- a/src/tracing/trace-event.h
+++ b/src/tracing/trace-event.h
@@ -11,7 +11,6 @@
#include "include/v8-platform.h"
#include "src/base/atomicops.h"
#include "src/base/macros.h"
-#include "src/counters.h"
// This header file defines implementation details of how the trace macros in
// trace_event_common.h collect and store trace events. Anything not
@@ -289,9 +288,6 @@ extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3];
#define TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name) \
INTERNAL_TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name)
-#define TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(isolate, counter_id) \
- INTERNAL_TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(isolate, counter_id)
-
#define INTERNAL_TRACE_EVENT_CALL_STATS_SCOPED(isolate, category_group, name) \
{ \
INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO( \
@@ -309,13 +305,11 @@ extern TRACE_EVENT_API_ATOMIC_WORD g_trace_state[3];
name); \
}
-#define INTERNAL_TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_SCOPED(isolate, \
- counter_id) \
- v8::internal::tracing::CounterScope INTERNAL_TRACE_EVENT_UID(scope)( \
- isolate, counter_id);
-
namespace v8 {
namespace internal {
+
+class Isolate;
+
namespace tracing {
// Specify these values when the corresponding argument of AddTraceEvent is not
@@ -634,136 +628,21 @@ class CallStatsScopedTracer {
}
}
- void Initialize(Isolate* isolate, const uint8_t* category_group_enabled,
- const char* name);
+ void Initialize(v8::internal::Isolate* isolate,
+ const uint8_t* category_group_enabled, const char* name);
private:
void AddEndTraceEvent();
struct Data {
const uint8_t* category_group_enabled;
const char* name;
- Isolate* isolate;
+ v8::internal::Isolate* isolate;
};
bool has_parent_scope_;
Data* p_data_;
Data data_;
};
-// TraceEventCallStatsTimer is used to keep track of the stack of currently
-// active timers used for properly measuring the own time of a
-// RuntimeCallCounter.
-class TraceEventCallStatsTimer {
- public:
- TraceEventCallStatsTimer() : counter_(nullptr), parent_(nullptr) {}
- RuntimeCallCounter* counter() { return counter_; }
- base::ElapsedTimer timer() { return timer_; }
-
- private:
- friend class TraceEventStatsTable;
-
- V8_INLINE void Start(RuntimeCallCounter* counter,
- TraceEventCallStatsTimer* parent) {
- counter_ = counter;
- parent_ = parent;
- timer_.Start();
- }
-
- V8_INLINE TraceEventCallStatsTimer* Stop() {
- base::TimeDelta delta = timer_.Elapsed();
- timer_.Stop();
- counter_->count++;
- counter_->time += delta;
- if (parent_ != nullptr) {
- // Adjust parent timer so that it does not include sub timer's time.
- parent_->counter_->time -= delta;
- }
- return parent_;
- }
-
- RuntimeCallCounter* counter_;
- TraceEventCallStatsTimer* parent_;
- base::ElapsedTimer timer_;
-};
-
-class TraceEventStatsTable {
- public:
- typedef RuntimeCallCounter TraceEventStatsTable::*CounterId;
-
-#define CALL_RUNTIME_COUNTER(name) \
- RuntimeCallCounter name = RuntimeCallCounter(#name);
- FOR_EACH_MANUAL_COUNTER(CALL_RUNTIME_COUNTER)
-#undef CALL_RUNTIME_COUNTER
-#define CALL_RUNTIME_COUNTER(name, nargs, ressize) \
- RuntimeCallCounter Runtime_##name = RuntimeCallCounter(#name);
- FOR_EACH_INTRINSIC(CALL_RUNTIME_COUNTER)
-#undef CALL_RUNTIME_COUNTER
-#define CALL_BUILTIN_COUNTER(name) \
- RuntimeCallCounter Builtin_##name = RuntimeCallCounter(#name);
- BUILTIN_LIST_C(CALL_BUILTIN_COUNTER)
-#undef CALL_BUILTIN_COUNTER
-#define CALL_BUILTIN_COUNTER(name) \
- RuntimeCallCounter API_##name = RuntimeCallCounter("API_" #name);
- FOR_EACH_API_COUNTER(CALL_BUILTIN_COUNTER)
-#undef CALL_BUILTIN_COUNTER
-#define CALL_BUILTIN_COUNTER(name) \
- RuntimeCallCounter Handler_##name = RuntimeCallCounter(#name);
- FOR_EACH_HANDLER_COUNTER(CALL_BUILTIN_COUNTER)
-#undef CALL_BUILTIN_COUNTER
-
- // Starting measuring the time for a function. This will establish the
- // connection to the parent counter for properly calculating the own times.
- static void Enter(Isolate* isolate, TraceEventCallStatsTimer* timer,
- CounterId counter_id);
-
- // Leave a scope for a measured runtime function. This will properly add
- // the time delta to the current_counter and subtract the delta from its
- // parent.
- static void Leave(Isolate* isolate, TraceEventCallStatsTimer* timer);
-
- void Reset();
- const char* Dump();
-
- TraceEventStatsTable() {
- Reset();
- in_use_ = false;
- }
-
- TraceEventCallStatsTimer* current_timer() { return current_timer_; }
- bool InUse() { return in_use_; }
-
- private:
- std::stringstream buffer_;
- std::unique_ptr<char[]> buffer_c_str_;
- size_t len_ = 0;
- // Counter to track recursive time events.
- TraceEventCallStatsTimer* current_timer_ = nullptr;
- bool in_use_;
-};
-
-class CounterScope {
- public:
- CounterScope(Isolate* isolate, TraceEventStatsTable::CounterId counter_id)
- : isolate_(nullptr) {
- if (V8_UNLIKELY(TRACE_EVENT_RUNTIME_CALL_STATS_TRACING_ENABLED())) {
- isolate_ = isolate;
- TraceEventStatsTable::Enter(isolate_, &timer_, counter_id);
- }
- }
- ~CounterScope() {
- // A non-nullptr isolate_ means the stats table already entered the scope
- // and started the timer, we need to leave the scope and reset the timer
- // even when we stop tracing, otherwise we have the risk to have a dangling
- // pointer.
- if (V8_UNLIKELY(isolate_ != nullptr)) {
- TraceEventStatsTable::Leave(isolate_, &timer_);
- }
- }
-
- private:
- Isolate* isolate_;
- TraceEventCallStatsTimer timer_;
-};
-
} // namespace tracing
} // namespace internal
} // namespace v8
« no previous file with comments | « src/parsing/parser.cc ('k') | src/tracing/trace-event.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698