Multiuser perfetto metric: omni-switch

Time user switching based on the UI entrypoint. Allow multiple different
types of entry (QuickSettings, Settings, adb).

Also increases the number of processes listed for the cpu metric.

To locally compile for testing:
tools/gen_all out/linux; tools/ninja -C out/linux

Test: out/linux/trace_processor_shell --run-metrics android_multiuser tracefile
Test: tools/diff_test_trace_processor.py out/linux/trace_processor_shell

Bug: 192001071

Change-Id: Ifdfc2939b1980f7c14e9c01610b127ab9701a9e6
diff --git a/src/trace_processor/metrics/sql/android/android_multiuser_populator.sql b/src/trace_processor/metrics/sql/android/android_multiuser_populator.sql
index 140bd36..98a4b16 100644
--- a/src/trace_processor/metrics/sql/android/android_multiuser_populator.sql
+++ b/src/trace_processor/metrics/sql/android/android_multiuser_populator.sql
@@ -22,15 +22,28 @@
       {{end_event}}_time_ns AS event_end_time_ns
 FROM
   (
-    SELECT slice.ts AS user_start_time_ns
+    SELECT MIN(slice.ts) AS user_start_time_ns
     FROM slice
-    WHERE (slice.name LIKE "onBeforeStartUser%")
-    -- TODO: Use a signal based on SysUi so that it covers all switching, not just starting.
+    WHERE (
+        slice.name = "UserDetailView.Adapter#onClick" OR -- QuickSettings
+        slice.name = "UserDetailSettings.switchUser" OR -- Settings
+        slice.name = "shell_runSwitchUser" -- adb shell
+    )
   ),
   (
     SELECT slice.ts + slice.dur AS launcher_end_time_ns
     FROM slice
     WHERE (slice.name = "launching: com.google.android.apps.nexuslauncher")
+  ),
+  (
+    SELECT MIN(slice.ts) AS user_create_time_ns
+    FROM slice
+    WHERE (
+        slice.name = "UserDetailView.Adapter#onClick" OR -- QuickSettings
+        slice.name = "UserSettings.addUserNow" OR -- Settings
+        slice.name = "UserSettings.addGuest" OR -- Settings
+        slice.name = "shell_runCreateUser" -- adb shell
+    )
   );
 
 -- Calculation of the duration of the Multiuser event of interest.
@@ -93,7 +106,7 @@
     cpu_kcycles / (SELECT SUM(cpu_kcycles) FROM cpu_usage_all) * 100 AS cpu_percentage
 FROM
     cpu_usage_all
-ORDER BY cpu_mcycles DESC LIMIT 6;
+ORDER BY cpu_mcycles DESC LIMIT 25;
 
 
 -- Record the output for populating the proto.
diff --git a/test/trace_processor/parsing/android_multiuser_switch.textproto b/test/trace_processor/parsing/android_multiuser_switch.textproto
index 223ddb6..4798139 100644
--- a/test/trace_processor/parsing/android_multiuser_switch.textproto
+++ b/test/trace_processor/parsing/android_multiuser_switch.textproto
@@ -5,7 +5,7 @@
       timestamp: 3000000000 # 3e9
       pid: 4064
       print {
-        buf: "S|1204|onBeforeStartUser-10|0\n"
+        buf: "S|1204|UserDetailView.Adapter#onClick|0\n"
       }
     }
   }
@@ -17,7 +17,7 @@
       timestamp: 3100000000
       pid: 4064
       print {
-        buf: "F|1204|onBeforeStartUser-10|0\n"
+        buf: "F|1204|UserDetailView.Adapter#onClick|0\n"
       }
     }
   }