Merge "tracebox: wait for traced_probes to register"
diff --git a/src/trace_processor/importers/common/process_tracker.h b/src/trace_processor/importers/common/process_tracker.h
index 1a062cf..86c4339 100644
--- a/src/trace_processor/importers/common/process_tracker.h
+++ b/src/trace_processor/importers/common/process_tracker.h
@@ -50,11 +50,6 @@
ProcessTracker& operator=(const ProcessTracker&) = delete;
virtual ~ProcessTracker();
- using UniqueProcessIterator =
- std::multimap<uint32_t, UniquePid>::const_iterator;
- using UniqueProcessBounds =
- std::pair<UniqueProcessIterator, UniqueProcessIterator>;
-
using UniqueThreadIterator = std::vector<UniqueTid>::const_iterator;
using UniqueThreadBounds =
std::pair<UniqueThreadIterator, UniqueThreadIterator>;
@@ -135,10 +130,10 @@
// Virtual for testing.
virtual UniquePid GetOrCreateProcess(uint32_t pid);
- // Returns the bounds of a range that includes all UniquePids that have the
- // requested pid.
- UniqueProcessBounds UpidsForPidForTesting(uint32_t pid) {
- return pids_.equal_range(pid);
+ // Returns the upid for a given pid.
+ base::Optional<UniquePid> UpidForPidForTesting(uint32_t pid) {
+ auto it = pids_.find(pid);
+ return it == pids_.end() ? base::nullopt : base::make_optional(it->second);
}
// Returns the bounds of a range that includes all UniqueTids that have the
@@ -187,13 +182,16 @@
ArgsTracker args_tracker_;
- // Each tid can have multiple UniqueTid entries, a new UniqueTid is assigned
- // each time a thread is seen in the trace.
- std::map<uint32_t /* tid */, std::vector<UniqueTid>> tids_;
+ // Mapping for tid to the vector of possible UniqueTids.
+ // TODO(lalitm): this is a one-many mapping because this code was written
+ // before global sorting was a thing so multiple threads could be "active"
+ // simultaneously. This is no longer the case so this should be removed
+ // (though it seems like there are subtle things which break in Chrome if this
+ // changes).
+ std::unordered_map<uint32_t /* tid */, std::vector<UniqueTid>> tids_;
- // Each pid can have multiple UniquePid entries, a new UniquePid is assigned
- // each time a process is seen in the trace.
- std::map<uint32_t /* pid (aka tgid) */, UniquePid> pids_;
+ // Mapping of the most recently seen pid to the associated upid.
+ std::unordered_map<uint32_t /* pid (aka tgid) */, UniquePid> pids_;
// Pending thread associations. The meaning of a pair<ThreadA, ThreadB> in
// this vector is: we know that A and B belong to the same process, but we
diff --git a/src/trace_processor/importers/common/process_tracker_unittest.cc b/src/trace_processor/importers/common/process_tracker_unittest.cc
index 7ed1bd4..3e415df 100644
--- a/src/trace_processor/importers/common/process_tracker_unittest.cc
+++ b/src/trace_processor/importers/common/process_tracker_unittest.cc
@@ -47,8 +47,8 @@
TEST_F(ProcessTrackerTest, PushProcess) {
context.process_tracker->SetProcessMetadata(1, base::nullopt, "test",
base::StringView());
- auto pair_it = context.process_tracker->UpidsForPidForTesting(1);
- ASSERT_EQ(pair_it.first->second, 1u);
+ auto opt_upid = context.process_tracker->UpidForPidForTesting(1);
+ ASSERT_EQ(opt_upid.value_or(-1), 1u);
}
TEST_F(ProcessTrackerTest, GetOrCreateNewProcess) {
@@ -68,9 +68,8 @@
base::StringView());
context.process_tracker->SetProcessMetadata(1, base::nullopt, "test",
base::StringView());
- auto pair_it = context.process_tracker->UpidsForPidForTesting(1);
- ASSERT_EQ(pair_it.first->second, 1u);
- ASSERT_EQ(++pair_it.first, pair_it.second);
+ auto opt_upid = context.process_tracker->UpidForPidForTesting(1);
+ ASSERT_EQ(opt_upid.value_or(-1), 1u);
}
TEST_F(ProcessTrackerTest, PushTwoProcessEntries_DifferentPid) {
@@ -78,10 +77,10 @@
base::StringView());
context.process_tracker->SetProcessMetadata(3, base::nullopt, "test",
base::StringView());
- auto pair_it = context.process_tracker->UpidsForPidForTesting(1);
- ASSERT_EQ(pair_it.first->second, 1u);
- auto second_pair_it = context.process_tracker->UpidsForPidForTesting(3);
- ASSERT_EQ(second_pair_it.first->second, 2u);
+ auto opt_upid = context.process_tracker->UpidForPidForTesting(1);
+ ASSERT_EQ(opt_upid.value_or(-1), 1u);
+ opt_upid = context.process_tracker->UpidForPidForTesting(3);
+ ASSERT_EQ(opt_upid.value_or(-1), 2u);
}
TEST_F(ProcessTrackerTest, AddProcessEntry_CorrectName) {
@@ -101,8 +100,8 @@
auto tid_it = context.process_tracker->UtidsForTidForTesting(12);
ASSERT_NE(tid_it.first, tid_it.second);
ASSERT_EQ(context.storage->thread_table().upid()[1].value(), 1u);
- auto pid_it = context.process_tracker->UpidsForPidForTesting(2);
- ASSERT_NE(pid_it.first, pid_it.second);
+ auto opt_upid = context.process_tracker->UpidForPidForTesting(2);
+ ASSERT_TRUE(opt_upid.has_value());
ASSERT_EQ(context.storage->process_table().row_count(), 2u);
}