trace_processor: Add the process table methods to trace_storage


Bug:80416541
Change-Id: I4d33d43a258eaabca45a6e4a0b80686e33c7de34
diff --git a/src/trace_processor/trace_storage.cc b/src/trace_processor/trace_storage.cc
index 00752e2..b4a856c 100644
--- a/src/trace_processor/trace_storage.cc
+++ b/src/trace_processor/trace_storage.cc
@@ -21,6 +21,11 @@
 namespace perfetto {
 namespace trace_processor {
 
+TraceStorage::TraceStorage() {
+  // Upid 0 is reserved for invalid processes.
+  unique_processes_.emplace_back();
+}
+
 TraceStorage::~TraceStorage() {}
 
 void TraceStorage::PushSchedSwitch(uint32_t cpu,
@@ -54,6 +59,33 @@
   prev->next_pid = next_pid;
 }
 
+void TraceStorage::PushProcess(uint32_t pid,
+                               const char* process_name,
+                               size_t process_name_len) {
+  bool exists = false;
+  auto pids_pair = pids_.equal_range(pid);
+  auto proc_name_id = InternString(process_name, process_name_len);
+  if (pids_pair.first != pids_pair.second) {
+    UniquePid prev_upid = std::prev(pids_pair.second)->second;
+    // If the previous process with the same pid also has the same name,
+    // then no action needs to be taken.
+    exists = unique_processes_[prev_upid].process_name_id == proc_name_id;
+  }
+
+  if (!exists) {
+    pids_.emplace(pid, current_upid_++);
+    ProcessEntry new_process;
+    new_process.start_ns = 0;
+    new_process.end_ns = 0;
+    new_process.process_name_id = proc_name_id;
+    unique_processes_.emplace_back(std::move(new_process));
+  }
+}
+
+TraceStorage::UniqueProcessRange TraceStorage::UpidsForPid(uint32_t pid) {
+  return pids_.equal_range(pid);
+}
+
 TraceStorage::StringId TraceStorage::InternString(const char* data,
                                                   size_t length) {
   uint32_t hash = 0;