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

Unified Diff: base/debug/trace_event.h

Issue 8590015: trace_event: distinguish between scoped begin/end and global start/finish events (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years, 1 month 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 | « no previous file | base/debug/trace_event.cc » ('j') | base/debug/trace_event.cc » ('J')
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/debug/trace_event.h
diff --git a/base/debug/trace_event.h b/base/debug/trace_event.h
index ce52645644575b2d8e788f4c4b88f9008249b485..5019b257cff07cc29530d532a543336775f075ce 100644
--- a/base/debug/trace_event.h
+++ b/base/debug/trace_event.h
@@ -255,6 +255,62 @@
category, name, arg1_name, arg1_val, arg2_name, arg2_val)
nduca 2011/11/17 19:13:06 Docs in the top of the header? Can we remove the
jbates 2011/11/23 00:41:11 I think we should remove them, but there are a few
+// Records a single START event called "name" immediately, with 0, 1 or 2
+// associated arguments. If the category is not enabled, then this
+// does nothing.
nduca 2011/11/17 19:13:06 Should explain what a start is.
jbates 2011/11/23 00:41:11 Done.
+// - category and name strings must have application lifetime (statics or
+// literals). They may not include " chars.
+// - |id| is used to match the START event with the FINISH event. It must cast
+// properly to a uint64.
+#define TRACE_EVENT_START0(category, name, id) \
+ TRACE_EVENT_START1(category, name, id, NULL, 0)
+#define TRACE_EVENT_START1(category, name, id, arg1_name, arg1_val) \
+ TRACE_EVENT_START2(category, name, id, arg1_name, arg1_val, NULL, 0)
+#define TRACE_EVENT_START2(category, name, id, arg1_name, arg1_val, \
+ arg2_name, arg2_val) \
+ INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_START, \
+ category, name, id, arg1_name, arg1_val, arg2_name, arg2_val, \
+ base::debug::TraceLog::EVENT_FLAG_NONE)
+#define TRACE_EVENT_COPY_START0(category, name, id) \
+ TRACE_EVENT_COPY_START1(category, name, id, NULL, 0)
+#define TRACE_EVENT_COPY_START1(category, name, id, arg1_name, arg1_val) \
+ TRACE_EVENT_COPY_START2(category, name, id, arg1_name, arg1_val, NULL, 0)
+#define TRACE_EVENT_COPY_START2(category, name, id, arg1_name, arg1_val, \
+ arg2_name, arg2_val) \
+ INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_START, \
+ category, name, id, \
+ arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \
+ arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \
+ base::debug::TraceLog::EVENT_FLAG_COPY)
+
+// Records a single FINISH event for "name" immediately. If the category
+// is not enabled, then this does nothing.
+// - category and name strings must have application lifetime (statics or
nduca 2011/11/17 19:13:06 Should explai what a finish is.
jbates 2011/11/23 00:41:11 Done.
+// literals). They may not include " chars.
+// - |id| is used to match the START event with the FINISH event. It must cast
+// properly to a uint64.
+#define TRACE_EVENT_FINISH0(category, name, id) \
+ TRACE_EVENT_FINISH1(category, name, id, NULL, 0)
+#define TRACE_EVENT_FINISH1(category, name, id, arg1_name, arg1_val) \
+ TRACE_EVENT_FINISH2(category, name, id, arg1_name, arg1_val, NULL, 0)
+#define TRACE_EVENT_FINISH2(category, name, id, arg1_name, arg1_val, \
+ arg2_name, arg2_val) \
+ INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_FINISH, \
+ category, name, id, arg1_name, arg1_val, arg2_name, arg2_val, \
+ base::debug::TraceLog::EVENT_FLAG_NONE)
+#define TRACE_EVENT_COPY_FINISH0(category, name, id) \
+ TRACE_EVENT_COPY_FINISH1(category, name, id, NULL, 0)
+#define TRACE_EVENT_COPY_FINISH1(category, name, id, arg1_name, arg1_val) \
+ TRACE_EVENT_COPY_FINISH2(category, name, id, arg1_name, arg1_val, NULL, 0)
+#define TRACE_EVENT_COPY_FINISH2(category, name, id, arg1_name, arg1_val, \
+ arg2_name, arg2_val) \
+ INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(base::debug::TRACE_EVENT_PHASE_FINISH, \
+ category, name, id, \
+ arg1_name, base::debug::TraceValue::ForceCopy(arg1_val), \
+ arg2_name, base::debug::TraceValue::ForceCopy(arg2_val), \
+ base::debug::TraceLog::EVENT_FLAG_COPY)
+
+
// Implementation detail: trace event macros create temporary variables
// to keep instrumentation overhead low. These macros give each temporary
// variable a unique name based on the line number to prevent name collissions.
@@ -276,7 +332,7 @@
INTERNAL_TRACE_EVENT_UID(catstatic) = \
base::debug::TraceLog::GetCategory(category);
-// Implementation detail: internal macro to create static category and add begin
+// Implementation detail: internal macro to create static category and add
// event if the category is enabled.
#define INTERNAL_TRACE_EVENT_ADD( \
phase, category, name, arg1_name, arg1_val, arg2_name, arg2_val, flags) \
@@ -284,7 +340,7 @@
if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \
base::debug::TraceLog::GetInstance()->AddTraceEvent( \
phase, INTERNAL_TRACE_EVENT_UID(catstatic), \
- name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \
+ name, 0, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \
}
// Implementation detail: internal macro to create static category and add begin
@@ -299,7 +355,7 @@
base::debug::TraceLog::GetInstance()->AddTraceEvent( \
base::debug::TRACE_EVENT_PHASE_BEGIN, \
INTERNAL_TRACE_EVENT_UID(catstatic), \
- name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \
+ name, 0, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \
base::debug::TraceLog::EVENT_FLAG_NONE); \
INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \
INTERNAL_TRACE_EVENT_UID(catstatic), name); \
@@ -318,13 +374,25 @@
base::debug::TraceLog::GetInstance()->AddTraceEvent( \
base::debug::TRACE_EVENT_PHASE_BEGIN, \
INTERNAL_TRACE_EVENT_UID(catstatic), \
- name, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \
+ name, 0, arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, \
base::debug::TraceLog::EVENT_FLAG_NONE); \
INTERNAL_TRACE_EVENT_UID(profileScope).Initialize( \
INTERNAL_TRACE_EVENT_UID(catstatic), name, \
INTERNAL_TRACE_EVENT_UID(begin_event_id), threshold); \
}
+// Implementation detail: internal macro to create static category and add
+// event if the category is enabled.
+#define INTERNAL_TRACE_EVENT_ADD_WITH_EXTRA(phase, category, name, extra, \
+ arg1_name, arg1_val, arg2_name, arg2_val, flags) \
+ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \
+ if (INTERNAL_TRACE_EVENT_UID(catstatic)->enabled) { \
+ base::debug::TraceLog::GetInstance()->AddTraceEvent( \
+ phase, INTERNAL_TRACE_EVENT_UID(catstatic), \
+ name, static_cast<uint64>(extra), \
+ arg1_name, arg1_val, arg2_name, arg2_val, -1, 0, flags); \
+ }
+
template <typename Type>
struct StaticMemorySingletonTraits;
@@ -347,6 +415,8 @@ enum TraceEventPhase {
TRACE_EVENT_PHASE_BEGIN,
TRACE_EVENT_PHASE_END,
TRACE_EVENT_PHASE_INSTANT,
+ TRACE_EVENT_PHASE_START,
+ TRACE_EVENT_PHASE_FINISH,
TRACE_EVENT_PHASE_METADATA
};
@@ -482,12 +552,12 @@ class BASE_EXPORT TraceValue {
class BASE_EXPORT TraceEvent {
public:
TraceEvent();
- TraceEvent(unsigned long process_id,
- unsigned long thread_id,
+ TraceEvent(int thread_id,
TimeTicks timestamp,
TraceEventPhase phase,
const TraceCategory* category,
const char* name,
+ uint64 extra,
const char* arg1_name, const TraceValue& arg1_val,
const char* arg2_name, const TraceValue& arg2_val,
bool copy);
@@ -514,15 +584,17 @@ class BASE_EXPORT TraceEvent {
const char* name() const { return name_; }
private:
- unsigned long process_id_;
- unsigned long thread_id_;
+ // Note: these are ordered by size (largest first) for optimal packing.
jbates 2011/11/17 01:15:28 Since I'm adding data to this struct, I took some
TimeTicks timestamp_;
- TraceEventPhase phase_;
+ // extra_ can be used to store phase-specific data.
+ uint64 extra_;
+ TraceValue arg_values_[kTraceMaxNumArgs];
+ const char* arg_names_[kTraceMaxNumArgs];
const TraceCategory* category_;
const char* name_;
- const char* arg_names_[kTraceMaxNumArgs];
- TraceValue arg_values_[kTraceMaxNumArgs];
scoped_refptr<base::RefCountedString> parameter_copy_storage_;
+ int thread_id_;
jbates 2011/11/17 01:15:28 Changed thread_id to int to save 32-bits in the 64
+ TraceEventPhase phase_;
};
@@ -650,6 +722,7 @@ class BASE_EXPORT TraceLog {
int AddTraceEvent(TraceEventPhase phase,
const TraceCategory* category,
const char* name,
+ uint64 extra,
const char* arg1_name, TraceValue arg1_val,
const char* arg2_name, TraceValue arg2_val,
int threshold_begin_id,
@@ -699,7 +772,7 @@ class BASE_EXPORT TraceLog {
std::vector<std::string> included_categories_;
std::vector<std::string> excluded_categories_;
- base::hash_map<PlatformThreadId, std::string> thread_names_;
+ base::hash_map<int, std::string> thread_names_;
DISALLOW_COPY_AND_ASSIGN(TraceLog);
};
« no previous file with comments | « no previous file | base/debug/trace_event.cc » ('j') | base/debug/trace_event.cc » ('J')

Powered by Google App Engine
This is Rietveld 408576698