trace_processor: add track_id column to slice table
This CL adds the track_id column to the slice table; this column
is always filled and contains the track id associated with the slice.
This CL also changes the slice tracker to use the track id instead
of ref + ref_type to figure out the nesting of tracks.
Context: go/perfetto-tp-refactor
Bug: 135177627
Change-Id: I9e82425b2a9cdce57ef57fdb26e56b4b56cdae98
diff --git a/src/trace_processor/export_json_unittest.cc b/src/trace_processor/export_json_unittest.cc
index 4c41255..5e9cd14 100644
--- a/src/trace_processor/export_json_unittest.cc
+++ b/src/trace_processor/export_json_unittest.cc
@@ -67,13 +67,15 @@
const int64_t kThreadID = 100;
const char* kCategory = "cat";
const char* kName = "name";
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(kThreadID);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(
- kTimestamp, kDuration, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(kTimestamp, kDuration, track,
+ utid, RefType::kRefUtid, cat_id,
+ name_id, 0, 0, 0);
storage.mutable_thread_slices()->AddThreadSlice(
0, kThreadTimestamp, kThreadDuration, kThreadInstructionCount,
kThreadInstructionDelta);
@@ -112,13 +114,15 @@
const int64_t kThreadID = 100;
const char* kCategory = "cat";
const char* kName = "name";
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(kThreadID);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(
- kTimestamp, kDuration, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(kTimestamp, kDuration, track,
+ utid, RefType::kRefUtid, cat_id,
+ name_id, 0, 0, 0);
storage.mutable_thread_slices()->AddThreadSlice(
0, kThreadTimestamp, kThreadDuration, kThreadInstructionCount,
kThreadInstructionDelta);
@@ -176,11 +180,13 @@
}
TEST(ExportJsonTest, WrongRefType) {
+ constexpr TrackId track = 22;
+
TraceStorage storage;
StringId cat_id = storage.InternString("cat");
StringId name_id = storage.InternString("name");
- storage.mutable_nestable_slices()->AddSlice(0, 0, 0, RefType::kRefCpuId,
- cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(
+ 0, 0, track, 0, RefType::kRefCpuId, cat_id, name_id, 0, 0, 0);
base::TempFile temp_file = base::TempFile::Create();
FILE* output = fopen(temp_file.path().c_str(), "w+");
@@ -339,13 +345,14 @@
const char* kCategory = "cat";
const char* kName = "name";
const char* kSrc = "source_file.cc";
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(0);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(0, 0, utid, RefType::kRefUtid,
- cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(
+ 0, 0, track, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
StringId arg_key_id =
storage.InternString(base::StringView("task.posted_from.file_name"));
@@ -378,13 +385,14 @@
const char* kCategory = "cat";
const char* kName = "name";
double kValues[] = {1.234, 2.345};
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(0);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(0, 0, utid, RefType::kRefUtid,
- cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(
+ 0, 0, track, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
StringId arg_flat_key_id =
storage.InternString(base::StringView("debug.draw_duration_ms"));
@@ -427,13 +435,14 @@
const char* kName = "name";
uint64_t kValue0 = 1;
uint64_t kValue1 = std::numeric_limits<uint64_t>::max();
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(0);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(0, 0, utid, RefType::kRefUtid,
- cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(
+ 0, 0, track, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
StringId arg_key0_id = storage.InternString(base::StringView("arg0"));
StringId arg_key1_id = storage.InternString(base::StringView("arg1"));
@@ -470,13 +479,14 @@
const char* kCategory = "cat";
const char* kName = "name";
int kValues[] = {123, 234};
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(0);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(0, 0, utid, RefType::kRefUtid,
- cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(
+ 0, 0, track, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
StringId arg_flat_key_id = storage.InternString(base::StringView("a.b"));
StringId arg_key0_id = storage.InternString(base::StringView("a[0].b"));
@@ -515,13 +525,14 @@
const char* kCategory = "cat";
const char* kName = "name";
int kValues[] = {123, 234};
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(0);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(0, 0, utid, RefType::kRefUtid,
- cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(
+ 0, 0, track, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
StringId arg_flat_key_id = storage.InternString(base::StringView("a"));
StringId arg_key0_id = storage.InternString(base::StringView("a[0][0]"));
@@ -560,13 +571,14 @@
TEST(ExportJsonTest, StorageWithLegacyJsonArgs) {
const char* kCategory = "cat";
const char* kName = "name";
+ constexpr TrackId track = 22;
TraceStorage storage;
UniqueTid utid = storage.AddEmptyThread(0);
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
- storage.mutable_nestable_slices()->AddSlice(0, 0, utid, RefType::kRefUtid,
- cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(
+ 0, 0, track, utid, RefType::kRefUtid, cat_id, name_id, 0, 0, 0);
StringId arg_key_id = storage.InternString(base::StringView("a"));
StringId arg_value_id = storage.InternString(base::StringView("{\"b\":123}"));
@@ -598,12 +610,13 @@
const int64_t kTimestamp = 10000000;
const char* kCategory = "cat";
const char* kName = "name";
+ constexpr TrackId track = 22;
TraceStorage storage;
StringId cat_id = storage.InternString(base::StringView(kCategory));
StringId name_id = storage.InternString(base::StringView(kName));
storage.mutable_nestable_slices()->AddSlice(
- kTimestamp, 0, 0, RefType::kRefNoRef, cat_id, name_id, 0, 0, 0);
+ kTimestamp, 0, track, 0, RefType::kRefNoRef, cat_id, name_id, 0, 0, 0);
base::TempFile temp_file = base::TempFile::Create();
FILE* output = fopen(temp_file.path().c_str(), "w+");
@@ -643,8 +656,8 @@
TrackId track_id = storage.mutable_process_track_table()->Insert(track);
storage.mutable_nestable_slices()->AddSlice(kTimestamp, kDuration, track_id,
- RefType::kRefTrack, cat_id,
- name_id, 0, 0, 0);
+ track_id, RefType::kRefTrack,
+ cat_id, name_id, 0, 0, 0);
StringId arg_key_id = storage.InternString(base::StringView(kArgName));
TraceStorage::Args::Arg arg;
arg.flat_key = arg_key_id;
@@ -706,8 +719,8 @@
TrackId track_id = storage.mutable_process_track_table()->Insert(track);
auto slice_id = storage.mutable_nestable_slices()->AddSlice(
- kTimestamp, kDuration, track_id, RefType::kRefTrack, cat_id, name_id, 0,
- 0, 0);
+ kTimestamp, kDuration, track_id, track_id, RefType::kRefTrack, cat_id,
+ name_id, 0, 0, 0);
storage.mutable_virtual_track_slices()->AddVirtualTrackSlice(
slice_id, kThreadTimestamp, kThreadDuration, 0, 0);
@@ -763,8 +776,8 @@
TrackId track_id = storage.mutable_process_track_table()->Insert(track);
auto slice_id = storage.mutable_nestable_slices()->AddSlice(
- kTimestamp, kDuration, track_id, RefType::kRefTrack, cat_id, name_id, 0,
- 0, 0);
+ kTimestamp, kDuration, track_id, track_id, RefType::kRefTrack, cat_id,
+ name_id, 0, 0, 0);
storage.mutable_virtual_track_slices()->AddVirtualTrackSlice(
slice_id, kThreadTimestamp, kThreadDuration, 0, 0);
@@ -807,8 +820,9 @@
track.upid = upid;
TrackId track_id = storage.mutable_process_track_table()->Insert(track);
- storage.mutable_nestable_slices()->AddSlice(
- kTimestamp, 0, track_id, RefType::kRefTrack, cat_id, name_id, 0, 0, 0);
+ storage.mutable_nestable_slices()->AddSlice(kTimestamp, 0, track_id, track_id,
+ RefType::kRefTrack, cat_id,
+ name_id, 0, 0, 0);
StringId arg_key_id = storage.InternString(base::StringView("arg_name"));
TraceStorage::Args::Arg arg;
arg.flat_key = arg_key_id;