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 68f011fa36a82f7754ba1358544829cf36b99bf2..d0eddf2e8444df48796a79acc74511c060dffd90 100644 |
--- a/content/browser/tracing/tracing_controller_impl.cc |
+++ b/content/browser/tracing/tracing_controller_impl.cc |
@@ -42,6 +42,7 @@ |
#endif |
#if defined(OS_CHROMEOS) |
+#include "chromeos/dbus/arc_trace_agent.h" |
#include "chromeos/dbus/dbus_thread_manager.h" |
#include "chromeos/dbus/debug_daemon_client.h" |
#endif |
@@ -62,6 +63,7 @@ base::LazyInstance<TracingControllerImpl>::Leaky g_controller = |
const char kChromeTracingAgentName[] = "chrome"; |
const char kETWTracingAgentName[] = "etw"; |
+const char kArcTracingAgentName[] = "arc"; |
const char kChromeTraceLabel[] = "traceEvents"; |
const int kStartTracingTimeoutSeconds = 30; |
@@ -297,6 +299,18 @@ bool TracingControllerImpl::StartTracing( |
#endif |
} |
+#if defined(OS_CHROMEOS) |
+ auto* arc_trace_agent = |
+ chromeos::DBusThreadManager::Get()->GetArcTraceAgent(); |
+ if (arc_trace_agent) { |
+ arc_trace_agent->StartAgentTracing( |
+ trace_config, |
+ base::Bind(&TracingControllerImpl::OnStartAgentTracingAcked, |
+ base::Unretained(this))); |
+ ++pending_start_tracing_ack_count_; |
+ } |
+#endif |
+ |
// TraceLog may have been enabled in startup tracing before threads are ready. |
if (TraceLog::GetInstance()->IsEnabled()) |
return true; |
@@ -562,6 +576,15 @@ void TracingControllerImpl::AddTracingAgent(const std::string& agent_name) { |
BrowserThread::GetBlockingPool()); |
return; |
} |
+ |
+ auto* arc_trace_agent = |
+ chromeos::DBusThreadManager::Get()->GetArcTraceAgent(); |
+ if (arc_trace_agent && agent_name == arc_trace_agent->GetTracingAgentName()) { |
+ additional_tracing_agents_.push_back(arc_trace_agent); |
+ arc_trace_agent->SetStopAgentTracingTaskRunner( |
+ BrowserThread::GetBlockingPool()); |
+ return; |
+ } |
#elif defined(OS_WIN) |
auto* etw_agent = EtwTracingAgent::GetInstance(); |
if (agent_name == etw_agent->GetTracingAgentName()) { |
@@ -667,14 +690,20 @@ void TracingControllerImpl::OnEndAgentTracingAcked( |
if (trace_data_sink_.get() && events_str_ptr && |
!events_str_ptr->data().empty()) { |
std::string json_string; |
- if (agent_name == kETWTracingAgentName) { |
- // The Windows kernel events are kept into a JSON format stored as string |
- // and must not be escaped. |
+ if (agent_name == kETWTracingAgentName or |
+ 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(); |
} else { |
json_string = base::GetQuotedJSONString(events_str_ptr->data()); |
} |
- trace_data_sink_->AddAgentTrace(events_label, json_string); |
+ |
+ 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; |
OnStopTracingAcked(NULL, category_groups); |