ftrace_reader: Use atrace --only_userspace option

Bug: 73625407
Change-Id: I5c75233b641b31bfe4d4a8c6ebc1d6b71bf1f5e0
diff --git a/src/ftrace_reader/ftrace_config_muxer.cc b/src/ftrace_reader/ftrace_config_muxer.cc
index 641bd28..2f221b7 100644
--- a/src/ftrace_reader/ftrace_config_muxer.cc
+++ b/src/ftrace_reader/ftrace_config_muxer.cc
@@ -236,8 +236,6 @@
       return 0;
 
     // If we're about to turn tracing on use this opportunity do some setup:
-    if (RequiresAtrace(request))
-      EnableAtrace(request);
     SetupClock(request);
     SetupBufferSize(request);
   } else {
@@ -248,6 +246,9 @@
 
   std::set<std::string> events = GetFtraceEvents(request, table_);
 
+  if (RequiresAtrace(request))
+    UpdateAtrace(request);
+
   for (auto& name : events) {
     const Event* event = table_->GetEventByName(name);
     if (!event) {
@@ -341,14 +342,13 @@
   current_state_.cpu_buffer_size_pages = pages;
 }
 
-void FtraceConfigMuxer::EnableAtrace(const FtraceConfig& request) {
-  PERFETTO_DCHECK(!current_state_.atrace_on);
-
-  PERFETTO_DLOG("Start atrace...");
+void FtraceConfigMuxer::UpdateAtrace(const FtraceConfig& request) {
+  PERFETTO_DLOG("Update atrace config...");
 
   std::vector<std::string> args;
   args.push_back("atrace");  // argv0 for exec()
   args.push_back("--async_start");
+  args.push_back("--only_userspace");
   for (const auto& category : request.atrace_categories())
     args.push_back(category);
   if (!request.atrace_apps().empty()) {
@@ -368,7 +368,7 @@
 
   PERFETTO_DLOG("Stop atrace...");
 
-  if (RunAtrace({"atrace", "--async_stop"}))
+  if (RunAtrace({"atrace", "--async_stop", "--only_userspace"}))
     current_state_.atrace_on = false;
 
   PERFETTO_DLOG("...done");
diff --git a/src/ftrace_reader/ftrace_config_muxer.h b/src/ftrace_reader/ftrace_config_muxer.h
index de2a7b0..82f51c4 100644
--- a/src/ftrace_reader/ftrace_config_muxer.h
+++ b/src/ftrace_reader/ftrace_config_muxer.h
@@ -80,7 +80,7 @@
 
   void SetupClock(const FtraceConfig& request);
   void SetupBufferSize(const FtraceConfig& request);
-  void EnableAtrace(const FtraceConfig& request);
+  void UpdateAtrace(const FtraceConfig& request);
   void DisableAtrace();
 
   FtraceConfigId GetNextId();
diff --git a/test/configs/atrace.cfg b/test/configs/atrace.cfg
index dde7f38..9267238 100644
--- a/test/configs/atrace.cfg
+++ b/test/configs/atrace.cfg
@@ -9,7 +9,7 @@
     name: "com.google.perfetto.ftrace"
     target_buffer: 0
     ftrace_config {
-      ftrace_events: "sched_switch"
+      atrace_categories: "input"
       buffer_size_kb: 168  # 4 (page size) * 42
       drain_period_ms: 42
     }