Index: content/browser/tracing/tracing_controller_impl.cc |
diff --git a/content/browser/tracing/tracing_controller_impl.cc b/content/browser/tracing/tracing_controller_impl.cc |
index 9e49c0bec7c2d3a51070f2885887dff9293be262..f601180460498d5bf72a07e94586bb4e1a7b95fb 100644 |
--- a/content/browser/tracing/tracing_controller_impl.cc |
+++ b/content/browser/tracing/tracing_controller_impl.cc |
@@ -668,16 +668,20 @@ void TracingControllerImpl::OnEndAgentTracingAcked( |
if (trace_data_sink_.get() && events_str_ptr && |
!events_str_ptr->data().empty()) { |
- if (agent_name == kETWTracingAgentName) { |
- // The Windows kernel events are kept into a JSON format stored as string |
- // and must not be escaped. |
- trace_data_sink_->AddAgentTrace(events_label, events_str_ptr->data()); |
- } else if (agent_name != kArcTracingAgentName) { |
- // ARC trace data is obtained via systrace. Ignore the empty data. |
- // Quote other trace data as JSON strings and merge them into |
- // |trace_data_sink_|. |
- trace_data_sink_->AddAgentTrace( |
- events_label, base::GetQuotedJSONString(events_str_ptr->data())); |
+ std::string json_string; |
+ if (agent_name == kETWTracingAgentName || |
+ agent_name == kArcTracingAgentName) { |
+ // The Windows kernel events and ARC Android tracing event are kept |
+ // into a JSON format stored as string and must not be escaped. |
+ json_string = events_str_ptr->data(); |
dcheng
2017/04/06 06:14:14
This copies the data string at least 2x now for Wi
shunhsingou
2017/04/06 08:42:28
Done.
|
+ } else { |
+ json_string = base::GetQuotedJSONString(events_str_ptr->data()); |
+ } |
+ |
+ if (agent_name == kArcTracingAgentName) { |
+ trace_data_sink_->AddTraceChunk(json_string); |
+ } else { |
+ trace_data_sink_->AddAgentTrace(events_label, json_string); |
} |
} |
std::vector<std::string> category_groups; |