Index: third_party/WebKit/Source/platform/TraceEvent.h |
diff --git a/third_party/WebKit/Source/platform/TraceEvent.h b/third_party/WebKit/Source/platform/TraceEvent.h |
index b2d51c05913d706cfeadaa873c662fbde7eee251..c423de8db705b67cd749c4472f8417bd8e8de157 100644 |
--- a/third_party/WebKit/Source/platform/TraceEvent.h |
+++ b/third_party/WebKit/Source/platform/TraceEvent.h |
@@ -170,32 +170,44 @@ |
#define INTERNAL_TRACE_EVENT_ADD_SCOPED(category, name, ...) \ |
INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
blink::TraceEvent::ScopedTracer INTERNALTRACEEVENTUID(scopedTracer); \ |
- if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
- blink::TraceEvent::TraceEventHandle h = \ |
- blink::TraceEvent::addTraceEvent( \ |
- TRACE_EVENT_PHASE_COMPLETE, \ |
- INTERNALTRACEEVENTUID(categoryGroupEnabled), name, \ |
- blink::TraceEvent::kGlobalScope, blink::TraceEvent::noEventId, \ |
- TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ |
- INTERNALTRACEEVENTUID(scopedTracer).initialize( \ |
- INTERNALTRACEEVENTUID(categoryGroupEnabled), name, h); \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_TRACING()) { \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
+ blink::TraceEvent::TraceEventHandle h = \ |
+ blink::TraceEvent::addTraceEvent( \ |
+ TRACE_EVENT_PHASE_COMPLETE, \ |
+ INTERNALTRACEEVENTUID(categoryGroupEnabled), name, \ |
+ blink::TraceEvent::kGlobalScope, blink::TraceEvent::noEventId, \ |
+ TRACE_EVENT_FLAG_NONE, ##__VA_ARGS__); \ |
+ INTERNALTRACEEVENTUID(scopedTracer).initialize( \ |
+ INTERNALTRACEEVENTUID(categoryGroupEnabled), name, h); \ |
+ } \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_PROFILING()) { \ |
+ INTERNALTRACEEVENTUID(scopedTracer) \ |
+ .initializeForHeapProfiling(name, TRACE_EVENT_FLAG_NONE); \ |
+ } \ |
} |
#define INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category, name, bindId, flowFlags, ...) \ |
INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ |
blink::TraceEvent::ScopedTracer INTERNALTRACEEVENTUID(scopedTracer); \ |
- if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
- unsigned traceEventFlags = flowFlags; \ |
- blink::TraceEvent::TraceID traceEventBindId(bindId, &traceEventFlags); \ |
- blink::TraceEvent::TraceEventHandle h = \ |
- blink::TraceEvent::addTraceEvent( \ |
- TRACE_EVENT_PHASE_COMPLETE, \ |
- INTERNALTRACEEVENTUID(categoryGroupEnabled), name, \ |
- blink::TraceEvent::kGlobalScope, blink::TraceEvent::noEventId, \ |
- traceEventBindId.data(), \ |
- EventTracer::systemTraceTime(), traceEventFlags, ##__VA_ARGS__); \ |
- INTERNALTRACEEVENTUID(scopedTracer).initialize( \ |
- INTERNALTRACEEVENTUID(categoryGroupEnabled), name, h); \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_TRACING()) { \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \ |
+ unsigned traceEventFlags = flowFlags; \ |
+ blink::TraceEvent::TraceID traceEventBindId(bindId, &traceEventFlags); \ |
+ blink::TraceEvent::TraceEventHandle h = \ |
+ blink::TraceEvent::addTraceEvent( \ |
+ TRACE_EVENT_PHASE_COMPLETE, \ |
+ INTERNALTRACEEVENTUID(categoryGroupEnabled), name, \ |
+ blink::TraceEvent::kGlobalScope, blink::TraceEvent::noEventId, \ |
+ traceEventBindId.data(), \ |
+ EventTracer::systemTraceTime(), traceEventFlags, ##__VA_ARGS__); \ |
+ INTERNALTRACEEVENTUID(scopedTracer).initialize( \ |
+ INTERNALTRACEEVENTUID(categoryGroupEnabled), name, h); \ |
+ } \ |
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_PROFILING()) { \ |
+ INTERNALTRACEEVENTUID(scopedTracer) \ |
+ .initializeForHeapProfiling(name, TRACE_EVENT_FLAG_NONE); \ |
+ } \ |
} |
// Implementation detail: internal macro to create static category and add |
@@ -269,9 +281,18 @@ |
// These values must be in sync with base::debug::TraceLog::CategoryGroupEnabledFlags. |
#define ENABLED_FOR_RECORDING (1 << 0) |
#define ENABLED_FOR_EVENT_CALLBACK (1 << 2) |
+#define ENABLED_FOR_ETW_EXPORT (1 << 3) |
+#define ENABLED_FOR_PROFILING (1 << 4) |
+#define ENABLED_FOR_NON_PROFILING_MODE (ENABLED_FOR_RECORDING | ENABLED_FOR_EVENT_CALLBACK | ENABLED_FOR_ETW_EXPORT) |
+ |
+#define INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_TRACING() \ |
+ (*INTERNALTRACEEVENTUID(categoryGroupEnabled) & (ENABLED_FOR_PROFILING | ENABLED_FOR_NON_PROFILING_MODE)) |
#define INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE() \ |
- (*INTERNALTRACEEVENTUID(categoryGroupEnabled) & (ENABLED_FOR_RECORDING | ENABLED_FOR_EVENT_CALLBACK)) |
+ (*INTERNALTRACEEVENTUID(categoryGroupEnabled) & ENABLED_FOR_NON_PROFILING_MODE) |
+ |
+#define INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_PROFILING() \ |
+ (*INTERNALTRACEEVENTUID(categoryGroupEnabled) & ENABLED_FOR_PROFILING) |
#define INTERNAL_TRACE_MEMORY(category, name) |
@@ -601,8 +622,12 @@ public: |
ScopedTracer() : m_pdata(0) { } |
~ScopedTracer() |
{ |
- if (m_pdata && *m_pdata->categoryGroupEnabled) |
- TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(m_data.categoryGroupEnabled, m_data.name, m_data.eventHandle); |
+ if (m_data.name) { |
+ if (m_data.initializedForProfiling) |
+ blink::EventTracer::pushPseudoStackFrame(m_data.name); |
+ if (m_pdata && *m_pdata->categoryGroupEnabled) |
+ TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(m_data.categoryGroupEnabled, m_data.name, m_data.eventHandle); |
+ } |
} |
void initialize(const unsigned char* categoryGroupEnabled, const char* name, TraceEventHandle eventHandle) |
@@ -613,6 +638,15 @@ public: |
m_pdata = &m_data; |
} |
+ void initializeForHeapProfiling(const char* name, unsigned flags) |
+ { |
+ if (!(flags & TRACE_EVENT_FLAG_COPY)) { |
+ m_data.initializedForProfiling = true; |
+ m_data.name = name; |
+ blink::EventTracer::pushPseudoStackFrame(name); |
+ } |
+ } |
+ |
private: |
// This Data struct workaround is to avoid initializing all the members |
// in Data during construction of this object, since this object is always |
@@ -624,6 +658,7 @@ private: |
const unsigned char* categoryGroupEnabled; |
const char* name; |
TraceEventHandle eventHandle; |
+ bool initializedForProfiling; |
}; |
Data* m_pdata; |
Data m_data; |