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;