Track CPU usage of AOS processes in starterd

Change-Id: I7aff742ec992c20a09fcf1ffcf5de4cbdec4bef8
Signed-off-by: James Kuszmaul <james.kuszmaul@bluerivertech.com>
diff --git a/aos/starter/subprocess.cc b/aos/starter/subprocess.cc
index c1eb618..f0c8f85 100644
--- a/aos/starter/subprocess.cc
+++ b/aos/starter/subprocess.cc
@@ -346,10 +346,16 @@
 }
 
 flatbuffers::Offset<aos::starter::ApplicationStatus>
-Application::PopulateStatus(flatbuffers::FlatBufferBuilder *builder) {
+Application::PopulateStatus(flatbuffers::FlatBufferBuilder *builder,
+                            util::Top *top) {
   CHECK_NOTNULL(builder);
   auto name_fbs = builder->CreateString(name_);
 
+  const bool valid_pid = pid_ > 0 && status_ != aos::starter::State::STOPPED;
+  const flatbuffers::Offset<util::ProcessInfo> process_info =
+      valid_pid ? top->InfoForProcess(builder, pid_)
+                : flatbuffers::Offset<util::ProcessInfo>();
+
   aos::starter::ApplicationStatus::Builder status_builder(*builder);
   status_builder.add_name(name_fbs);
   status_builder.add_state(status_);
@@ -361,6 +367,8 @@
     status_builder.add_pid(pid_);
     status_builder.add_id(id_);
   }
+  // Note that even if process_info is null, calling add_process_info is fine.
+  status_builder.add_process_info(process_info);
   status_builder.add_last_start_time(start_time_.time_since_epoch().count());
   return status_builder.Finish();
 }