trace_processor: Migrate SchedEventTracker to the Destructible base
This is a step in modularization of trace processor aimed at building
two versions of trace processor with different set of modules at the
same time.
Bug: 141459049
Change-Id: I6b340067124c68aa17175cb0d3def7fd28ac83f6
diff --git a/src/trace_processor/event_tracker_unittest.cc b/src/trace_processor/event_tracker_unittest.cc
index 9fdedac..61968ab 100644
--- a/src/trace_processor/event_tracker_unittest.cc
+++ b/src/trace_processor/event_tracker_unittest.cc
@@ -40,12 +40,13 @@
context.event_tracker.reset(new EventTracker(&context));
context.track_tracker.reset(new TrackTracker(&context));
#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
- context.sched_tracker.reset(new SchedEventTracker(&context));
+ sched_tracker = SchedEventTracker::GetOrCreate(&context);
#endif // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
}
protected:
TraceProcessorContext context;
+ SchedEventTracker* sched_tracker;
};
#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
@@ -60,14 +61,12 @@
int32_t prio = 1024;
const auto& timestamps = context.storage->slices().start_ns();
- context.sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2,
- prio, prev_state, pid_2, kCommProc1,
- prio);
+ sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
ASSERT_EQ(timestamps.size(), 1u);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, pid_2, kCommProc1,
- prio, prev_state, pid_1, kCommProc2,
- prio);
+ sched_tracker->PushSchedSwitch(cpu, timestamp + 1, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
ASSERT_EQ(timestamps.size(), 2ul);
ASSERT_EQ(timestamps[0], timestamp);
@@ -88,20 +87,20 @@
int32_t prio = 1024;
const auto& timestamps = context.storage->slices().start_ns();
- context.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/4, kCommProc2,
- prio, prev_state,
- /*tid=*/2, kCommProc1, prio);
+ sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/4, kCommProc2, prio,
+ prev_state,
+ /*tid=*/2, kCommProc1, prio);
ASSERT_EQ(timestamps.size(), 1u);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/2,
- kCommProc1, prio, prev_state,
- /*tid=*/4, kCommProc2, prio);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 11, /*tid=*/4,
- kCommProc2, prio, prev_state,
- /*tid=*/2, kCommProc1, prio);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 31, /*tid=*/2,
- kCommProc1, prio, prev_state,
- /*tid=*/4, kCommProc2, prio);
+ 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(timestamps.size(), 4ul);
ASSERT_EQ(timestamps[0], timestamp);
diff --git a/src/trace_processor/importers/ftrace/ftrace_parser.cc b/src/trace_processor/importers/ftrace/ftrace_parser.cc
index d5e68ef..0d89512 100644
--- a/src/trace_processor/importers/ftrace/ftrace_parser.cc
+++ b/src/trace_processor/importers/ftrace/ftrace_parser.cc
@@ -188,20 +188,21 @@
const TimestampedTracePiece& ttp) {
using protos::pbzero::FtraceEvent;
int64_t ts = ttp.timestamp;
+ SchedEventTracker* sched_tracker = SchedEventTracker::GetOrCreate(context_);
// Handle the (optional) alternative encoding format for sched_switch.
if (ttp.inline_event.type == InlineEvent::Type::kSchedSwitch) {
const auto& event = ttp.inline_event.sched_switch;
- context_->sched_tracker->PushSchedSwitchCompact(
- cpu, ts, event.prev_state, static_cast<uint32_t>(event.next_pid),
- event.next_prio, event.next_comm);
+ sched_tracker->PushSchedSwitchCompact(cpu, ts, event.prev_state,
+ static_cast<uint32_t>(event.next_pid),
+ event.next_prio, event.next_comm);
return util::OkStatus();
}
// Handle the (optional) alternative encoding format for sched_waking.
if (ttp.inline_event.type == InlineEvent::Type::kSchedWaking) {
const auto& event = ttp.inline_event.sched_waking;
- context_->sched_tracker->PushSchedWakingCompact(
+ sched_tracker->PushSchedWakingCompact(
cpu, ts, static_cast<uint32_t>(event.pid), event.target_cpu, event.prio,
event.comm);
return util::OkStatus();
@@ -465,7 +466,7 @@
protos::pbzero::SchedSwitchFtraceEvent::Decoder ss(blob.data, blob.size);
uint32_t prev_pid = static_cast<uint32_t>(ss.prev_pid());
uint32_t next_pid = static_cast<uint32_t>(ss.next_pid());
- context_->sched_tracker->PushSchedSwitch(
+ SchedEventTracker::GetOrCreate(context_)->PushSchedSwitch(
cpu, ts, prev_pid, ss.prev_comm(), ss.prev_prio(), ss.prev_state(),
next_pid, ss.next_comm(), ss.next_prio());
}
diff --git a/src/trace_processor/importers/ftrace/sched_event_tracker.h b/src/trace_processor/importers/ftrace/sched_event_tracker.h
index 84ebd53..7a141ff 100644
--- a/src/trace_processor/importers/ftrace/sched_event_tracker.h
+++ b/src/trace_processor/importers/ftrace/sched_event_tracker.h
@@ -22,21 +22,29 @@
#include "perfetto/ext/base/string_view.h"
#include "perfetto/ext/base/utils.h"
+#include "src/trace_processor/destructible.h"
+#include "src/trace_processor/trace_processor_context.h"
#include "src/trace_processor/trace_storage.h"
namespace perfetto {
namespace trace_processor {
-class TraceProcessorContext;
class EventTracker;
// Tracks sched events and stores them into the storage as sched slices.
-class SchedEventTracker {
+class SchedEventTracker : public Destructible {
public:
+ // Declared public for testing only.
explicit SchedEventTracker(TraceProcessorContext*);
SchedEventTracker(const SchedEventTracker&) = delete;
SchedEventTracker& operator=(const SchedEventTracker&) = delete;
- virtual ~SchedEventTracker();
+ ~SchedEventTracker() override;
+ static SchedEventTracker* GetOrCreate(TraceProcessorContext* context) {
+ if (!context->sched_tracker) {
+ context->sched_tracker.reset(new SchedEventTracker(context));
+ }
+ return static_cast<SchedEventTracker*>(context->sched_tracker.get());
+ }
// This method is called when a sched_switch event is seen in the trace.
// Virtual for testing.
diff --git a/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc b/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
index 469a0cb..0bd7928 100644
--- a/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
+++ b/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
@@ -98,7 +98,6 @@
public:
MockSchedEventTracker(TraceProcessorContext* context)
: SchedEventTracker(context) {}
- virtual ~MockSchedEventTracker() = default;
MOCK_METHOD9(PushSchedSwitch,
void(uint32_t cpu,
diff --git a/src/trace_processor/importers/systrace/systrace_trace_parser.cc b/src/trace_processor/importers/systrace/systrace_trace_parser.cc
index 33d5cb1..e96c3ea 100644
--- a/src/trace_processor/importers/systrace/systrace_trace_parser.cc
+++ b/src/trace_processor/importers/systrace/systrace_trace_parser.cc
@@ -195,7 +195,7 @@
return util::Status("Could not parse sched_switch");
}
- context_->sched_tracker->PushSchedSwitch(
+ SchedEventTracker::GetOrCreate(context_)->PushSchedSwitch(
cpu, ts, prev_pid.value(), prev_comm, prev_prio.value(), prev_state,
next_pid.value(), next_comm, next_prio.value());
} else if (event_name == "tracing_mark_write" || event_name == "0" ||
diff --git a/src/trace_processor/process_tracker_unittest.cc b/src/trace_processor/process_tracker_unittest.cc
index ad971a5..1122a99 100644
--- a/src/trace_processor/process_tracker_unittest.cc
+++ b/src/trace_processor/process_tracker_unittest.cc
@@ -37,9 +37,6 @@
context.args_tracker.reset(new ArgsTracker(&context));
context.process_tracker.reset(new ProcessTracker(&context));
context.event_tracker.reset(new EventTracker(&context));
-#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
- context.sched_tracker.reset(new SchedEventTracker(&context));
-#endif // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
}
protected:
@@ -97,13 +94,14 @@
static const char kCommProc1[] = "process1";
static const char kCommProc2[] = "process2";
int32_t prio = 1024;
+ SchedEventTracker* sched_tracker = SchedEventTracker::GetOrCreate(&context);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1, kCommProc2,
- prio, prev_state,
- /*tid=*/4, kCommProc1, prio);
- context.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
- kCommProc1, prio, prev_state,
- /*tid=*/1, kCommProc2, prio);
+ 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);
diff --git a/src/trace_processor/sched_slice_table_unittest.cc b/src/trace_processor/sched_slice_table_unittest.cc
index 655033a..f9131ae 100644
--- a/src/trace_processor/sched_slice_table_unittest.cc
+++ b/src/trace_processor/sched_slice_table_unittest.cc
@@ -44,7 +44,7 @@
context_.args_tracker.reset(new ArgsTracker(&context_));
context_.process_tracker.reset(new ProcessTracker(&context_));
context_.event_tracker.reset(new EventTracker(&context_));
- context_.sched_tracker.reset(new SchedEventTracker(&context_));
+ sched_tracker_ = SchedEventTracker::GetOrCreate(&context_);
SchedSliceTable::RegisterTable(db_.get(), context_.storage.get());
}
@@ -61,6 +61,7 @@
TraceProcessorContext context_;
ScopedDb db_;
ScopedStmt stmt_;
+ SchedEventTracker* sched_tracker_;
};
TEST_F(SchedSliceTableTest, RowsReturnedInCorrectOrderWithinCpu) {
@@ -72,18 +73,14 @@
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
int32_t prio = 1024;
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2,
- prio, prev_state, pid_2, kCommProc1,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 3, pid_2, kCommProc1,
- prio, prev_state, pid_1, kCommProc2,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 4, pid_1, kCommProc2,
- prio, prev_state, pid_2, kCommProc1,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 10, pid_2,
- kCommProc1, prio, prev_state, pid_1,
- kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 3, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 4, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 10, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
PrepareValidStatement(
"SELECT dur, ts, cpu FROM sched where dur != 0 ORDER BY dur");
@@ -117,24 +114,18 @@
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
int32_t prio = 1024;
- context_.sched_tracker->PushSchedSwitch(cpu_3, timestamp - 2, pid_1,
- kCommProc2, prio, prev_state, pid_2,
- kCommProc1, prio);
- context_.sched_tracker->PushSchedSwitch(cpu_3, timestamp - 1, pid_2,
- kCommProc1, prio, prev_state, pid_1,
- kCommProc2, prio);
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp, pid_1, kCommProc2,
- prio, prev_state, pid_2, kCommProc1,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 3, pid_2,
- kCommProc1, prio, prev_state, pid_1,
- kCommProc2, prio);
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp + 4, pid_2,
- kCommProc1, prio, prev_state, pid_1,
- kCommProc2, prio);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 10, pid_1,
- kCommProc2, prio, prev_state, pid_2,
- kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu_3, timestamp - 2, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu_3, timestamp - 1, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu_1, timestamp, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu_2, timestamp + 3, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu_1, timestamp + 4, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu_2, timestamp + 10, pid_1, kCommProc2,
+ prio, prev_state, pid_2, kCommProc1, prio);
PrepareValidStatement(
"SELECT dur, ts, cpu FROM sched where dur != 0 ORDER BY dur desc");
@@ -167,18 +158,14 @@
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
int32_t prio = 1024;
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp, pid_1, kCommProc2,
- prio, prev_state, pid_2, kCommProc1,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 3, pid_2,
- kCommProc1, prio, prev_state, pid_1,
- kCommProc2, prio);
- context_.sched_tracker->PushSchedSwitch(cpu_1, timestamp + 4, pid_2,
- kCommProc1, prio, prev_state, pid_1,
- kCommProc2, prio);
- context_.sched_tracker->PushSchedSwitch(cpu_2, timestamp + 10, pid_1,
- kCommProc2, prio, prev_state, pid_2,
- kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu_1, timestamp, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu_2, timestamp + 3, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu_1, timestamp + 4, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu_2, timestamp + 10, pid_1, kCommProc2,
+ prio, prev_state, pid_2, kCommProc1, prio);
PrepareValidStatement(
"SELECT dur, ts, cpu FROM sched WHERE dur != 0 and cpu = 3");
@@ -200,18 +187,14 @@
static const char kCommProc2[] = "process2";
uint32_t pid_2 = 4;
int32_t prio = 1024;
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2,
- prio, prev_state, pid_2, kCommProc1,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 3, pid_2, kCommProc1,
- prio, prev_state, pid_1, kCommProc2,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 4, pid_1, kCommProc2,
- prio, prev_state, pid_2, kCommProc1,
- prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 10, pid_2,
- kCommProc1, prio, prev_state, pid_1,
- kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 3, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 4, pid_1, kCommProc2, prio,
+ prev_state, pid_2, kCommProc1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 10, pid_2, kCommProc1, prio,
+ prev_state, pid_1, kCommProc2, prio);
PrepareValidStatement("SELECT utid FROM sched where dur != 0 ORDER BY utid");
@@ -238,12 +221,12 @@
// Fill |cpu_5| and |cpu_7) with one sched switch per time unit starting,
// respectively, @ T=50 and T=70.
for (int64_t i = 0; i <= 11; i++) {
- context_.sched_tracker->PushSchedSwitch(cpu_5, 50 + i, pid_1, "pid_1", prio,
- prev_state, pid_1, "pid_1", prio);
+ sched_tracker_->PushSchedSwitch(cpu_5, 50 + i, pid_1, "pid_1", prio,
+ prev_state, pid_1, "pid_1", prio);
}
for (int64_t i = 0; i <= 11; i++) {
- context_.sched_tracker->PushSchedSwitch(cpu_7, 70 + i, pid_2, "pid_2", prio,
- prev_state, pid_2, "pid_2", prio);
+ sched_tracker_->PushSchedSwitch(cpu_7, 70 + i, pid_2, "pid_2", prio,
+ prev_state, pid_2, "pid_2", prio);
}
auto query = [this](const std::string& where_clauses) {
diff --git a/src/trace_processor/thread_table_unittest.cc b/src/trace_processor/thread_table_unittest.cc
index 6d5427c..03c6647 100644
--- a/src/trace_processor/thread_table_unittest.cc
+++ b/src/trace_processor/thread_table_unittest.cc
@@ -41,7 +41,7 @@
context_.args_tracker.reset(new ArgsTracker(&context_));
context_.process_tracker.reset(new ProcessTracker(&context_));
context_.event_tracker.reset(new EventTracker(&context_));
- context_.sched_tracker.reset(new SchedEventTracker(&context_));
+ sched_tracker_ = SchedEventTracker::GetOrCreate(&context_);
ThreadTable::RegisterTable(db_.get(), context_.storage.get());
ProcessTable::RegisterTable(db_.get(), context_.storage.get());
@@ -63,6 +63,7 @@
TraceProcessorContext context_;
ScopedDb db_;
ScopedStmt stmt_;
+ SchedEventTracker* sched_tracker_;
};
TEST_F(ThreadTableUnittest, Select) {
@@ -73,12 +74,12 @@
static const char kThreadName2[] = "thread2";
int32_t prio = 1024;
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1,
- kThreadName2, prio, prev_state,
- /*tid=*/4, kThreadName1, prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
- kThreadName1, prio, prev_state,
- /*tid=*/1, kThreadName2, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp, /*tid=*/1, kThreadName2, prio,
+ prev_state,
+ /*tid=*/4, kThreadName1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4, kThreadName1,
+ prio, prev_state,
+ /*tid=*/1, kThreadName2, prio);
context_.process_tracker->SetProcessMetadata(2, base::nullopt, "test");
context_.process_tracker->UpdateThread(4 /*tid*/, 2 /*pid*/);
@@ -101,15 +102,15 @@
static const char kThreadName2[] = "thread2";
int32_t prio = 1024;
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1,
- kThreadName2, prio, prev_state,
- /*tid=*/4, kThreadName1, prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
- kThreadName1, prio, prev_state,
- /*tid=*/1, kThreadName2, prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 2, /*tid=*/1,
- kThreadName2, prio, prev_state,
- /*tid=*/4, kThreadName1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp, /*tid=*/1, kThreadName2, prio,
+ prev_state,
+ /*tid=*/4, kThreadName1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4, kThreadName1,
+ prio, prev_state,
+ /*tid=*/1, kThreadName2, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 2, /*tid=*/1, kThreadName2,
+ prio, prev_state,
+ /*tid=*/4, kThreadName1, prio);
context_.process_tracker->SetProcessMetadata(2, base::nullopt, "test");
context_.process_tracker->UpdateThread(4 /*tid*/, 2 /*pid*/);
@@ -134,12 +135,12 @@
static const char kThreadName2[] = "thread2";
int32_t prio = 1024;
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp, /*tid=*/1,
- kThreadName2, prio, prev_state,
- /*tid=*/4, kThreadName1, prio);
- context_.sched_tracker->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4,
- kThreadName1, prio, prev_state,
- /*tid=*/1, kThreadName2, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp, /*tid=*/1, kThreadName2, prio,
+ prev_state,
+ /*tid=*/4, kThreadName1, prio);
+ sched_tracker_->PushSchedSwitch(cpu, timestamp + 1, /*tid=*/4, kThreadName1,
+ prio, prev_state,
+ /*tid=*/1, kThreadName2, prio);
// Also create a process for which we haven't seen any thread.
context_.process_tracker->SetProcessMetadata(7, base::nullopt, "pid7");
diff --git a/src/trace_processor/trace_processor_context.cc b/src/trace_processor/trace_processor_context.cc
index 01f876b..f794d11 100644
--- a/src/trace_processor/trace_processor_context.cc
+++ b/src/trace_processor/trace_processor_context.cc
@@ -23,7 +23,6 @@
#include "src/trace_processor/event_tracker.h"
#include "src/trace_processor/heap_profile_tracker.h"
#include "src/trace_processor/importers/ftrace/ftrace_module.h"
-#include "src/trace_processor/importers/ftrace/sched_event_tracker.h"
#include "src/trace_processor/importers/json/json_trace_parser.h"
#include "src/trace_processor/importers/proto/proto_trace_parser.h"
#include "src/trace_processor/importers/proto/track_event_module.h"
diff --git a/src/trace_processor/trace_processor_context.h b/src/trace_processor/trace_processor_context.h
index ee362f2..9334b91 100644
--- a/src/trace_processor/trace_processor_context.h
+++ b/src/trace_processor/trace_processor_context.h
@@ -36,7 +36,6 @@
class HeapGraphTracker;
class HeapProfileTracker;
class ProcessTracker;
-class SchedEventTracker;
class SliceTracker;
class SystraceParser;
class TraceParser;
@@ -57,7 +56,6 @@
std::unique_ptr<SliceTracker> slice_tracker;
std::unique_ptr<ProcessTracker> process_tracker;
std::unique_ptr<EventTracker> event_tracker;
- std::unique_ptr<SchedEventTracker> sched_tracker;
std::unique_ptr<ClockTracker> clock_tracker;
std::unique_ptr<TraceParser> parser;
std::unique_ptr<TraceSorter> sorter;
@@ -71,7 +69,8 @@
// type is only available in the storage_full target. To access these fields,
// use the GetOrCreate() method on their subclass type,
// e.g. SyscallTracker::GetOrCreate(context).
- std::unique_ptr<Destructible> syscall_tracker; // SyscallTracker.
+ std::unique_ptr<Destructible> syscall_tracker; // SyscallTracker
+ std::unique_ptr<Destructible> sched_tracker; // SchedEventTracker
// The module at the index N is registered to handle field id N in
// TracePacket.
diff --git a/src/trace_processor/trace_processor_storage_impl.cc b/src/trace_processor/trace_processor_storage_impl.cc
index 3e97bd0..8f12f71 100644
--- a/src/trace_processor/trace_processor_storage_impl.cc
+++ b/src/trace_processor/trace_processor_storage_impl.cc
@@ -24,7 +24,6 @@
#include "src/trace_processor/forwarding_trace_parser.h"
#include "src/trace_processor/heap_profile_tracker.h"
#include "src/trace_processor/importers/ftrace/ftrace_module.h"
-#include "src/trace_processor/importers/ftrace/sched_event_tracker.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/importers/proto/proto_trace_tokenizer.h"
#include "src/trace_processor/importers/proto/track_event_module.h"
@@ -51,7 +50,6 @@
context_.clock_tracker.reset(new ClockTracker(&context_));
context_.heap_profile_tracker.reset(new HeapProfileTracker(&context_));
#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
- context_.sched_tracker.reset(new SchedEventTracker(&context_));
context_.systrace_parser.reset(new SystraceParser(&context_));
context_.binder_tracker.reset(new BinderTracker(&context_));
#endif // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
@@ -95,7 +93,7 @@
if (context_.sorter)
context_.sorter->ExtractEventsForced();
#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
- context_.sched_tracker->FlushPendingEvents();
+ SchedEventTracker::GetOrCreate(&context_)->FlushPendingEvents();
#endif // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
context_.event_tracker->FlushPendingEvents();
context_.slice_tracker->FlushPendingSlices();