tp: add importers build file and create common target
Change-Id: I4e036b8abcf72cff019d9d2a4f530b09453bc3e2
diff --git a/Android.bp b/Android.bp
index d985dfd..68c2708 100644
--- a/Android.bp
+++ b/Android.bp
@@ -6457,6 +6457,31 @@
],
}
+// GN: //src/trace_processor/importers:common
+filegroup {
+ name: "perfetto_src_trace_processor_importers_common",
+ srcs: [
+ "src/trace_processor/importers/common/args_tracker.cc",
+ "src/trace_processor/importers/common/clock_tracker.cc",
+ "src/trace_processor/importers/common/event_tracker.cc",
+ "src/trace_processor/importers/common/global_args_tracker.cc",
+ "src/trace_processor/importers/common/process_tracker.cc",
+ "src/trace_processor/importers/common/slice_tracker.cc",
+ "src/trace_processor/importers/common/track_tracker.cc",
+ ],
+}
+
+// GN: //src/trace_processor/importers:unittests
+filegroup {
+ name: "perfetto_src_trace_processor_importers_unittests",
+ srcs: [
+ "src/trace_processor/importers/common/clock_tracker_unittest.cc",
+ "src/trace_processor/importers/common/event_tracker_unittest.cc",
+ "src/trace_processor/importers/common/process_tracker_unittest.cc",
+ "src/trace_processor/importers/common/slice_tracker_unittest.cc",
+ ],
+}
+
// GN: //src/trace_processor:lib
filegroup {
name: "perfetto_src_trace_processor_lib",
@@ -6557,13 +6582,6 @@
srcs: [
"src/trace_processor/default_modules.cc",
"src/trace_processor/forwarding_trace_parser.cc",
- "src/trace_processor/importers/common/args_tracker.cc",
- "src/trace_processor/importers/common/clock_tracker.cc",
- "src/trace_processor/importers/common/event_tracker.cc",
- "src/trace_processor/importers/common/global_args_tracker.cc",
- "src/trace_processor/importers/common/process_tracker.cc",
- "src/trace_processor/importers/common/slice_tracker.cc",
- "src/trace_processor/importers/common/track_tracker.cc",
"src/trace_processor/importers/ftrace/ftrace_module.cc",
"src/trace_processor/importers/gzip/gzip_utils.cc",
"src/trace_processor/importers/json/json_utils.cc",
@@ -6644,10 +6662,7 @@
srcs: [
"src/trace_processor/dynamic/experimental_counter_dur_generator_unittest.cc",
"src/trace_processor/forwarding_trace_parser_unittest.cc",
- "src/trace_processor/importers/common/clock_tracker_unittest.cc",
- "src/trace_processor/importers/common/event_tracker_unittest.cc",
- "src/trace_processor/importers/common/process_tracker_unittest.cc",
- "src/trace_processor/importers/common/slice_tracker_unittest.cc",
+ "src/trace_processor/importers/ftrace/sched_event_tracker_unittest.cc",
"src/trace_processor/importers/fuchsia/fuchsia_trace_utils_unittest.cc",
"src/trace_processor/importers/proto/args_table_utils_unittest.cc",
"src/trace_processor/importers/proto/heap_graph_tracker_unittest.cc",
@@ -7555,6 +7570,8 @@
":perfetto_src_trace_processor_db_unittests",
":perfetto_src_trace_processor_export_json",
":perfetto_src_trace_processor_ftrace_descriptors",
+ ":perfetto_src_trace_processor_importers_common",
+ ":perfetto_src_trace_processor_importers_unittests",
":perfetto_src_trace_processor_lib",
":perfetto_src_trace_processor_metrics_lib",
":perfetto_src_trace_processor_metrics_unittests",
@@ -7806,6 +7823,7 @@
":perfetto_src_trace_processor_db_lib",
":perfetto_src_trace_processor_export_json",
":perfetto_src_trace_processor_ftrace_descriptors",
+ ":perfetto_src_trace_processor_importers_common",
":perfetto_src_trace_processor_lib",
":perfetto_src_trace_processor_metrics_lib",
":perfetto_src_trace_processor_sqlite_sqlite",
@@ -7922,6 +7940,7 @@
":perfetto_src_trace_processor_db_lib",
":perfetto_src_trace_processor_export_json",
":perfetto_src_trace_processor_ftrace_descriptors",
+ ":perfetto_src_trace_processor_importers_common",
":perfetto_src_trace_processor_lib",
":perfetto_src_trace_processor_metrics_lib",
":perfetto_src_trace_processor_sqlite_sqlite",
diff --git a/BUILD b/BUILD
index 5080adb..e0d45cc 100644
--- a/BUILD
+++ b/BUILD
@@ -713,6 +713,27 @@
],
)
+# GN target: //src/trace_processor/importers:common
+filegroup(
+ name = "src_trace_processor_importers_common",
+ srcs = [
+ "src/trace_processor/importers/common/args_tracker.cc",
+ "src/trace_processor/importers/common/args_tracker.h",
+ "src/trace_processor/importers/common/clock_tracker.cc",
+ "src/trace_processor/importers/common/clock_tracker.h",
+ "src/trace_processor/importers/common/event_tracker.cc",
+ "src/trace_processor/importers/common/event_tracker.h",
+ "src/trace_processor/importers/common/global_args_tracker.cc",
+ "src/trace_processor/importers/common/global_args_tracker.h",
+ "src/trace_processor/importers/common/process_tracker.cc",
+ "src/trace_processor/importers/common/process_tracker.h",
+ "src/trace_processor/importers/common/slice_tracker.cc",
+ "src/trace_processor/importers/common/slice_tracker.h",
+ "src/trace_processor/importers/common/track_tracker.cc",
+ "src/trace_processor/importers/common/track_tracker.h",
+ ],
+)
+
genrule(
name = "src_trace_processor_metrics_gen_merged_sql_metrics",
srcs = [
@@ -987,20 +1008,6 @@
"src/trace_processor/default_modules.h",
"src/trace_processor/forwarding_trace_parser.cc",
"src/trace_processor/forwarding_trace_parser.h",
- "src/trace_processor/importers/common/args_tracker.cc",
- "src/trace_processor/importers/common/args_tracker.h",
- "src/trace_processor/importers/common/clock_tracker.cc",
- "src/trace_processor/importers/common/clock_tracker.h",
- "src/trace_processor/importers/common/event_tracker.cc",
- "src/trace_processor/importers/common/event_tracker.h",
- "src/trace_processor/importers/common/global_args_tracker.cc",
- "src/trace_processor/importers/common/global_args_tracker.h",
- "src/trace_processor/importers/common/process_tracker.cc",
- "src/trace_processor/importers/common/process_tracker.h",
- "src/trace_processor/importers/common/slice_tracker.cc",
- "src/trace_processor/importers/common/slice_tracker.h",
- "src/trace_processor/importers/common/track_tracker.cc",
- "src/trace_processor/importers/common/track_tracker.h",
"src/trace_processor/importers/ftrace/ftrace_module.cc",
"src/trace_processor/importers/ftrace/ftrace_module.h",
"src/trace_processor/importers/fuchsia/fuchsia_record.h",
@@ -2825,6 +2832,7 @@
":src_trace_processor_db_lib",
":src_trace_processor_export_json",
":src_trace_processor_ftrace_descriptors",
+ ":src_trace_processor_importers_common",
":src_trace_processor_lib",
":src_trace_processor_metrics_lib",
":src_trace_processor_sqlite_sqlite",
@@ -2914,6 +2922,7 @@
":src_trace_processor_db_lib",
":src_trace_processor_export_json",
":src_trace_processor_ftrace_descriptors",
+ ":src_trace_processor_importers_common",
":src_trace_processor_lib",
":src_trace_processor_metrics_lib",
":src_trace_processor_rpc_httpd",
@@ -3081,6 +3090,7 @@
":src_trace_processor_db_lib",
":src_trace_processor_export_json",
":src_trace_processor_ftrace_descriptors",
+ ":src_trace_processor_importers_common",
":src_trace_processor_lib",
":src_trace_processor_metrics_lib",
":src_trace_processor_sqlite_sqlite",
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index 1bbf36a..10a4a4f 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -65,20 +65,6 @@
"default_modules.h",
"forwarding_trace_parser.cc",
"forwarding_trace_parser.h",
- "importers/common/args_tracker.cc",
- "importers/common/args_tracker.h",
- "importers/common/clock_tracker.cc",
- "importers/common/clock_tracker.h",
- "importers/common/event_tracker.cc",
- "importers/common/event_tracker.h",
- "importers/common/global_args_tracker.cc",
- "importers/common/global_args_tracker.h",
- "importers/common/process_tracker.cc",
- "importers/common/process_tracker.h",
- "importers/common/slice_tracker.cc",
- "importers/common/slice_tracker.h",
- "importers/common/track_tracker.cc",
- "importers/common/track_tracker.h",
"importers/ftrace/ftrace_module.cc",
"importers/ftrace/ftrace_module.h",
"importers/fuchsia/fuchsia_record.h",
@@ -137,6 +123,7 @@
"../base",
"../protozero",
"containers",
+ "importers:common",
"storage",
"tables",
"types",
@@ -249,6 +236,7 @@
"../../protos/perfetto/trace/gpu:zero",
"../../protos/perfetto/trace/interned_data:zero",
"../protozero",
+ "importers:common",
"storage",
"types",
]
@@ -301,6 +289,7 @@
"../base",
"analysis",
"db:lib",
+ "importers:common",
"metrics:lib",
"sqlite",
"storage",
@@ -344,10 +333,7 @@
testonly = true
sources = [
"forwarding_trace_parser_unittest.cc",
- "importers/common/clock_tracker_unittest.cc",
- "importers/common/event_tracker_unittest.cc",
- "importers/common/process_tracker_unittest.cc",
- "importers/common/slice_tracker_unittest.cc",
+ "importers/ftrace/sched_event_tracker_unittest.cc",
"importers/fuchsia/fuchsia_trace_utils_unittest.cc",
"importers/proto/args_table_utils_unittest.cc",
"importers/proto/heap_graph_tracker_unittest.cc",
@@ -370,7 +356,6 @@
"../../protos/perfetto/trace/ftrace:zero",
"../../protos/perfetto/trace/gpu:zero",
"../../protos/perfetto/trace/interned_data:zero",
- "../../protos/perfetto/trace/profiling:zero",
"../../protos/perfetto/trace/ps:zero",
"../../protos/perfetto/trace/sys_stats:zero",
"../../protos/perfetto/trace/track_event:zero",
@@ -379,6 +364,8 @@
"../protozero:testing_messages_zero",
"containers:unittests",
"db:unittests",
+ "importers:common",
+ "importers:unittests",
"storage",
"tables:unittests",
"types",
diff --git a/src/trace_processor/importers/BUILD.gn b/src/trace_processor/importers/BUILD.gn
new file mode 100644
index 0000000..d3d8482
--- /dev/null
+++ b/src/trace_processor/importers/BUILD.gn
@@ -0,0 +1,61 @@
+# Copyright (C) 2020 The Android Open Source Project
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+
+import("../../../gn/perfetto.gni")
+
+source_set("common") {
+ sources = [
+ "common/args_tracker.cc",
+ "common/args_tracker.h",
+ "common/clock_tracker.cc",
+ "common/clock_tracker.h",
+ "common/event_tracker.cc",
+ "common/event_tracker.h",
+ "common/global_args_tracker.cc",
+ "common/global_args_tracker.h",
+ "common/process_tracker.cc",
+ "common/process_tracker.h",
+ "common/slice_tracker.cc",
+ "common/slice_tracker.h",
+ "common/track_tracker.cc",
+ "common/track_tracker.h",
+ ]
+ deps = [
+ "../../../gn:default_deps",
+ "../../../protos/perfetto/trace:zero",
+ "../../../protos/perfetto/trace/profiling:zero",
+ "../../base",
+ "../storage",
+ "../types",
+ ]
+}
+
+source_set("unittests") {
+ sources = [
+ "common/clock_tracker_unittest.cc",
+ "common/event_tracker_unittest.cc",
+ "common/process_tracker_unittest.cc",
+ "common/slice_tracker_unittest.cc",
+ ]
+ testonly = true
+ deps = [
+ ":common",
+ "../../../gn:default_deps",
+ "../../../gn:gtest_and_gmock",
+ "../../../protos/perfetto/trace:zero",
+ "../../base",
+ "../storage",
+ "../types",
+ ]
+}
diff --git a/src/trace_processor/importers/common/args_tracker.cc b/src/trace_processor/importers/common/args_tracker.cc
index a93c12a..c7a5b97 100644
--- a/src/trace_processor/importers/common/args_tracker.cc
+++ b/src/trace_processor/importers/common/args_tracker.cc
@@ -96,5 +96,9 @@
ArgsTracker::BoundInserter::~BoundInserter() {}
+ArgsTracker::BoundInserter::BoundInserter(BoundInserter&&) = default;
+ArgsTracker::BoundInserter& ArgsTracker::BoundInserter::operator=(
+ BoundInserter&&) = default;
+
} // namespace trace_processor
} // namespace perfetto
diff --git a/src/trace_processor/importers/common/args_tracker.h b/src/trace_processor/importers/common/args_tracker.h
index 327efed..ebcc8f9 100644
--- a/src/trace_processor/importers/common/args_tracker.h
+++ b/src/trace_processor/importers/common/args_tracker.h
@@ -38,6 +38,12 @@
public:
virtual ~BoundInserter();
+ BoundInserter(BoundInserter&&);
+ BoundInserter& operator=(BoundInserter&&);
+
+ BoundInserter(const BoundInserter&) = delete;
+ BoundInserter& operator=(const BoundInserter&) = delete;
+
// Adds an arg with the same key and flat_key.
BoundInserter& AddArg(
StringId key,
diff --git a/src/trace_processor/importers/common/event_tracker_unittest.cc b/src/trace_processor/importers/common/event_tracker_unittest.cc
index 081b40f..66fc899 100644
--- a/src/trace_processor/importers/common/event_tracker_unittest.cc
+++ b/src/trace_processor/importers/common/event_tracker_unittest.cc
@@ -20,7 +20,6 @@
#include "src/trace_processor/importers/common/args_tracker.h"
#include "src/trace_processor/importers/common/process_tracker.h"
#include "src/trace_processor/importers/common/track_tracker.h"
-#include "src/trace_processor/importers/ftrace/sched_event_tracker.h"
#include "test/gtest_and_gmock.h"
namespace perfetto {
@@ -40,78 +39,12 @@
context.process_tracker.reset(new ProcessTracker(&context));
context.event_tracker.reset(new EventTracker(&context));
context.track_tracker.reset(new TrackTracker(&context));
- sched_tracker = SchedEventTracker::GetOrCreate(&context);
}
protected:
TraceProcessorContext context;
- SchedEventTracker* sched_tracker;
};
-TEST_F(EventTrackerTest, InsertSecondSched) {
- uint32_t cpu = 3;
- int64_t timestamp = 100;
- uint32_t pid_1 = 2;
- int64_t prev_state = 32;
- static const char kCommProc1[] = "process1";
- static const char kCommProc2[] = "process2";
- uint32_t pid_2 = 4;
- int32_t prio = 1024;
-
- sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2, prio,
- prev_state, pid_2, kCommProc1, prio);
- ASSERT_EQ(context.storage->sched_slice_table().row_count(), 1ul);
-
- sched_tracker->PushSchedSwitch(cpu, timestamp + 1, pid_2, kCommProc1, prio,
- prev_state, pid_1, kCommProc2, prio);
-
- ASSERT_EQ(context.storage->sched_slice_table().row_count(), 2ul);
-
- const auto& timestamps = context.storage->sched_slice_table().ts();
- ASSERT_EQ(timestamps[0], timestamp);
- ASSERT_EQ(context.storage->thread_table().start_ts()[1], base::nullopt);
-
- auto name =
- context.storage->GetString(context.storage->thread_table().name()[1]);
- ASSERT_STREQ(name.c_str(), kCommProc1);
- ASSERT_EQ(context.storage->sched_slice_table().utid()[0], 1u);
- ASSERT_EQ(context.storage->sched_slice_table().dur()[0], 1);
-}
-
-TEST_F(EventTrackerTest, InsertThirdSched_SameThread) {
- uint32_t cpu = 3;
- int64_t timestamp = 100;
- int64_t prev_state = 32;
- static const char kCommProc1[] = "process1";
- static const char kCommProc2[] = "process2";
- int32_t prio = 1024;
-
- sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/4, kCommProc2, prio,
- prev_state,
- /*tid=*/2, kCommProc1, prio);
- ASSERT_EQ(context.storage->sched_slice_table().row_count(), 1u);
-
- sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/2, kCommProc1,
- prio, prev_state,
- /*tid=*/4, kCommProc2, prio);
- sched_tracker->PushSchedSwitch(cpu, timestamp + 11, /*tid=*/4, kCommProc2,
- prio, prev_state,
- /*tid=*/2, kCommProc1, prio);
- sched_tracker->PushSchedSwitch(cpu, timestamp + 31, /*tid=*/2, kCommProc1,
- prio, prev_state,
- /*tid=*/4, kCommProc2, prio);
- ASSERT_EQ(context.storage->sched_slice_table().row_count(), 4ul);
-
- const auto& timestamps = context.storage->sched_slice_table().ts();
- ASSERT_EQ(timestamps[0], timestamp);
- ASSERT_EQ(context.storage->thread_table().start_ts()[1], base::nullopt);
- ASSERT_EQ(context.storage->sched_slice_table().dur()[0], 1u);
- ASSERT_EQ(context.storage->sched_slice_table().dur()[1], 11u - 1u);
- ASSERT_EQ(context.storage->sched_slice_table().dur()[2], 31u - 11u);
- ASSERT_EQ(context.storage->sched_slice_table().utid()[0],
- context.storage->sched_slice_table().utid()[2]);
-}
-
TEST_F(EventTrackerTest, CounterDuration) {
uint32_t cpu = 3;
int64_t timestamp = 100;
diff --git a/src/trace_processor/importers/common/process_tracker_unittest.cc b/src/trace_processor/importers/common/process_tracker_unittest.cc
index 2f41cc1..f9bad28 100644
--- a/src/trace_processor/importers/common/process_tracker_unittest.cc
+++ b/src/trace_processor/importers/common/process_tracker_unittest.cc
@@ -19,7 +19,6 @@
#include "perfetto/base/logging.h"
#include "src/trace_processor/importers/common/args_tracker.h"
#include "src/trace_processor/importers/common/event_tracker.h"
-#include "src/trace_processor/importers/ftrace/sched_event_tracker.h"
#include "test/gtest_and_gmock.h"
namespace perfetto {
@@ -89,31 +88,6 @@
ASSERT_EQ(name, "test");
}
-TEST_F(ProcessTrackerTest, UpdateThreadMatch) {
- uint32_t cpu = 3;
- int64_t timestamp = 100;
- int64_t prev_state = 32;
- static const char kCommProc1[] = "process1";
- static const char kCommProc2[] = "process2";
- int32_t prio = 1024;
- SchedEventTracker* sched_tracker = SchedEventTracker::GetOrCreate(&context);
-
- sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, kCommProc2, prio,
- prev_state,
- /*tid=*/4, kCommProc1, prio);
- sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4, kCommProc1,
- prio, prev_state,
- /*tid=*/1, kCommProc2, prio);
-
- context.process_tracker->SetProcessMetadata(2, base::nullopt, "test");
- context.process_tracker->UpdateThread(4, 2);
-
- ASSERT_EQ(context.storage->thread_table().tid()[1], 4u);
- ASSERT_EQ(context.storage->thread_table().upid()[1].value(), 1u);
- ASSERT_EQ(context.storage->process_table().pid()[1], 2u);
- ASSERT_EQ(context.storage->process_table().start_ts()[1], base::nullopt);
-}
-
TEST_F(ProcessTrackerTest, UpdateThreadCreate) {
context.process_tracker->UpdateThread(12, 2);
diff --git a/src/trace_processor/importers/ftrace/sched_event_tracker_unittest.cc b/src/trace_processor/importers/ftrace/sched_event_tracker_unittest.cc
new file mode 100644
index 0000000..82363f9
--- /dev/null
+++ b/src/trace_processor/importers/ftrace/sched_event_tracker_unittest.cc
@@ -0,0 +1,139 @@
+/*
+ * Copyright (C) 2020 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "src/trace_processor/importers/ftrace/sched_event_tracker.h"
+
+#include "perfetto/base/logging.h"
+#include "src/trace_processor/importers/common/args_tracker.h"
+#include "src/trace_processor/importers/common/event_tracker.h"
+#include "src/trace_processor/importers/common/process_tracker.h"
+#include "test/gtest_and_gmock.h"
+
+namespace perfetto {
+namespace trace_processor {
+namespace {
+
+using ::testing::_;
+using ::testing::InSequence;
+using ::testing::Invoke;
+
+class SchedEventTrackerTest : public ::testing::Test {
+ public:
+ SchedEventTrackerTest() {
+ context.storage.reset(new TraceStorage());
+ context.global_args_tracker.reset(new GlobalArgsTracker(&context));
+ context.args_tracker.reset(new ArgsTracker(&context));
+ context.event_tracker.reset(new EventTracker(&context));
+ context.process_tracker.reset(new ProcessTracker(&context));
+ sched_tracker = SchedEventTracker::GetOrCreate(&context);
+ }
+
+ protected:
+ TraceProcessorContext context;
+ SchedEventTracker* sched_tracker;
+};
+
+TEST_F(SchedEventTrackerTest, InsertSecondSched) {
+ uint32_t cpu = 3;
+ int64_t timestamp = 100;
+ uint32_t pid_1 = 2;
+ int64_t prev_state = 32;
+ static const char kCommProc1[] = "process1";
+ static const char kCommProc2[] = "process2";
+ uint32_t pid_2 = 4;
+ int32_t prio = 1024;
+
+ sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ ASSERT_EQ(context.storage->sched_slice_table().row_count(), 1ul);
+
+ sched_tracker->PushSchedSwitch(cpu, timestamp + 1, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+
+ ASSERT_EQ(context.storage->sched_slice_table().row_count(), 2ul);
+
+ const auto& timestamps = context.storage->sched_slice_table().ts();
+ ASSERT_EQ(timestamps[0], timestamp);
+ ASSERT_EQ(context.storage->thread_table().start_ts()[1], base::nullopt);
+
+ auto name =
+ context.storage->GetString(context.storage->thread_table().name()[1]);
+ ASSERT_STREQ(name.c_str(), kCommProc1);
+ ASSERT_EQ(context.storage->sched_slice_table().utid()[0], 1u);
+ ASSERT_EQ(context.storage->sched_slice_table().dur()[0], 1);
+}
+
+TEST_F(SchedEventTrackerTest, InsertThirdSched_SameThread) {
+ uint32_t cpu = 3;
+ int64_t timestamp = 100;
+ int64_t prev_state = 32;
+ static const char kCommProc1[] = "process1";
+ static const char kCommProc2[] = "process2";
+ int32_t prio = 1024;
+
+ sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/4, kCommProc2, prio,
+ prev_state,
+ /*tid=*/2, kCommProc1, prio);
+ ASSERT_EQ(context.storage->sched_slice_table().row_count(), 1u);
+
+ sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/2, kCommProc1,
+ prio, prev_state,
+ /*tid=*/4, kCommProc2, prio);
+ sched_tracker->PushSchedSwitch(cpu, timestamp + 11, /*tid=*/4, kCommProc2,
+ prio, prev_state,
+ /*tid=*/2, kCommProc1, prio);
+ sched_tracker->PushSchedSwitch(cpu, timestamp + 31, /*tid=*/2, kCommProc1,
+ prio, prev_state,
+ /*tid=*/4, kCommProc2, prio);
+ ASSERT_EQ(context.storage->sched_slice_table().row_count(), 4ul);
+
+ const auto& timestamps = context.storage->sched_slice_table().ts();
+ ASSERT_EQ(timestamps[0], timestamp);
+ ASSERT_EQ(context.storage->thread_table().start_ts()[1], base::nullopt);
+ ASSERT_EQ(context.storage->sched_slice_table().dur()[0], 1u);
+ ASSERT_EQ(context.storage->sched_slice_table().dur()[1], 11u - 1u);
+ ASSERT_EQ(context.storage->sched_slice_table().dur()[2], 31u - 11u);
+ ASSERT_EQ(context.storage->sched_slice_table().utid()[0],
+ context.storage->sched_slice_table().utid()[2]);
+}
+
+TEST_F(SchedEventTrackerTest, UpdateThreadMatch) {
+ uint32_t cpu = 3;
+ int64_t timestamp = 100;
+ int64_t prev_state = 32;
+ static const char kCommProc1[] = "process1";
+ static const char kCommProc2[] = "process2";
+ int32_t prio = 1024;
+
+ sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, kCommProc2, prio,
+ prev_state,
+ /*tid=*/4, kCommProc1, prio);
+ sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4, kCommProc1,
+ prio, prev_state,
+ /*tid=*/1, kCommProc2, prio);
+
+ context.process_tracker->SetProcessMetadata(2, base::nullopt, "test");
+ context.process_tracker->UpdateThread(4, 2);
+
+ ASSERT_EQ(context.storage->thread_table().tid()[1], 4u);
+ ASSERT_EQ(context.storage->thread_table().upid()[1].value(), 1u);
+ ASSERT_EQ(context.storage->process_table().pid()[1], 2u);
+ ASSERT_EQ(context.storage->process_table().start_ts()[1], base::nullopt);
+}
+
+} // namespace
+} // namespace trace_processor
+} // namespace perfetto