Chromium Code Reviews| Index: base/debug/trace_event_internal.h |
| diff --git a/base/debug/trace_event_internal.h b/base/debug/trace_event_internal.h |
| index 46495f4460c4d60e04d0345359a2dd441f332eb7..afafbe13ce24990f8679a4b0731c5d1171a1b433 100644 |
| --- a/base/debug/trace_event_internal.h |
| +++ b/base/debug/trace_event_internal.h |
| @@ -731,6 +731,7 @@ |
| #define TRACE_VALUE_TYPE_POINTER (static_cast<unsigned char>(5)) |
| #define TRACE_VALUE_TYPE_STRING (static_cast<unsigned char>(6)) |
| #define TRACE_VALUE_TYPE_COPY_STRING (static_cast<unsigned char>(7)) |
| +#define TRACE_VALUE_TYPE_CONVERTABLE (static_cast<unsigned char>(8)) |
| // Enum reflecting the scope of an INSTANT event. Must fit within |
| // TRACE_EVENT_FLAG_SCOPE_MASK. |
| @@ -838,9 +839,11 @@ class TraceStringWithCopy { |
| #define INTERNAL_DECLARE_SET_TRACE_VALUE(actual_type, \ |
| union_member, \ |
| value_type_id) \ |
| - static inline void SetTraceValue(actual_type arg, \ |
| - unsigned char* type, \ |
| - unsigned long long* value) { \ |
| + static inline void SetTraceValue( \ |
| + actual_type arg, \ |
| + unsigned char* type, \ |
| + unsigned long long* value, \ |
| + scoped_ptr<base::debug::ConvertableToJSON>* convertable_value) { \ |
| TraceValueUnion type_value; \ |
| type_value.union_member = arg; \ |
| *type = value_type_id; \ |
| @@ -849,9 +852,11 @@ class TraceStringWithCopy { |
| // Simpler form for int types that can be safely casted. |
| #define INTERNAL_DECLARE_SET_TRACE_VALUE_INT(actual_type, \ |
| value_type_id) \ |
| - static inline void SetTraceValue(actual_type arg, \ |
| - unsigned char* type, \ |
| - unsigned long long* value) { \ |
| + static inline void SetTraceValue( \ |
| + actual_type arg, \ |
| + unsigned char* type, \ |
| + unsigned long long* value, \ |
| + scoped_ptr<base::debug::ConvertableToJSON>* convertable_value) { \ |
| *type = value_type_id; \ |
| *value = static_cast<unsigned long long>(arg); \ |
| } |
| @@ -879,15 +884,26 @@ INTERNAL_DECLARE_SET_TRACE_VALUE(const TraceStringWithCopy&, as_string, |
| #undef INTERNAL_DECLARE_SET_TRACE_VALUE_INT |
| // std::string version of SetTraceValue so that trace arguments can be strings. |
| -static inline void SetTraceValue(const std::string& arg, |
| - unsigned char* type, |
| - unsigned long long* value) { |
| +static inline void SetTraceValue( |
| + const std::string& arg, |
| + unsigned char* type, |
| + unsigned long long* value, |
| + scoped_ptr<base::debug::ConvertableToJSON>* convertable_value) { |
| TraceValueUnion type_value; |
| type_value.as_string = arg.c_str(); |
| *type = TRACE_VALUE_TYPE_COPY_STRING; |
| *value = type_value.as_uint; |
| } |
| +static inline void SetTraceValue( |
| + base::debug::ConvertableToJSON* arg, |
|
dsinclair
2013/04/09 22:37:45
This has to be scoped_ptr<base::debug::Convertable
dsinclair
2013/04/10 01:09:31
Done.
|
| + unsigned char* type, |
| + unsigned long long* value, |
| + scoped_ptr<base::debug::ConvertableToJSON>* convertable_value) { |
| + *type = TRACE_VALUE_TYPE_CONVERTABLE; |
| + convertable_value->reset(arg); |
| +} |
| + |
| // These AddTraceEvent and AddTraceEventWithThreadIdAndTimestamp template |
| // functions are defined here instead of in the macro, because the arg_values |
| // could be temporary objects, such as std::string. In order to store |
| @@ -903,7 +919,7 @@ static inline void AddTraceEventWithThreadIdAndTimestamp(char phase, |
| unsigned char flags) { |
| TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP( |
| phase, category_enabled, name, id, thread_id, timestamp, |
| - kZeroNumArgs, NULL, NULL, NULL, flags); |
| + kZeroNumArgs, NULL, NULL, NULL, NULL, flags); |
| } |
| static inline void AddTraceEvent(char phase, |
| @@ -930,10 +946,12 @@ static inline void AddTraceEventWithThreadIdAndTimestamp(char phase, |
| const int num_args = 1; |
| unsigned char arg_types[1]; |
| unsigned long long arg_values[1]; |
| - SetTraceValue(arg1_val, &arg_types[0], &arg_values[0]); |
| + scoped_ptr<base::debug::ConvertableToJSON> convertable_values[1]; |
| + SetTraceValue(arg1_val, &arg_types[0], &arg_values[0], |
| + &convertable_values[0]); |
| TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP( |
| phase, category_enabled, name, id, thread_id, timestamp, |
| - num_args, &arg1_name, arg_types, arg_values, flags); |
| + num_args, &arg1_name, arg_types, arg_values, convertable_values, flags); |
| } |
| template<class ARG1_TYPE> |
| @@ -967,11 +985,14 @@ static inline void AddTraceEventWithThreadIdAndTimestamp(char phase, |
| const char* arg_names[2] = { arg1_name, arg2_name }; |
| unsigned char arg_types[2]; |
| unsigned long long arg_values[2]; |
| - SetTraceValue(arg1_val, &arg_types[0], &arg_values[0]); |
| - SetTraceValue(arg2_val, &arg_types[1], &arg_values[1]); |
| + scoped_ptr<base::debug::ConvertableToJSON> convertable_values[2]; |
| + SetTraceValue(arg1_val, &arg_types[0], &arg_values[0], |
| + &convertable_values[0]); |
| + SetTraceValue(arg2_val, &arg_types[1], &arg_values[1], |
| + &convertable_values[1]); |
| TRACE_EVENT_API_ADD_TRACE_EVENT_WITH_THREAD_ID_AND_TIMESTAMP( |
| phase, category_enabled, name, id, thread_id, timestamp, |
| - num_args, arg_names, arg_types, arg_values, flags); |
| + num_args, arg_names, arg_types, arg_values, convertable_values, flags); |
| } |
| template<class ARG1_TYPE, class ARG2_TYPE> |
| @@ -1017,7 +1038,7 @@ class TRACE_EVENT_API_CLASS_EXPORT TraceEndOnScopeClose { |
| TRACE_EVENT_PHASE_END, |
| p_data_->category_enabled, |
| p_data_->name, kNoEventId, |
| - kZeroNumArgs, NULL, NULL, NULL, |
| + kZeroNumArgs, NULL, NULL, NULL, NULL, |
| TRACE_EVENT_FLAG_NONE); |
| } |
| } |