summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--base/debug/trace_event_android.cc59
-rw-r--r--base/debug/trace_event_impl.cc3
-rw-r--r--base/debug/trace_event_impl.h1
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