diff options
author | jbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-27 23:12:25 +0000 |
---|---|---|
committer | jbates@chromium.org <jbates@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2012-01-27 23:12:25 +0000 |
commit | f61f8d228409ee43c6581224bcb649625cd94024 (patch) | |
tree | 93ef6dd79d7f773327a0289ecacbd6b75217d4ac /base | |
parent | 3671f1351b8bafc73b723b88426d43379ed89eea (diff) | |
download | chromium_src-f61f8d228409ee43c6581224bcb649625cd94024.zip chromium_src-f61f8d228409ee43c6581224bcb649625cd94024.tar.gz chromium_src-f61f8d228409ee43c6581224bcb649625cd94024.tar.bz2 |
Remove pointer mangling API from trace_event.h and use an addTraceEvent flag instead
BUG=109779
Review URL: https://chromiumcodereview.appspot.com/9223005
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@119519 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'base')
-rw-r--r-- | base/debug/trace_event.h | 88 | ||||
-rw-r--r-- | base/debug/trace_event_impl.cc | 4 | ||||
-rw-r--r-- | base/debug/trace_event_impl.h | 7 |
3 files changed, 52 insertions, 47 deletions
diff --git a/base/debug/trace_event.h b/base/debug/trace_event.h index b20cf948..2298b03 100644 --- a/base/debug/trace_event.h +++ b/base/debug/trace_event.h @@ -349,11 +349,11 @@ // two different processes will not collide. #define TRACE_COUNTER_ID1(category, name, id, value) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID, \ + category, name, id, TRACE_EVENT_FLAG_NONE, \ "value", static_cast<int>(value)) #define TRACE_COPY_COUNTER_ID1(category, name, id, value) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \ - category, name, id, TRACE_EVENT_FLAG_COPY | TRACE_EVENT_FLAG_HAS_ID, \ + category, name, id, TRACE_EVENT_FLAG_COPY, \ "value", static_cast<int>(value)) // Records the values of a multi-parted counter called "name" immediately. @@ -368,13 +368,13 @@ #define TRACE_COUNTER_ID2(category, name, id, value1_name, value1_val, \ value2_name, value2_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID, \ + category, name, id, TRACE_EVENT_FLAG_NONE, \ value1_name, static_cast<int>(value1_val), \ value2_name, static_cast<int>(value2_val)) #define TRACE_COPY_COUNTER_ID2(category, name, id, value1_name, value1_val, \ value2_name, value2_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_COUNTER, \ - category, name, id, TRACE_EVENT_FLAG_COPY | TRACE_EVENT_FLAG_HAS_ID, \ + category, name, id, TRACE_EVENT_FLAG_COPY, \ value1_name, static_cast<int>(value1_val), \ value2_name, static_cast<int>(value2_val)) @@ -390,52 +390,52 @@ // two different processes will not collide. #define TRACE_EVENT_START0(category, name, id) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID) + category, name, id, TRACE_EVENT_FLAG_NONE) #define TRACE_EVENT_START1(category, name, id, arg1_name, arg1_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID, arg1_name, arg1_val) + category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) #define TRACE_EVENT_START2(category, name, id, arg1_name, arg1_val, \ arg2_name, arg2_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID, \ + category, name, id, TRACE_EVENT_FLAG_NONE, \ arg1_name, arg1_val, arg2_name, arg2_val) #define TRACE_EVENT_COPY_START0(category, name, id) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_COPY) + category, name, id, TRACE_EVENT_FLAG_COPY) #define TRACE_EVENT_COPY_START1(category, name, id, arg1_name, arg1_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_COPY, \ + category, name, id, TRACE_EVENT_FLAG_COPY, \ arg1_name, arg1_val) #define TRACE_EVENT_COPY_START2(category, name, id, arg1_name, arg1_val, \ arg2_name, arg2_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_START, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_COPY, \ + category, name, id, TRACE_EVENT_FLAG_COPY, \ arg1_name, arg1_val, arg2_name, arg2_val) // Records a single FINISH event for "name" immediately. If the category // is not enabled, then this does nothing. #define TRACE_EVENT_FINISH0(category, name, id) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID) + category, name, id, TRACE_EVENT_FLAG_NONE) #define TRACE_EVENT_FINISH1(category, name, id, arg1_name, arg1_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID, arg1_name, arg1_val) + category, name, id, TRACE_EVENT_FLAG_NONE, arg1_name, arg1_val) #define TRACE_EVENT_FINISH2(category, name, id, arg1_name, arg1_val, \ arg2_name, arg2_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID, \ + category, name, id, TRACE_EVENT_FLAG_NONE, \ arg1_name, arg1_val, arg2_name, arg2_val) #define TRACE_EVENT_COPY_FINISH0(category, name, id) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_COPY) + category, name, id, TRACE_EVENT_FLAG_COPY) #define TRACE_EVENT_COPY_FINISH1(category, name, id, arg1_name, arg1_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_COPY, \ + category, name, id, TRACE_EVENT_FLAG_COPY, \ arg1_name, arg1_val) #define TRACE_EVENT_COPY_FINISH2(category, name, id, arg1_name, arg1_val, \ arg2_name, arg2_val) \ INTERNAL_TRACE_EVENT_ADD_WITH_ID(TRACE_EVENT_PHASE_FINISH, \ - category, name, id, TRACE_EVENT_FLAG_HAS_ID | TRACE_EVENT_FLAG_COPY, \ + category, name, id, TRACE_EVENT_FLAG_COPY, \ arg1_name, arg1_val, arg2_name, arg2_val) @@ -472,13 +472,6 @@ #define TRACE_EVENT_API_ADD_TRACE_EVENT \ base::debug::TraceLog::GetInstance()->AddTraceEvent -// Mangle pointer with a hash so that if it occurs on more than one process, -// it will not collide in the trace data. Pass the returned value to -// TRACE_EVENT_API_ADD_TRACE_EVENT as the id parameter. -// unsigned long long TRACE_EVENT_API_GET_ID_FROM_POINTER(void* pointer) -#define TRACE_EVENT_API_GET_ID_FROM_POINTER \ - base::debug::TraceLog::GetInstance()->GetInterProcessID - //////////////////////////////////////////////////////////////////////////////// // Implementation detail: trace event macros create temporary variables @@ -554,9 +547,12 @@ ...) \ INTERNAL_TRACE_EVENT_GET_CATEGORY_INFO(category); \ if (*INTERNAL_TRACE_EVENT_UID(catstatic)) { \ + unsigned char trace_event_flags = flags | TRACE_EVENT_FLAG_HAS_ID; \ + trace_event_internal::TraceID trace_event_trace_id( \ + id, &trace_event_flags); \ trace_event_internal::AddTraceEvent( \ phase, INTERNAL_TRACE_EVENT_UID(catstatic), \ - name, trace_event_internal::TraceID(id).data(), flags, \ + name, trace_event_trace_id.data(), trace_event_flags, \ ##__VA_ARGS__); \ } @@ -576,8 +572,9 @@ // Flags for changing the behavior of TRACE_EVENT_API_ADD_TRACE_EVENT. #define TRACE_EVENT_FLAG_NONE (static_cast<unsigned char>(0)) -#define TRACE_EVENT_FLAG_COPY (static_cast<unsigned char>(1<<0)) -#define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned char>(1<<1)) +#define TRACE_EVENT_FLAG_COPY (static_cast<unsigned char>(1 << 0)) +#define TRACE_EVENT_FLAG_HAS_ID (static_cast<unsigned char>(1 << 1)) +#define TRACE_EVENT_FLAG_MANGLE_ID (static_cast<unsigned char>(1 << 2)) // Type values for identifying types in the TraceValue union. #define TRACE_VALUE_TYPE_BOOL (static_cast<unsigned char>(1)) @@ -602,20 +599,31 @@ const unsigned long long kNoEventId = 0; // same pointer is used on different processes. class TraceID { public: - explicit TraceID(void* rhs) : - data_(TRACE_EVENT_API_GET_ID_FROM_POINTER(rhs)) {} - explicit TraceID(unsigned long long rhs) : data_(rhs) {} - explicit TraceID(unsigned long rhs) : data_(rhs) {} - explicit TraceID(unsigned int rhs) : data_(rhs) {} - explicit TraceID(unsigned short rhs) : data_(rhs) {} - explicit TraceID(unsigned char rhs) : data_(rhs) {} - explicit TraceID(long long rhs) : - data_(static_cast<unsigned long long>(rhs)) {} - explicit TraceID(long rhs) : data_(static_cast<unsigned long long>(rhs)) {} - explicit TraceID(int rhs) : data_(static_cast<unsigned long long>(rhs)) {} - explicit TraceID(short rhs) : data_(static_cast<unsigned long long>(rhs)) {} - explicit TraceID(signed char rhs) : - data_(static_cast<unsigned long long>(rhs)) {} + explicit TraceID(const void* id, unsigned char* flags) : + data_(static_cast<unsigned long long>( + reinterpret_cast<unsigned long>(id))) { + *flags |= TRACE_EVENT_FLAG_MANGLE_ID; + } + explicit TraceID(unsigned long long id, unsigned char* flags) : + data_(id) { (void)flags; } + explicit TraceID(unsigned long id, unsigned char* flags) : + data_(id) { (void)flags; } + explicit TraceID(unsigned int id, unsigned char* flags) : + data_(id) { (void)flags; } + explicit TraceID(unsigned short id, unsigned char* flags) : + data_(id) { (void)flags; } + explicit TraceID(unsigned char id, unsigned char* flags) : + data_(id) { (void)flags; } + explicit TraceID(long long id, unsigned char* flags) : + data_(static_cast<unsigned long long>(id)) { (void)flags; } + explicit TraceID(long id, unsigned char* flags) : + data_(static_cast<unsigned long long>(id)) { (void)flags; } + explicit TraceID(int id, unsigned char* flags) : + data_(static_cast<unsigned long long>(id)) { (void)flags; } + explicit TraceID(short id, unsigned char* flags) : + data_(static_cast<unsigned long long>(id)) { (void)flags; } + explicit TraceID(signed char id, unsigned char* flags) : + data_(static_cast<unsigned long long>(id)) { (void)flags; } unsigned long long data() const { return data_; } diff --git a/base/debug/trace_event_impl.cc b/base/debug/trace_event_impl.cc index a591bac..223e04b 100644 --- a/base/debug/trace_event_impl.cc +++ b/base/debug/trace_event_impl.cc @@ -595,6 +595,10 @@ int TraceLog::AddTraceEvent(char phase, return -1; } } + + if (flags & TRACE_EVENT_FLAG_MANGLE_ID) + id ^= process_id_hash_; + ret_begin_id = static_cast<int>(logged_events_.size()); logged_events_.push_back( TraceEvent(thread_id, diff --git a/base/debug/trace_event_impl.h b/base/debug/trace_event_impl.h index 60323b4..dc7b59f 100644 --- a/base/debug/trace_event_impl.h +++ b/base/debug/trace_event_impl.h @@ -248,13 +248,6 @@ class BASE_EXPORT TraceLog { const void* id, const std::string& extra); - // Mangle |ptr| with a hash based on the process ID so that if |ptr| occurs on - // more than one process, it will not collide. - unsigned long long GetInterProcessID(void* ptr) const { - return static_cast<unsigned long long>(reinterpret_cast<uintptr_t>(ptr)) ^ - process_id_hash_; - } - int process_id() const { return process_id_; } // Exposed for unittesting: |