Index: base/trace_event/trace_event_etw_export_win.cc |
diff --git a/base/trace_event/trace_event_etw_export_win.cc b/base/trace_event/trace_event_etw_export_win.cc |
index 1cb3b8c85fca13ccb6c8789a44acb9f056f801da..9cda7ac5bc705377b76fdad986983d43b05e392f 100644 |
--- a/base/trace_event/trace_event_etw_export_win.cc |
+++ b/base/trace_event/trace_event_etw_export_win.cc |
@@ -132,7 +132,9 @@ void TraceEventETWExport::AddEvent( |
!EventEnabledChromeEvent()) |
return; |
- std::string phase_string; |
+ const char* phase_string = nullptr; |
+ // Space to store the phase identifier and null-terminator, when needed. |
+ char phase_buffer[2]; |
switch (phase) { |
case TRACE_EVENT_PHASE_BEGIN: |
phase_string = "Begin"; |
@@ -195,14 +197,20 @@ void TraceEventETWExport::AddEvent( |
phase_string = "Phase Delete Object"; |
break; |
default: |
- phase_string.push_back(phase); |
+ phase_buffer[0] = phase; |
+ phase_buffer[1] = 0; |
+ phase_string = phase_buffer; |
break; |
} |
std::string arg_values_string[3]; |
for (int i = 0; i < num_args; i++) { |
if (arg_types[i] == TRACE_VALUE_TYPE_CONVERTABLE) { |
- convertable_values[i]->AppendAsTraceFormat(arg_values_string + i); |
+ // Temporarily do nothing here. This function consumes 1/3 to 1/2 of |
+ // *total* process CPU time when ETW tracing, and many of the strings |
+ // created exceed WPA's 4094 byte limit and are shown as: |
+ // "Unable to parse data". |
Primiano Tucci (use gerrit)
2015/05/14 22:12:52
Can you copy and paste the (excellent) commit mess
brucedawson
2015/05/14 22:50:06
Done.
|
+ //convertable_values[i]->AppendAsTraceFormat(arg_values_string + i); |
} else { |
TraceEvent::TraceValue trace_event; |
trace_event.as_uint = arg_values[i]; |
@@ -212,7 +220,7 @@ void TraceEventETWExport::AddEvent( |
} |
EventWriteChromeEvent( |
- name, phase_string.c_str(), num_args > 0 ? arg_names[0] : "", |
+ name, phase_string, num_args > 0 ? arg_names[0] : "", |
arg_values_string[0].c_str(), num_args > 1 ? arg_names[1] : "", |
arg_values_string[1].c_str(), num_args > 2 ? arg_names[2] : "", |
arg_values_string[2].c_str()); |