| 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);
|
|
|