trace_processor: Migrate SystraceParser 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: Ib843c04ce77059f9f0783d8ffd692a78981f5099
diff --git a/src/trace_processor/importers/ftrace/ftrace_parser.cc b/src/trace_processor/importers/ftrace/ftrace_parser.cc
index 0d89512..7462e58 100644
--- a/src/trace_processor/importers/ftrace/ftrace_parser.cc
+++ b/src/trace_processor/importers/ftrace/ftrace_parser.cc
@@ -524,14 +524,14 @@
void FtraceParser::ParsePrint(int64_t ts, uint32_t pid, ConstBytes blob) {
protos::pbzero::PrintFtraceEvent::Decoder evt(blob.data, blob.size);
- context_->systrace_parser->ParsePrintEvent(ts, pid, evt.buf());
+ SystraceParser::GetOrCreate(context_)->ParsePrintEvent(ts, pid, evt.buf());
}
void FtraceParser::ParseZero(int64_t ts, uint32_t pid, ConstBytes blob) {
protos::pbzero::ZeroFtraceEvent::Decoder evt(blob.data, blob.size);
uint32_t tgid = static_cast<uint32_t>(evt.pid());
- context_->systrace_parser->ParseZeroEvent(ts, pid, evt.flag(), evt.name(),
- tgid, evt.value());
+ SystraceParser::GetOrCreate(context_)->ParseZeroEvent(
+ ts, pid, evt.flag(), evt.name(), tgid, evt.value());
}
void FtraceParser::ParseSdeTracingMarkWrite(int64_t ts,
@@ -545,7 +545,7 @@
}
uint32_t tgid = static_cast<uint32_t>(evt.pid());
- context_->systrace_parser->ParseSdeTracingMarkWrite(
+ SystraceParser::GetOrCreate(context_)->ParseSdeTracingMarkWrite(
ts, pid, static_cast<char>(evt.trace_type()), evt.trace_begin(),
evt.trace_name(), tgid, evt.value());
}
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 0bd7928..a2455ce 100644
--- a/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
+++ b/src/trace_processor/importers/proto/proto_trace_parser_unittest.cc
@@ -27,7 +27,6 @@
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/importers/proto/proto_trace_parser.h"
#include "src/trace_processor/importers/proto/track_event_module.h"
-#include "src/trace_processor/importers/systrace/systrace_parser.h"
#include "src/trace_processor/metadata.h"
#include "src/trace_processor/process_tracker.h"
#include "src/trace_processor/register_additional_modules.h"
@@ -243,7 +242,6 @@
context_.sorter.reset(new TraceSorter(&context_, 0 /*window size*/));
context_.parser.reset(new ProtoTraceParser(&context_));
#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
- context_.systrace_parser.reset(new SystraceParser(&context_));
context_.modules.emplace_back(new FtraceModuleImpl(&context_));
#else
context_.modules.emplace_back(new FtraceModule());
@@ -366,9 +364,6 @@
static const char buf_value[] = "This is a print event";
print->set_buf(buf_value);
- EXPECT_CALL(*storage_, InternString(base::StringView(task_newtask)))
- .Times(AtLeast(1));
- EXPECT_CALL(*storage_, InternString(base::StringView(buf_value)));
EXPECT_CALL(*process_, UpdateThread(123, 123));
Tokenize();
diff --git a/src/trace_processor/importers/systrace/systrace_parser.cc b/src/trace_processor/importers/systrace/systrace_parser.cc
index 41237d2..a22adeb 100644
--- a/src/trace_processor/importers/systrace/systrace_parser.cc
+++ b/src/trace_processor/importers/systrace/systrace_parser.cc
@@ -28,6 +28,8 @@
SystraceParser::SystraceParser(TraceProcessorContext* ctx)
: context_(ctx), lmk_id_(ctx->storage->InternString("mem.lmk")) {}
+SystraceParser::~SystraceParser() = default;
+
void SystraceParser::ParsePrintEvent(int64_t ts,
uint32_t pid,
base::StringView event) {
@@ -71,7 +73,7 @@
context_->storage->IncrementStats(stats::systrace_parse_failure);
return;
}
- context_->systrace_parser->ParseSystracePoint(ts, pid, point);
+ ParseSystracePoint(ts, pid, point);
}
void SystraceParser::ParseSdeTracingMarkWrite(int64_t ts,
@@ -95,7 +97,7 @@
return;
}
- context_->systrace_parser->ParseSystracePoint(ts, pid, point);
+ ParseSystracePoint(ts, pid, point);
}
void SystraceParser::ParseSystracePoint(
diff --git a/src/trace_processor/importers/systrace/systrace_parser.h b/src/trace_processor/importers/systrace/systrace_parser.h
index ef39bd3..97fd337 100644
--- a/src/trace_processor/importers/systrace/systrace_parser.h
+++ b/src/trace_processor/importers/systrace/systrace_parser.h
@@ -187,9 +187,15 @@
} // namespace systrace_utils
-class SystraceParser {
+class SystraceParser : public Destructible {
public:
- explicit SystraceParser(TraceProcessorContext*);
+ static SystraceParser* GetOrCreate(TraceProcessorContext* context) {
+ if (!context->systrace_parser) {
+ context->systrace_parser.reset(new SystraceParser(context));
+ }
+ return static_cast<SystraceParser*>(context->systrace_parser.get());
+ }
+ ~SystraceParser() override;
void ParsePrintEvent(int64_t ts, uint32_t pid, base::StringView event);
@@ -209,6 +215,7 @@
int64_t value);
private:
+ explicit SystraceParser(TraceProcessorContext*);
void ParseSystracePoint(int64_t ts,
uint32_t pid,
systrace_utils::SystraceTracePoint event);
diff --git a/src/trace_processor/importers/systrace/systrace_trace_parser.cc b/src/trace_processor/importers/systrace/systrace_trace_parser.cc
index e96c3ea..734c566 100644
--- a/src/trace_processor/importers/systrace/systrace_trace_parser.cc
+++ b/src/trace_processor/importers/systrace/systrace_trace_parser.cc
@@ -200,7 +200,8 @@
next_pid.value(), next_comm, next_prio.value());
} else if (event_name == "tracing_mark_write" || event_name == "0" ||
event_name == "print") {
- context_->systrace_parser->ParsePrintEvent(ts, pid, args_str.c_str());
+ SystraceParser::GetOrCreate(context_)->ParsePrintEvent(ts, pid,
+ args_str.c_str());
} else if (event_name == "sched_wakeup") {
auto comm = args["comm"];
base::Optional<uint32_t> wakee_pid = base::StringToUInt32(args["pid"]);
diff --git a/src/trace_processor/trace_processor_context.cc b/src/trace_processor/trace_processor_context.cc
index f794d11..8c2b946 100644
--- a/src/trace_processor/trace_processor_context.cc
+++ b/src/trace_processor/trace_processor_context.cc
@@ -26,7 +26,6 @@
#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"
-#include "src/trace_processor/importers/systrace/systrace_parser.h"
#include "src/trace_processor/process_tracker.h"
#include "src/trace_processor/slice_tracker.h"
#include "src/trace_processor/stack_profile_tracker.h"
diff --git a/src/trace_processor/trace_processor_context.h b/src/trace_processor/trace_processor_context.h
index 9334b91..3e7dc86 100644
--- a/src/trace_processor/trace_processor_context.h
+++ b/src/trace_processor/trace_processor_context.h
@@ -37,7 +37,6 @@
class HeapProfileTracker;
class ProcessTracker;
class SliceTracker;
-class SystraceParser;
class TraceParser;
class TraceSorter;
class TraceStorage;
@@ -61,7 +60,6 @@
std::unique_ptr<TraceSorter> sorter;
std::unique_ptr<ChunkedTraceReader> chunk_reader;
std::unique_ptr<HeapProfileTracker> heap_profile_tracker;
- std::unique_ptr<SystraceParser> systrace_parser;
std::unique_ptr<BinderTracker> binder_tracker;
// These fields are stored as pointers to Destructible objects rather than
@@ -71,6 +69,7 @@
// e.g. SyscallTracker::GetOrCreate(context).
std::unique_ptr<Destructible> syscall_tracker; // SyscallTracker
std::unique_ptr<Destructible> sched_tracker; // SchedEventTracker
+ std::unique_ptr<Destructible> systrace_parser; // SystraceParser
// 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 8f12f71..30d9405 100644
--- a/src/trace_processor/trace_processor_storage_impl.cc
+++ b/src/trace_processor/trace_processor_storage_impl.cc
@@ -27,7 +27,6 @@
#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"
-#include "src/trace_processor/importers/systrace/systrace_parser.h"
#include "src/trace_processor/importers/systrace/systrace_trace_parser.h"
#include "src/trace_processor/process_tracker.h"
#include "src/trace_processor/slice_tracker.h"
@@ -50,7 +49,6 @@
context_.clock_tracker.reset(new ClockTracker(&context_));
context_.heap_profile_tracker.reset(new HeapProfileTracker(&context_));
#if PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)
- context_.systrace_parser.reset(new SystraceParser(&context_));
context_.binder_tracker.reset(new BinderTracker(&context_));
#endif // PERFETTO_BUILDFLAG(PERFETTO_TP_FTRACE)