diff options
-rw-r--r-- | base/debug/trace_event_android.cc | 59 | ||||
-rw-r--r-- | base/debug/trace_event_impl.cc | 3 | ||||
-rw-r--r-- | base/debug/trace_event_impl.h | 1 |
3 files changed, 38 insertions, 25 deletions
diff --git a/base/debug/trace_event_android.cc b/base/debug/trace_event_android.cc index 8cc5f3c..23e022d 100644 --- a/base/debug/trace_event_android.cc +++ b/base/debug/trace_event_android.cc @@ -16,15 +16,17 @@ namespace { int g_atrace_fd = -1; const char* kATraceMarkerFile = "/sys/kernel/debug/tracing/trace_marker"; -void WriteEvent(char phase, - const char* category_group, - const char* name, - unsigned long long id, - int num_args, - const char** arg_names, - const unsigned char* arg_types, - const unsigned long long* arg_values, - unsigned char flags) { +void WriteEvent( + char phase, + const char* category_group, + const char* name, + unsigned long long id, + int num_args, + const char** arg_names, + const unsigned char* arg_types, + const unsigned long long* arg_values, + scoped_ptr<base::debug::ConvertableToTraceFormat> convertable_values[], + unsigned char flags) { std::string out = base::StringPrintf("%c|%d|%s", phase, getpid(), name); if (flags & TRACE_EVENT_FLAG_HAS_ID) base::StringAppendF(&out, "-%" PRIx64, static_cast<uint64>(id)); @@ -35,10 +37,14 @@ void WriteEvent(char phase, out += ';'; out += arg_names[i]; out += '='; - base::debug::TraceEvent::TraceValue value; - value.as_uint = arg_values[i]; std::string::size_type value_start = out.length(); - base::debug::TraceEvent::AppendValueAsJSON(arg_types[i], value, &out); + if (arg_types[i] == TRACE_VALUE_TYPE_CONVERTABLE) { + convertable_values[i]->AppendAsTraceFormat(&out); + } else { + base::debug::TraceEvent::TraceValue value; + value.as_uint = arg_values[i]; + base::debug::TraceEvent::AppendValueAsJSON(arg_types[i], value, &out); + } // Remove the quotes which may confuse the atrace script. ReplaceSubstringsAfterOffset(&out, value_start, "\\\"", "'"); ReplaceSubstringsAfterOffset(&out, value_start, "\"", ""); @@ -74,35 +80,40 @@ void TraceLog::StopATrace() { } } -void TraceLog::SendToATrace(char phase, - const char* category_group, - const char* name, - unsigned long long id, - int num_args, - const char** arg_names, - const unsigned char* arg_types, - const unsigned long long* arg_values, - unsigned char flags) { +void TraceLog::SendToATrace( + char phase, + const char* category_group, + const char* name, + unsigned long long id, + int num_args, + const char** arg_names, + const unsigned char* arg_types, + const unsigned long long* arg_values, + scoped_ptr<ConvertableToTraceFormat> convertable_values[], + unsigned char flags) { if (g_atrace_fd == -1) return; switch (phase) { case TRACE_EVENT_PHASE_BEGIN: WriteEvent('B', category_group, name, id, - num_args, arg_names, arg_types, arg_values, flags); + num_args, arg_names, arg_types, arg_values, convertable_values, + flags); break; case TRACE_EVENT_PHASE_END: // Though a single 'E' is enough, here append pid, name and // category_group etc. So that unpaired events can be found easily. WriteEvent('E', category_group, name, id, - num_args, arg_names, arg_types, arg_values, flags); + num_args, arg_names, arg_types, arg_values, convertable_values, + flags); break; case TRACE_EVENT_PHASE_INSTANT: // Simulate an instance event with a pair of begin/end events. WriteEvent('B', category_group, name, id, - num_args, arg_names, arg_types, arg_values, flags); + num_args, arg_names, arg_types, arg_values, convertable_values, + flags); write(g_atrace_fd, "E", 1); break; diff --git a/base/debug/trace_event_impl.cc b/base/debug/trace_event_impl.cc index 3b1ac1e..7ce4119 100644 --- a/base/debug/trace_event_impl.cc +++ b/base/debug/trace_event_impl.cc @@ -1094,7 +1094,8 @@ void TraceLog::AddTraceEventWithThreadIdAndTimestamp( #if defined(OS_ANDROID) SendToATrace(phase, GetCategoryGroupName(category_group_enabled), name, id, - num_args, arg_names, arg_types, arg_values, flags); + num_args, arg_names, arg_types, arg_values, convertable_values, + flags); #endif TimeTicks now = timestamp - time_offset_; diff --git a/base/debug/trace_event_impl.h b/base/debug/trace_event_impl.h index 28bf1a0..9ffcef5 100644 --- a/base/debug/trace_event_impl.h +++ b/base/debug/trace_event_impl.h @@ -510,6 +510,7 @@ class BASE_EXPORT TraceLog { const char** arg_names, const unsigned char* arg_types, const unsigned long long* arg_values, + scoped_ptr<ConvertableToTraceFormat> convertable_values[], unsigned char flags); static void ApplyATraceEnabledFlag(unsigned char* category_group_enabled); #endif |