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

Unified Diff: base/trace_event/trace_event.h

Issue 1837013003: [tracing] Add support for profiling trace events (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ipc_trace
Patch Set: nits. Created 4 years, 9 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
Index: base/trace_event/trace_event.h
diff --git a/base/trace_event/trace_event.h b/base/trace_event/trace_event.h
index 2321d7ad62bd66c38653ab49b5d28e664b8a861d..7d489aecc26d72700b62685bd0170372eb843122 100644
--- a/base/trace_event/trace_event.h
+++ b/base/trace_event/trace_event.h
@@ -18,6 +18,7 @@
#include "base/macros.h"
#include "base/time/time.h"
#include "base/trace_event/common/trace_event_common.h"
+#include "base/trace_event/heap_profiler_allocation_context_tracker.h"
#include "base/trace_event/trace_event_system_stats_monitor.h"
#include "base/trace_event/trace_log.h"
#include "build/build_config.h"
@@ -71,11 +72,18 @@
#define TRACE_EVENT_API_CURRENT_THREAD_ID \
static_cast<int>(base::PlatformThread::CurrentId())
+#define INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_TRACING() \
+ UNLIKELY(*INTERNAL_TRACE_EVENT_UID(category_group_enabled) & \
+ (base::trace_event::TraceLog::ENABLED_FOR_HEAP_PROFILING | \
+ base::trace_event::TraceLog::ENABLED_FOR_NON_PROFILING_MODE))
+
#define INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE() \
- UNLIKELY(*INTERNAL_TRACE_EVENT_UID(category_group_enabled) & \
- (base::trace_event::TraceLog::ENABLED_FOR_RECORDING | \
- base::trace_event::TraceLog::ENABLED_FOR_EVENT_CALLBACK | \
- base::trace_event::TraceLog::ENABLED_FOR_ETW_EXPORT))
+ UNLIKELY(*INTERNAL_TRACE_EVENT_UID(category_group_enabled) & \
+ (base::trace_event::TraceLog::ENABLED_FOR_NON_PROFILING_MODE))
+
+#define INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_HEAP_PROFILING() \
+ UNLIKELY(*INTERNAL_TRACE_EVENT_UID(category_group_enabled) & \
+ base::trace_event::TraceLog::ENABLED_FOR_HEAP_PROFILING)
////////////////////////////////////////////////////////////////////////////////
// Implementation specific tracing API definitions.
@@ -263,8 +271,9 @@ TRACE_EVENT_API_CLASS_EXPORT extern \
// event if the category is enabled. Also adds the end event when the scope
// ends.
#define INTERNAL_TRACE_EVENT_ADD_SCOPED(category_group, name, ...) \
- INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \
- trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \
+ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \
+ trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_TRACING()) { \
if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \
base::trace_event::TraceEventHandle h = \
trace_event_internal::AddTraceEvent( \
@@ -273,26 +282,39 @@ TRACE_EVENT_API_CLASS_EXPORT extern \
trace_event_internal::kGlobalScope, trace_event_internal::kNoId, \
TRACE_EVENT_FLAG_NONE, trace_event_internal::kNoId, \
##__VA_ARGS__); \
- INTERNAL_TRACE_EVENT_UID(tracer).Initialize( \
- INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, h); \
- }
+ INTERNAL_TRACE_EVENT_UID(tracer) \
+ .Initialize(INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \
+ h); \
+ } \
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_HEAP_PROFILING()) { \
+ INTERNAL_TRACE_EVENT_UID(tracer) \
+ .InitializeForHeapProfiling(name, TRACE_EVENT_FLAG_NONE); \
+ } \
+ }
-#define INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW( \
- category_group, name, bind_id, flow_flags, ...) \
+#define INTERNAL_TRACE_EVENT_ADD_SCOPED_WITH_FLOW(category_group, name, \
+ bind_id, flow_flags, ...) \
INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category_group); \
trace_event_internal::ScopedTracer INTERNAL_TRACE_EVENT_UID(tracer); \
- if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \
- unsigned int trace_event_flags = flow_flags; \
- trace_event_internal::TraceID trace_event_bind_id(bind_id, \
- &trace_event_flags); \
- base::trace_event::TraceEventHandle h = \
- trace_event_internal::AddTraceEvent( \
- TRACE_EVENT_PHASE_COMPLETE, \
- INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \
- trace_event_internal::kGlobalScope, trace_event_internal::kNoId, \
- trace_event_flags, trace_event_bind_id.raw_id(), ##__VA_ARGS__); \
- INTERNAL_TRACE_EVENT_UID(tracer).Initialize( \
- INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, h); \
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_TRACING()) { \
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_RECORDING_MODE()) { \
+ unsigned int trace_event_flags = flow_flags; \
+ trace_event_internal::TraceID trace_event_bind_id(bind_id, \
+ &trace_event_flags); \
+ base::trace_event::TraceEventHandle h = \
+ trace_event_internal::AddTraceEvent( \
+ TRACE_EVENT_PHASE_COMPLETE, \
+ INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \
+ trace_event_internal::kGlobalScope, trace_event_internal::kNoId, \
+ trace_event_flags, trace_event_bind_id.raw_id(), ##__VA_ARGS__); \
+ INTERNAL_TRACE_EVENT_UID(tracer) \
+ .Initialize(INTERNAL_TRACE_EVENT_UID(category_group_enabled), name, \
+ h); \
+ } \
+ if (INTERNAL_TRACE_EVENT_CATEGORY_GROUP_ENABLED_FOR_HEAP_PROFILING()) { \
+ INTERNAL_TRACE_EVENT_UID(tracer) \
+ .InitializeForHeapProfiling(name, flow_flags); \
+ } \
}
// Implementation detail: internal macro to create static category and add
@@ -964,9 +986,13 @@ class TRACE_EVENT_API_CLASS_EXPORT ScopedTracer {
ScopedTracer() : p_data_(NULL) {}
~ScopedTracer() {
- if (p_data_ && *data_.category_group_enabled)
+ if (p_data_ && *data_.category_group_enabled) {
TRACE_EVENT_API_UPDATE_TRACE_EVENT_DURATION(
data_.category_group_enabled, data_.name, data_.event_handle);
+ }
+ // TODO(ssid): Pop the frame from the pseudo stack if initialized for
+ // profiling is true, after adding profiling mode in skia and Blink
+ // crbug.com/598426.
}
void Initialize(const unsigned char* category_group_enabled,
@@ -978,6 +1004,15 @@ class TRACE_EVENT_API_CLASS_EXPORT ScopedTracer {
p_data_ = &data_;
}
+ void InitializeForHeapProfiling(const char* name, unsigned int flags) {
+ if (!(flags & TRACE_EVENT_FLAG_COPY)) {
+ data_.initialized_for_profiling = true;
+ data_.name = name;
+ // TODO(ssid): Add the frame to the pseudo stack after adding profiling
+ // mode in skia and Blink crbug.com/598426.
+ }
+ }
+
private:
// This Data struct workaround is to avoid initializing all the members
// in Data during construction of this object, since this object is always
@@ -988,6 +1023,7 @@ class TRACE_EVENT_API_CLASS_EXPORT ScopedTracer {
const unsigned char* category_group_enabled;
const char* name;
base::trace_event::TraceEventHandle event_handle;
+ bool initialized_for_profiling;
};
Data* p_data_;
Data data_;

Powered by Google App Engine
This is Rietveld 408576698