| 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;
|
|
|