Index: base/debug/trace_event.h |
diff --git a/base/debug/trace_event.h b/base/debug/trace_event.h |
index f9dc1c94d6d65b885772a4b1bf3b16005c58c2e9..db78f74414e0e667d8cea2cf1c40eb257668806a 100644 |
--- a/base/debug/trace_event.h |
+++ b/base/debug/trace_event.h |
@@ -510,7 +510,9 @@ |
value1_name, static_cast<int>(value1_val), \ |
value2_name, static_cast<int>(value2_val)) |
- |
+// ASYNC_STEP_* APIs should be only used by legacy code. New code should |
+// consider using NESTABLE_ASYNC_* APIs to describe substeps within an async |
+// event. |
// Records a single ASYNC_BEGIN event called "name" immediately, with 0, 1 or 2 |
// associated arguments. If the category is not enabled, then this |
// does nothing. |
@@ -634,6 +636,45 @@ |
static_cast<int>(base::PlatformThread::CurrentId()), \ |
timestamp, TRACE_EVENT_FLAG_NONE) |
+// NESTABLE_ASYNC_* APIs are used to describe an async operation, which can |
+// be nested within a NESTABLE_ASYNC event and/or have inner NESTABLE_ASYNC |
+// events. |
+// - category and name strings must have application lifetime (statics or |
+// literals). They may not include " chars. |
+// - |id| is used to match the NESTABLE_ASYNC_BEGIN event with the |
+// NESTABLE_ASYNC_END event. Events are considered to match if their |
+// category_group, name and id values all match. |id| must either be a |
+// pointer or an integer value up to 64 bits. If it's a pointer, the bits |
+// will be xored with a hash of the process ID so that the same pointer on two |
+// different processes will not collide. |
+// |
+// Unmatched NESTABLE_ASYNC_END event will be parsed as an instant event, |
+// and unmatched NESTABLE_ASYNC_BEGIN event will be parsed as an event that |
+// ends at the last NESTABLE_ASYNC_END event of that |id|. |
+ |
+// Records a single NESTABLE_ASYNC_BEGIN event called "name" immediately, with 2 |
+// associated arguments. If the category is not enabled, then this does nothing. |
+#define TRACE_EVENT_NESTABLE_ASYNC_BEGIN2(category_group, name, id, arg1_name, \ |
+ arg1_val, arg2_name, arg2_val) \ |
+ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN, \ |
+ category_group, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ |
+ arg2_name, arg2_val) |
+// Records a single NESTABLE_ASYNC_END event called "name" immediately, with 2 |
+// associated arguments. If the category is not enabled, then this does nothing. |
+#define TRACE_EVENT_NESTABLE_ASYNC_END2(category_group, name, id, arg1_name, \ |
+ arg1_val, arg2_name, arg2_val) \ |
+ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_END, \ |
+ category_group, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ |
+ arg2_name, arg2_val) |
+// Records a single NESTABLE_ASYNC_INSTANT event called "name" immediately, |
+// with 2 associated arguments. If the category is not enabled, then this |
+// does nothing. |
+#define TRACE_EVENT_NESTABLE_ASYNC_INSTANT2(category_group, name, id, \ |
+ arg1_name, arg1_val, arg2_name, arg2_val) \ |
+ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT, \ |
+ category_group, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val, \ |
+ arg2_name, arg2_val) |
+ |
// Records a single FLOW_BEGIN event called "name" immediately, with 0, 1 or 2 |
// associated arguments. If the category is not enabled, then this |
// does nothing. |
@@ -963,6 +1004,9 @@ TRACE_EVENT_API_CLASS_EXPORT extern \ |
#define TRACE_EVENT_PHASE_ASYNC_STEP_INTO ('T') |
#define TRACE_EVENT_PHASE_ASYNC_STEP_PAST ('p') |
#define TRACE_EVENT_PHASE_ASYNC_END ('F') |
+#define TRACE_EVENT_PHASE_NESTABLE_ASYNC_BEGIN ('b') |
+#define TRACE_EVENT_PHASE_NESTABLE_ASYNC_END ('e') |
+#define TRACE_EVENT_PHASE_NESTABLE_ASYNC_INSTANT ('n') |
#define TRACE_EVENT_PHASE_FLOW_BEGIN ('s') |
#define TRACE_EVENT_PHASE_FLOW_STEP ('t') |
#define TRACE_EVENT_PHASE_FLOW_END ('f') |