Pull process cpu stats into statsd

Here is a sample output:

$ adb shell cmd stats pull-source 10035
Pull from 10035: { 1539500981000000000 222067020557 (10035)0x10000->0[I]
0x20000->ksoftirqd/0[S] 0x30000->0[L] 0x40000->720[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->1000[I]
0x20000->android.hardware.graphics.composer@2.1-service[S]
0x30000->1390[L] 0x40000->2240[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->1002[I]
0x20000->android.hardware.bluetooth@1.0-service-qti[S] 0x30000->50[L]
0x40000->80[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->1010[I] 0x20000->android.hardware.wifi@1.0-service[S]
0x30000->80[L] 0x40000->150[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->1069[I] 0x20000->lmkd[S] 0x30000->60[L] 0x40000->280[L]
}
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->9999[I] 0x20000->traced_probes[S] 0x30000->0[L]
0x40000->10[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->1066[I] 0x20000->statsd[S] 0x30000->160[L]
0x40000->160[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10024[I] 0x20000->com.android.systemui[S]
0x30000->3020[L] 0x40000->740[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10058[I] 0x20000->com.ustwo.lwp[S] 0x30000->9120[L]
0x40000->7810[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10080[I] 0x20000->com.google.android.apps.turbo[S]
0x30000->410[L] 0x40000->150[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10085[I] 0x20000->com.google.android.gms.persistent[S]
0x30000->9890[L] 0x40000->2560[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10110[I] 0x20000->com.google.android.ims[S]
0x30000->530[L] 0x40000->210[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10097[I] 0x20000->com.google.android.apps.maps[S]
0x30000->1170[L] 0x40000->290[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10014[I] 0x20000->android.process.acore[S]
0x30000->500[L] 0x40000->180[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->10131[I] 0x20000->com.google.android.contacts[S]
0x30000->270[L] 0x40000->160[L]  }
Pull from 10035: { 1539500981000000000 222067020557
(10035)0x10000->2000[I] 0x20000->cmd[S] 0x30000->20[L] 0x40000->60[L]  }

Bug: 113353129
Test: will add cts
Change-Id: Ia5335910e4f044791e9043823cc4f007d372e7d3
diff --git a/cmds/statsd/src/atoms.proto b/cmds/statsd/src/atoms.proto
index 4604510..4045996 100644
--- a/cmds/statsd/src/atoms.proto
+++ b/cmds/statsd/src/atoms.proto
@@ -183,6 +183,7 @@
         DiskIo disk_io = 10032;
         PowerProfile power_profile = 10033;
         ProcStats proc_stats_pkg_proc = 10034;
+        ProcessCpuTime process_cpu_time = 10035;
     }
 
     // DO NOT USE field numbers above 100,000 in AOSP.
@@ -3006,3 +3007,19 @@
 message PowerProfile {
     optional PowerProfileProto power_profile = 1;
 }
+
+/**
+ * Pulls process user time and system time. Puller takes a snapshot of all pids
+ * in the system and returns cpu stats for those that are working at the time.
+ * Dead pids will be dropped. Kernel processes are excluded.
+ * Min cool-down is 5 sec.
+ */
+message ProcessCpuTime {
+    optional int32 uid = 1 [(is_uid) = true];
+
+    optional string process_name = 2;
+    // Process cpu time in user space, cumulative from boot/process start
+    optional int64 user_time_millis = 3;
+    // Process cpu time in system space, cumulative from boot/process start
+    optional int64 system_time_millis = 4;
+}
\ No newline at end of file