aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCarlos Caballero Grolimund <carlscab@google.com>2024-05-08 08:35:53 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2024-05-08 08:35:53 +0000
commit8efcddd18907673565b6d36dd30b535754992dba (patch)
treeab7908b24fbfe431e29152a146a399a73c64b3b7
parentd592d5113a53639161b3ad6855c0e0a02c4e9ce0 (diff)
parent21e28b4ebab6d858f69a263f42663b1d7fcf74e6 (diff)
downloadperfetto-8efcddd18907673565b6d36dd30b535754992dba.tar.gz
Merge "Remove dependencies to PacketSequenceState" into main
-rw-r--r--src/trace_processor/importers/etw/BUILD.gn1
-rw-r--r--src/trace_processor/importers/etw/etw_module_impl.cc5
-rw-r--r--src/trace_processor/importers/etw/etw_module_impl.h3
-rw-r--r--src/trace_processor/importers/etw/etw_tokenizer.cc11
-rw-r--r--src/trace_processor/importers/etw/etw_tokenizer.h7
-rw-r--r--src/trace_processor/importers/ftrace/ftrace_module_impl.cc6
-rw-r--r--src/trace_processor/importers/ftrace/ftrace_module_impl.h3
-rw-r--r--src/trace_processor/importers/ftrace/ftrace_tokenizer.cc25
-rw-r--r--src/trace_processor/importers/ftrace/ftrace_tokenizer.h9
-rw-r--r--src/trace_processor/importers/proto/BUILD.gn3
-rw-r--r--src/trace_processor/importers/proto/android_camera_event_module.cc11
-rw-r--r--src/trace_processor/importers/proto/android_camera_event_module.h3
-rw-r--r--src/trace_processor/importers/proto/android_probes_module.cc6
-rw-r--r--src/trace_processor/importers/proto/android_probes_module.h3
-rw-r--r--src/trace_processor/importers/proto/metadata_minimal_module.cc3
-rw-r--r--src/trace_processor/importers/proto/metadata_minimal_module.h3
-rw-r--r--src/trace_processor/importers/proto/metadata_module.cc3
-rw-r--r--src/trace_processor/importers/proto/metadata_module.h3
-rw-r--r--src/trace_processor/importers/proto/network_trace_module.cc14
-rw-r--r--src/trace_processor/importers/proto/network_trace_module.h11
-rw-r--r--src/trace_processor/importers/proto/packet_sequence_state.h11
-rw-r--r--src/trace_processor/importers/proto/packet_sequence_state_generation.cc42
-rw-r--r--src/trace_processor/importers/proto/packet_sequence_state_generation.h37
-rw-r--r--src/trace_processor/importers/proto/profile_module.cc36
-rw-r--r--src/trace_processor/importers/proto/profile_module.h8
-rw-r--r--src/trace_processor/importers/proto/profile_packet_sequence_state.cc1
-rw-r--r--src/trace_processor/importers/proto/profile_packet_utils.h1
-rw-r--r--src/trace_processor/importers/proto/proto_importer_module.cc4
-rw-r--r--src/trace_processor/importers/proto/proto_importer_module.h4
-rw-r--r--src/trace_processor/importers/proto/proto_trace_parser_impl.cc1
-rw-r--r--src/trace_processor/importers/proto/proto_trace_reader.cc6
-rw-r--r--src/trace_processor/importers/proto/stack_profile_sequence_state.cc4
-rw-r--r--src/trace_processor/importers/proto/statsd_module.cc19
-rw-r--r--src/trace_processor/importers/proto/statsd_module.h3
-rw-r--r--src/trace_processor/importers/proto/system_probes_module.cc3
-rw-r--r--src/trace_processor/importers/proto/system_probes_module.h3
-rw-r--r--src/trace_processor/importers/proto/track_event_module.cc12
-rw-r--r--src/trace_processor/importers/proto/track_event_module.h4
-rw-r--r--src/trace_processor/importers/proto/track_event_parser.cc23
-rw-r--r--src/trace_processor/importers/proto/track_event_tokenizer.cc29
-rw-r--r--src/trace_processor/importers/proto/track_event_tokenizer.h12
-rw-r--r--src/trace_processor/importers/proto/translation_table_module.cc3
-rw-r--r--src/trace_processor/importers/proto/translation_table_module.h3
-rw-r--r--src/trace_processor/importers/proto/v8_module.cc12
-rw-r--r--src/trace_processor/importers/proto/v8_module.h3
45 files changed, 245 insertions, 172 deletions
diff --git a/src/trace_processor/importers/etw/BUILD.gn b/src/trace_processor/importers/etw/BUILD.gn
index 23d8965fd..5e14c2fe6 100644
--- a/src/trace_processor/importers/etw/BUILD.gn
+++ b/src/trace_processor/importers/etw/BUILD.gn
@@ -51,6 +51,7 @@ source_set("full") {
"../common:parser_types",
"../i2c:full",
"../proto:minimal",
+ "../proto:packet_sequence_state_generation_hdr",
"../syscalls:full",
]
}
diff --git a/src/trace_processor/importers/etw/etw_module_impl.cc b/src/trace_processor/importers/etw/etw_module_impl.cc
index 7c44d049e..6da884fbb 100644
--- a/src/trace_processor/importers/etw/etw_module_impl.cc
+++ b/src/trace_processor/importers/etw/etw_module_impl.cc
@@ -20,6 +20,7 @@
#include "src/trace_processor/importers/etw/etw_tokenizer.h"
#include "protos/perfetto/trace/trace_packet.pbzero.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
namespace perfetto {
namespace trace_processor {
@@ -35,13 +36,13 @@ ModuleResult EtwModuleImpl::TokenizePacket(
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t /*packet_timestamp*/,
- PacketSequenceState* seq_state,
+ RefPtr<PacketSequenceStateGeneration> seq_state,
uint32_t field_id) {
switch (field_id) {
case TracePacket::kEtwEventsFieldNumber: {
auto etw_field = decoder.etw_events();
tokenizer_.TokenizeEtwBundle(
- packet->slice(etw_field.data, etw_field.size), seq_state);
+ packet->slice(etw_field.data, etw_field.size), std::move(seq_state));
return ModuleResult::Handled();
}
}
diff --git a/src/trace_processor/importers/etw/etw_module_impl.h b/src/trace_processor/importers/etw/etw_module_impl.h
index af05fc8aa..4a27846f4 100644
--- a/src/trace_processor/importers/etw/etw_module_impl.h
+++ b/src/trace_processor/importers/etw/etw_module_impl.h
@@ -21,6 +21,7 @@
#include "src/trace_processor/importers/etw/etw_module.h"
#include "src/trace_processor/importers/etw/etw_parser.h"
#include "src/trace_processor/importers/etw/etw_tokenizer.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "protos/perfetto/trace/trace_packet.pbzero.h"
@@ -38,7 +39,7 @@ class EtwModuleImpl : public EtwModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseEtwEventData(uint32_t cpu,
diff --git a/src/trace_processor/importers/etw/etw_tokenizer.cc b/src/trace_processor/importers/etw/etw_tokenizer.cc
index 2474454b3..e3b4a747b 100644
--- a/src/trace_processor/importers/etw/etw_tokenizer.cc
+++ b/src/trace_processor/importers/etw/etw_tokenizer.cc
@@ -22,7 +22,7 @@
#include "perfetto/ext/base/status_or.h"
#include "perfetto/protozero/proto_decoder.h"
#include "perfetto/protozero/proto_utils.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/sorter/trace_sorter.h"
#include "src/trace_processor/storage/trace_storage.h"
@@ -41,8 +41,9 @@ using protos::pbzero::BuiltinClock;
using protos::pbzero::EtwTraceEventBundle;
PERFETTO_ALWAYS_INLINE
-base::Status EtwTokenizer::TokenizeEtwBundle(TraceBlobView bundle,
- PacketSequenceState* state) {
+base::Status EtwTokenizer::TokenizeEtwBundle(
+ TraceBlobView bundle,
+ RefPtr<PacketSequenceStateGeneration> state) {
protos::pbzero::EtwTraceEventBundle::Decoder decoder(bundle.data(),
bundle.length());
// Cpu id can either be in the etw bundle or inside the individual
@@ -61,7 +62,7 @@ PERFETTO_ALWAYS_INLINE
base::Status EtwTokenizer::TokenizeEtwEvent(
std::optional<uint32_t> fallback_cpu,
TraceBlobView event,
- PacketSequenceState* state) {
+ RefPtr<PacketSequenceStateGeneration> state) {
const uint8_t* data = event.data();
const size_t length = event.length();
ProtoDecoder decoder(data, length);
@@ -104,7 +105,7 @@ base::Status EtwTokenizer::TokenizeEtwEvent(
}
context_->sorter->PushEtwEvent(cpu, *timestamp, std::move(event),
- state->current_generation());
+ std::move(state));
return base::OkStatus();
}
diff --git a/src/trace_processor/importers/etw/etw_tokenizer.h b/src/trace_processor/importers/etw/etw_tokenizer.h
index 6447ed2f7..028346824 100644
--- a/src/trace_processor/importers/etw/etw_tokenizer.h
+++ b/src/trace_processor/importers/etw/etw_tokenizer.h
@@ -21,6 +21,7 @@
#include "perfetto/base/status.h"
#include "perfetto/trace_processor/trace_blob_view.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/storage/trace_storage.h"
#include "src/trace_processor/types/trace_processor_context.h"
@@ -29,19 +30,17 @@
namespace perfetto {
namespace trace_processor {
-class PacketSequenceState;
-
class EtwTokenizer {
public:
explicit EtwTokenizer(TraceProcessorContext* context) : context_(context) {}
base::Status TokenizeEtwBundle(TraceBlobView bundle,
- PacketSequenceState* state);
+ RefPtr<PacketSequenceStateGeneration> state);
private:
base::Status TokenizeEtwEvent(std::optional<uint32_t> fallback_cpu,
TraceBlobView event,
- PacketSequenceState* state);
+ RefPtr<PacketSequenceStateGeneration> state);
TraceProcessorContext* context_;
};
diff --git a/src/trace_processor/importers/ftrace/ftrace_module_impl.cc b/src/trace_processor/importers/ftrace/ftrace_module_impl.cc
index bd67c644d..0858fa1ba 100644
--- a/src/trace_processor/importers/ftrace/ftrace_module_impl.cc
+++ b/src/trace_processor/importers/ftrace/ftrace_module_impl.cc
@@ -38,14 +38,14 @@ ModuleResult FtraceModuleImpl::TokenizePacket(
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t /*packet_timestamp*/,
- PacketSequenceState* seq_state,
+ RefPtr<PacketSequenceStateGeneration> seq_state,
uint32_t field_id) {
switch (field_id) {
case TracePacket::kFtraceEventsFieldNumber: {
auto ftrace_field = decoder.ftrace_events();
return tokenizer_.TokenizeFtraceBundle(
- packet->slice(ftrace_field.data, ftrace_field.size), seq_state,
- decoder.trusted_packet_sequence_id());
+ packet->slice(ftrace_field.data, ftrace_field.size),
+ std::move(seq_state), decoder.trusted_packet_sequence_id());
}
case TracePacket::kFtraceStatsFieldNumber: {
return parser_.ParseFtraceStats(decoder.ftrace_stats(),
diff --git a/src/trace_processor/importers/ftrace/ftrace_module_impl.h b/src/trace_processor/importers/ftrace/ftrace_module_impl.h
index 658bafc84..d6df0f9dc 100644
--- a/src/trace_processor/importers/ftrace/ftrace_module_impl.h
+++ b/src/trace_processor/importers/ftrace/ftrace_module_impl.h
@@ -22,6 +22,7 @@
#include "src/trace_processor/importers/ftrace/ftrace_module.h"
#include "src/trace_processor/importers/ftrace/ftrace_parser.h"
#include "src/trace_processor/importers/ftrace/ftrace_tokenizer.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
namespace perfetto {
@@ -37,7 +38,7 @@ class FtraceModuleImpl : public FtraceModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseFtraceEventData(uint32_t cpu,
diff --git a/src/trace_processor/importers/ftrace/ftrace_tokenizer.cc b/src/trace_processor/importers/ftrace/ftrace_tokenizer.cc
index cf38ac29d..00656fa66 100644
--- a/src/trace_processor/importers/ftrace/ftrace_tokenizer.cc
+++ b/src/trace_processor/importers/ftrace/ftrace_tokenizer.cc
@@ -23,7 +23,6 @@
#include "perfetto/trace_processor/basic_types.h"
#include "src/trace_processor/importers/common/machine_tracker.h"
#include "src/trace_processor/importers/common/metadata_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
#include "src/trace_processor/sorter/trace_sorter.h"
#include "src/trace_processor/storage/metadata.h"
#include "src/trace_processor/storage/stats.h"
@@ -107,7 +106,7 @@ uint64_t TryFastParseFtraceEventId(const uint8_t* start, const uint8_t* end) {
PERFETTO_ALWAYS_INLINE
base::Status FtraceTokenizer::TokenizeFtraceBundle(
TraceBlobView bundle,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t packet_sequence_id) {
protos::pbzero::FtraceEventBundle::Decoder decoder(bundle.data(),
bundle.length());
@@ -204,10 +203,11 @@ base::Status FtraceTokenizer::TokenizeFtraceBundle(
}
PERFETTO_ALWAYS_INLINE
-void FtraceTokenizer::TokenizeFtraceEvent(uint32_t cpu,
- ClockTracker::ClockId clock_id,
- TraceBlobView event,
- PacketSequenceState* state) {
+void FtraceTokenizer::TokenizeFtraceEvent(
+ uint32_t cpu,
+ ClockTracker::ClockId clock_id,
+ TraceBlobView event,
+ RefPtr<PacketSequenceStateGeneration> state) {
constexpr auto kTimestampFieldNumber =
protos::pbzero::FtraceEvent::kTimestampFieldNumber;
constexpr auto kTimestampFieldTag = MakeTagVarInt(kTimestampFieldNumber);
@@ -281,8 +281,7 @@ void FtraceTokenizer::TokenizeFtraceEvent(uint32_t cpu,
}
context_->sorter->PushFtraceEvent(cpu, *timestamp, std::move(event),
- state->current_generation(),
- context_->machine_id());
+ std::move(state), context_->machine_id());
}
PERFETTO_ALWAYS_INLINE
@@ -427,9 +426,10 @@ void FtraceTokenizer::HandleFtraceClockSnapshot(int64_t ftrace_ts,
boot_ts)});
}
-void FtraceTokenizer::TokenizeFtraceGpuWorkPeriod(uint32_t cpu,
- TraceBlobView event,
- PacketSequenceState* state) {
+void FtraceTokenizer::TokenizeFtraceGpuWorkPeriod(
+ uint32_t cpu,
+ TraceBlobView event,
+ RefPtr<PacketSequenceStateGeneration> state) {
// Special handling of valid gpu_work_period tracepoint events which contain
// timestamp values for the GPU time period nested inside the event data.
const uint8_t* data = event.data();
@@ -465,8 +465,7 @@ void FtraceTokenizer::TokenizeFtraceGpuWorkPeriod(uint32_t cpu,
}
context_->sorter->PushFtraceEvent(cpu, *timestamp, std::move(event),
- state->current_generation(),
- context_->machine_id());
+ std::move(state), context_->machine_id());
}
} // namespace trace_processor
diff --git a/src/trace_processor/importers/ftrace/ftrace_tokenizer.h b/src/trace_processor/importers/ftrace/ftrace_tokenizer.h
index 915ee9c88..d53504efe 100644
--- a/src/trace_processor/importers/ftrace/ftrace_tokenizer.h
+++ b/src/trace_processor/importers/ftrace/ftrace_tokenizer.h
@@ -21,6 +21,7 @@
#include "perfetto/trace_processor/trace_blob_view.h"
#include "src/trace_processor/importers/common/clock_tracker.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/storage/trace_storage.h"
#include "src/trace_processor/types/trace_processor_context.h"
@@ -29,22 +30,20 @@
namespace perfetto {
namespace trace_processor {
-class PacketSequenceState;
-
class FtraceTokenizer {
public:
explicit FtraceTokenizer(TraceProcessorContext* context)
: context_(context) {}
base::Status TokenizeFtraceBundle(TraceBlobView bundle,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration>,
uint32_t packet_sequence_id);
private:
void TokenizeFtraceEvent(uint32_t cpu,
ClockTracker::ClockId,
TraceBlobView event,
- PacketSequenceState* state);
+ RefPtr<PacketSequenceStateGeneration> state);
void TokenizeFtraceCompactSched(uint32_t cpu,
ClockTracker::ClockId,
protozero::ConstBytes);
@@ -64,7 +63,7 @@ class FtraceTokenizer {
uint32_t packet_sequence_id);
void TokenizeFtraceGpuWorkPeriod(uint32_t cpu,
TraceBlobView event,
- PacketSequenceState* state);
+ RefPtr<PacketSequenceStateGeneration> state);
void DlogWithLimit(const base::Status& status) {
static std::atomic<uint32_t> dlog_count(0);
diff --git a/src/trace_processor/importers/proto/BUILD.gn b/src/trace_processor/importers/proto/BUILD.gn
index 9930ea558..18a617af5 100644
--- a/src/trace_processor/importers/proto/BUILD.gn
+++ b/src/trace_processor/importers/proto/BUILD.gn
@@ -72,6 +72,7 @@ source_set("minimal") {
deps = [
":packet_sequence_state_generation_hdr",
"../../../../gn:default_deps",
+ "../../../../include/perfetto/trace_processor:trace_processor",
"../../../../protos/perfetto/common:zero",
"../../../../protos/perfetto/config:zero",
"../../../../protos/perfetto/trace:zero",
@@ -201,7 +202,9 @@ source_set("proto_importer_module") {
"proto_importer_module.h",
]
deps = [
+ ":packet_sequence_state_generation_hdr",
"../../../../gn:default_deps",
+ "../../../../include/perfetto/trace_processor:trace_processor",
"../../../base",
"../../types",
"../common:trace_parser_hdr",
diff --git a/src/trace_processor/importers/proto/android_camera_event_module.cc b/src/trace_processor/importers/proto/android_camera_event_module.cc
index 5c7722a06..60ec66123 100644
--- a/src/trace_processor/importers/proto/android_camera_event_module.cc
+++ b/src/trace_processor/importers/proto/android_camera_event_module.cc
@@ -17,17 +17,18 @@
#include "src/trace_processor/importers/proto/android_camera_event_module.h"
#include "perfetto/ext/base/string_utils.h"
-#include "protos/perfetto/trace/android/camera_event.pbzero.h"
-#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "src/trace_processor/importers/common/async_track_set_tracker.h"
#include "src/trace_processor/importers/common/machine_tracker.h"
#include "src/trace_processor/importers/common/parser_types.h"
#include "src/trace_processor/importers/common/slice_tracker.h"
#include "src/trace_processor/importers/common/track_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/sorter/trace_sorter.h"
#include "src/trace_processor/storage/trace_storage.h"
+#include "protos/perfetto/trace/android/camera_event.pbzero.h"
+#include "protos/perfetto/trace/trace_packet.pbzero.h"
+
namespace perfetto {
namespace trace_processor {
@@ -45,7 +46,7 @@ ModuleResult AndroidCameraEventModule::TokenizePacket(
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t /*packet_timestamp*/,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) {
if (field_id != TracePacket::kAndroidCameraFrameEventFieldNumber) {
return ModuleResult::Ignored();
@@ -55,7 +56,7 @@ ModuleResult AndroidCameraEventModule::TokenizePacket(
decoder.android_camera_frame_event());
context_->sorter->PushTracePacket(
android_camera_frame_event.request_processing_started_ns(),
- state->current_generation(), std::move(*packet), context_->machine_id());
+ std::move(state), std::move(*packet), context_->machine_id());
return ModuleResult::Handled();
}
diff --git a/src/trace_processor/importers/proto/android_camera_event_module.h b/src/trace_processor/importers/proto/android_camera_event_module.h
index e9df6c469..03f8476b8 100644
--- a/src/trace_processor/importers/proto/android_camera_event_module.h
+++ b/src/trace_processor/importers/proto/android_camera_event_module.h
@@ -23,6 +23,7 @@
#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "src/trace_processor/importers/common/parser_types.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/tables/sched_tables_py.h"
#include "src/trace_processor/tables/slice_tables_py.h"
@@ -42,7 +43,7 @@ class AndroidCameraEventModule : public ProtoImporterModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket::Decoder& decoder,
diff --git a/src/trace_processor/importers/proto/android_probes_module.cc b/src/trace_processor/importers/proto/android_probes_module.cc
index 02dcfe771..31f51dc6a 100644
--- a/src/trace_processor/importers/proto/android_probes_module.cc
+++ b/src/trace_processor/importers/proto/android_probes_module.cc
@@ -23,7 +23,7 @@
#include "src/trace_processor/importers/common/track_tracker.h"
#include "src/trace_processor/importers/proto/android_probes_parser.h"
#include "src/trace_processor/importers/proto/android_probes_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/sorter/trace_sorter.h"
#include "protos/perfetto/common/android_energy_consumer_descriptor.pbzero.h"
@@ -104,7 +104,7 @@ ModuleResult AndroidProbesModule::TokenizePacket(
const protos::pbzero::TracePacket_Decoder&,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) {
protos::pbzero::TracePacket::Decoder decoder(packet->data(),
packet->length());
@@ -193,7 +193,7 @@ ModuleResult AndroidProbesModule::TokenizePacket(
std::vector<uint8_t> vec = data_packet.SerializeAsArray();
TraceBlob blob = TraceBlob::CopyFrom(vec.data(), vec.size());
- context_->sorter->PushTracePacket(actual_ts, state->current_generation(),
+ context_->sorter->PushTracePacket(actual_ts, state,
TraceBlobView(std::move(blob)),
context_->machine_id());
}
diff --git a/src/trace_processor/importers/proto/android_probes_module.h b/src/trace_processor/importers/proto/android_probes_module.h
index 6b3d8cf89..1f45cbb65 100644
--- a/src/trace_processor/importers/proto/android_probes_module.h
+++ b/src/trace_processor/importers/proto/android_probes_module.h
@@ -19,6 +19,7 @@
#include "perfetto/base/build_config.h"
#include "src/trace_processor/importers/proto/android_probes_parser.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "protos/perfetto/config/trace_config.pbzero.h"
@@ -34,7 +35,7 @@ class AndroidProbesModule : public ProtoImporterModule {
ModuleResult TokenizePacket(const protos::pbzero::TracePacket_Decoder&,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration>,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket_Decoder& decoder,
diff --git a/src/trace_processor/importers/proto/metadata_minimal_module.cc b/src/trace_processor/importers/proto/metadata_minimal_module.cc
index 691127586..dd0127f14 100644
--- a/src/trace_processor/importers/proto/metadata_minimal_module.cc
+++ b/src/trace_processor/importers/proto/metadata_minimal_module.cc
@@ -19,6 +19,7 @@
#include "perfetto/ext/base/base64.h"
#include "perfetto/ext/base/string_utils.h"
#include "src/trace_processor/importers/common/metadata_tracker.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/types/trace_processor_context.h"
#include "protos/perfetto/trace/chrome/chrome_benchmark_metadata.pbzero.h"
@@ -39,7 +40,7 @@ ModuleResult MetadataMinimalModule::TokenizePacket(
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView*,
int64_t,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration>,
uint32_t field_id) {
switch (field_id) {
case TracePacket::kChromeMetadataFieldNumber: {
diff --git a/src/trace_processor/importers/proto/metadata_minimal_module.h b/src/trace_processor/importers/proto/metadata_minimal_module.h
index 3ffdf62f1..80c131bd8 100644
--- a/src/trace_processor/importers/proto/metadata_minimal_module.h
+++ b/src/trace_processor/importers/proto/metadata_minimal_module.h
@@ -18,6 +18,7 @@
#define SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_METADATA_MINIMAL_MODULE_H_
#include "src/trace_processor/importers/common/trace_parser.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/storage/trace_storage.h"
@@ -36,7 +37,7 @@ class MetadataMinimalModule : public ProtoImporterModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
private:
diff --git a/src/trace_processor/importers/proto/metadata_module.cc b/src/trace_processor/importers/proto/metadata_module.cc
index 86cc72b71..96bd01768 100644
--- a/src/trace_processor/importers/proto/metadata_module.cc
+++ b/src/trace_processor/importers/proto/metadata_module.cc
@@ -23,6 +23,7 @@
#include "src/trace_processor/importers/common/slice_tracker.h"
#include "src/trace_processor/importers/common/track_tracker.h"
#include "src/trace_processor/importers/proto/config.descriptor.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/util/descriptors.h"
#include "src/trace_processor/util/protozero_to_text.h"
@@ -52,7 +53,7 @@ ModuleResult MetadataModule::TokenizePacket(
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView*,
int64_t,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration>,
uint32_t field_id) {
switch (field_id) {
case TracePacket::kUiStateFieldNumber: {
diff --git a/src/trace_processor/importers/proto/metadata_module.h b/src/trace_processor/importers/proto/metadata_module.h
index 31cbd4259..001493673 100644
--- a/src/trace_processor/importers/proto/metadata_module.h
+++ b/src/trace_processor/importers/proto/metadata_module.h
@@ -18,6 +18,7 @@
#define SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_METADATA_MODULE_H_
#include "src/trace_processor/importers/common/trace_parser.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "protos/perfetto/trace/trace_packet.pbzero.h"
@@ -35,7 +36,7 @@ class MetadataModule : public ProtoImporterModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket::Decoder& decoder,
diff --git a/src/trace_processor/importers/proto/network_trace_module.cc b/src/trace_processor/importers/proto/network_trace_module.cc
index 01c949463..dda8f7074 100644
--- a/src/trace_processor/importers/proto/network_trace_module.cc
+++ b/src/trace_processor/importers/proto/network_trace_module.cc
@@ -21,7 +21,7 @@
#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "src/trace_processor/importers/common/async_track_set_tracker.h"
#include "src/trace_processor/importers/common/slice_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/sorter/trace_sorter.h"
#include "src/trace_processor/storage/trace_storage.h"
#include "src/trace_processor/types/tcp_state.h"
@@ -78,18 +78,17 @@ ModuleResult NetworkTraceModule::TokenizePacket(
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView*,
int64_t ts,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) {
if (field_id != TracePacket::kNetworkPacketBundleFieldNumber) {
return ModuleResult::Ignored();
}
- auto seq_state = state->current_generation();
NetworkPacketBundle::Decoder evt(decoder.network_packet_bundle());
ConstBytes context = evt.ctx();
if (evt.has_iid()) {
- auto* interned = seq_state->LookupInternedMessage<
+ auto* interned = state->LookupInternedMessage<
protos::pbzero::InternedData::kPacketContextFieldNumber,
protos::pbzero::NetworkPacketContext>(evt.iid());
if (!interned) {
@@ -258,11 +257,12 @@ void NetworkTraceModule::ParseNetworkPacketBundle(int64_t ts, ConstBytes blob) {
});
}
-void NetworkTraceModule::PushPacketBufferForSort(int64_t timestamp,
- PacketSequenceState* state) {
+void NetworkTraceModule::PushPacketBufferForSort(
+ int64_t timestamp,
+ RefPtr<PacketSequenceStateGeneration> state) {
std::vector<uint8_t> v = packet_buffer_.SerializeAsArray();
context_->sorter->PushTracePacket(
- timestamp, state->current_generation(),
+ timestamp, std::move(state),
TraceBlobView(TraceBlob::CopyFrom(v.data(), v.size())));
packet_buffer_.Reset();
}
diff --git a/src/trace_processor/importers/proto/network_trace_module.h b/src/trace_processor/importers/proto/network_trace_module.h
index 15082c793..984ea822c 100644
--- a/src/trace_processor/importers/proto/network_trace_module.h
+++ b/src/trace_processor/importers/proto/network_trace_module.h
@@ -20,14 +20,16 @@
#include <cstdint>
#include "perfetto/protozero/scattered_heap_buffer.h"
-#include "protos/perfetto/trace/android/network_trace.pbzero.h"
-#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "src/trace_processor/importers/common/args_tracker.h"
#include "src/trace_processor/importers/common/parser_types.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/storage/trace_storage.h"
#include "src/trace_processor/types/trace_processor_context.h"
+#include "protos/perfetto/trace/android/network_trace.pbzero.h"
+#include "protos/perfetto/trace/trace_packet.pbzero.h"
+
namespace perfetto {
namespace trace_processor {
@@ -45,7 +47,7 @@ class NetworkTraceModule : public ProtoImporterModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t ts,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket::Decoder& decoder,
@@ -65,7 +67,8 @@ class NetworkTraceModule : public ProtoImporterModule {
// Helper to simplify pushing a TracePacket to the sorter. The caller fills in
// the packet buffer and uses this to push for sorting and reset the buffer.
- void PushPacketBufferForSort(int64_t timestamp, PacketSequenceState* state);
+ void PushPacketBufferForSort(int64_t timestamp,
+ RefPtr<PacketSequenceStateGeneration> state);
TraceProcessorContext* context_;
protozero::HeapBuffered<protos::pbzero::TracePacket> packet_buffer_;
diff --git a/src/trace_processor/importers/proto/packet_sequence_state.h b/src/trace_processor/importers/proto/packet_sequence_state.h
index 2ad0c7b3c..b50af207b 100644
--- a/src/trace_processor/importers/proto/packet_sequence_state.h
+++ b/src/trace_processor/importers/proto/packet_sequence_state.h
@@ -35,8 +35,7 @@ class PacketSequenceState {
public:
explicit PacketSequenceState(TraceProcessorContext* context)
: context_(context) {
- current_generation_.reset(
- new PacketSequenceStateGeneration(this, generation_index_++));
+ current_generation_.reset(new PacketSequenceStateGeneration(this));
}
int64_t IncrementAndGetTrackEventTimeNs(int64_t delta_ns) {
@@ -75,8 +74,7 @@ class PacketSequenceState {
// sequence. Add a new generation with the updated defaults but the
// current generation's interned data state.
current_generation_.reset(new PacketSequenceStateGeneration(
- this, generation_index_++, current_generation_.get(),
- std::move(defaults)));
+ this, current_generation_.get(), std::move(defaults)));
}
void SetThreadDescriptor(int32_t pid,
@@ -101,8 +99,7 @@ class PacketSequenceState {
// Starts a new generation with clean-slate incremental state and defaults.
void OnIncrementalStateCleared() {
packet_loss_ = false;
- current_generation_.reset(
- new PacketSequenceStateGeneration(this, generation_index_++));
+ current_generation_.reset(new PacketSequenceStateGeneration(this));
}
bool IsIncrementalStateValid() const { return !packet_loss_; }
@@ -126,8 +123,6 @@ class PacketSequenceState {
private:
TraceProcessorContext* context_;
- size_t generation_index_ = 0;
-
// If true, incremental state on the sequence is considered invalid until we
// see the next packet with incremental_state_cleared. We assume that we
// missed some packets at the beginning of the trace.
diff --git a/src/trace_processor/importers/proto/packet_sequence_state_generation.cc b/src/trace_processor/importers/proto/packet_sequence_state_generation.cc
index 1e890962a..c520e9259 100644
--- a/src/trace_processor/importers/proto/packet_sequence_state_generation.cc
+++ b/src/trace_processor/importers/proto/packet_sequence_state_generation.cc
@@ -25,11 +25,9 @@ namespace trace_processor {
PacketSequenceStateGeneration::PacketSequenceStateGeneration(
PacketSequenceState* state,
- size_t generation_index,
PacketSequenceStateGeneration* prev_gen,
TraceBlobView defaults)
: state_(state),
- generation_index_(generation_index),
interned_data_(prev_gen->interned_data_),
trace_packet_defaults_(InternedMessageView(std::move(defaults))),
trackers_(prev_gen->trackers_) {
@@ -43,6 +41,16 @@ PacketSequenceStateGeneration::PacketSequenceStateGeneration(
PacketSequenceStateGeneration::InternedDataTracker::~InternedDataTracker() =
default;
+bool PacketSequenceStateGeneration::pid_and_tid_valid() const {
+ return state_->pid_and_tid_valid();
+}
+int32_t PacketSequenceStateGeneration::pid() const {
+ return state_->pid();
+}
+int32_t PacketSequenceStateGeneration::tid() const {
+ return state_->tid();
+}
+
TraceProcessorContext* PacketSequenceStateGeneration::GetContext() const {
return state_->context();
}
@@ -95,5 +103,35 @@ InternedMessageView* PacketSequenceStateGeneration::GetInternedMessageView(
return nullptr;
}
+int64_t PacketSequenceStateGeneration::IncrementAndGetTrackEventTimeNs(
+ int64_t delta_ns) {
+ return state_->IncrementAndGetTrackEventTimeNs(delta_ns);
+}
+int64_t PacketSequenceStateGeneration::IncrementAndGetTrackEventThreadTimeNs(
+ int64_t delta_ns) {
+ return state_->IncrementAndGetTrackEventThreadTimeNs(delta_ns);
+}
+int64_t
+PacketSequenceStateGeneration::IncrementAndGetTrackEventThreadInstructionCount(
+ int64_t delta) {
+ return state_->IncrementAndGetTrackEventThreadInstructionCount(delta);
+}
+bool PacketSequenceStateGeneration::track_event_timestamps_valid() const {
+ return state_->track_event_timestamps_valid();
+}
+void PacketSequenceStateGeneration::SetThreadDescriptor(
+ int32_t pid,
+ int32_t tid,
+ int64_t timestamp_ns,
+ int64_t thread_timestamp_ns,
+ int64_t thread_instruction_count) {
+ state_->SetThreadDescriptor(pid, tid, timestamp_ns, thread_timestamp_ns,
+ thread_instruction_count);
+}
+
+bool PacketSequenceStateGeneration::IsIncrementalStateValid() const {
+ return state_->IsIncrementalStateValid();
+}
+
} // namespace trace_processor
} // namespace perfetto
diff --git a/src/trace_processor/importers/proto/packet_sequence_state_generation.h b/src/trace_processor/importers/proto/packet_sequence_state_generation.h
index f31030924..6b60b596d 100644
--- a/src/trace_processor/importers/proto/packet_sequence_state_generation.h
+++ b/src/trace_processor/importers/proto/packet_sequence_state_generation.h
@@ -19,6 +19,7 @@
#include <array>
#include <cstddef>
+#include <cstdint>
#include <memory>
#include <optional>
#include <tuple>
@@ -84,7 +85,9 @@ class PacketSequenceStateGeneration : public RefCounted {
return generation_->GetOrCreate<T>();
}
- PacketSequenceState* state() const { return generation_->state(); }
+ bool pid_and_tid_valid() const { return generation_->pid_and_tid_valid(); }
+ int32_t pid() const { return generation_->pid(); }
+ int32_t tid() const { return generation_->tid(); }
private:
friend PacketSequenceStateGeneration;
@@ -103,6 +106,10 @@ class PacketSequenceStateGeneration : public RefCounted {
PacketSequenceStateGeneration* generation_ = nullptr;
};
+ bool pid_and_tid_valid() const;
+ int32_t pid() const;
+ int32_t tid() const;
+
// Returns |nullptr| if the message with the given |iid| was not found (also
// records a stat in this case).
template <uint32_t FieldId, typename MessageType>
@@ -141,15 +148,28 @@ class PacketSequenceStateGeneration : public RefCounted {
return nullptr;
}
- PacketSequenceState* state() const { return state_; }
- size_t generation_index() const { return generation_index_; }
-
// Extension point for custom sequence state. To add new per sequence state
// just subclass ´PacketSequenceStateGeneration´ and get your sequence bound
// instance by calling this method.
template <typename T>
std::remove_cv_t<T>* GetOrCreate();
+ // TODO(carlscab): All this should be tracked in a dedicated class
+ // TrackEventSequenceState or something attached to the "incremental state".
+ int64_t IncrementAndGetTrackEventTimeNs(int64_t delta_ns);
+ int64_t IncrementAndGetTrackEventThreadTimeNs(int64_t delta_ns);
+ int64_t IncrementAndGetTrackEventThreadInstructionCount(int64_t delta);
+ bool track_event_timestamps_valid() const;
+ void SetThreadDescriptor(int32_t pid,
+ int32_t tid,
+ int64_t timestamp_ns,
+ int64_t thread_timestamp_ns,
+ int64_t thread_instruction_count);
+
+ // TODO(carlscab): Nobody other than `ProtoTraceReader` should care about
+ // this. Remove.
+ bool IsIncrementalStateValid() const;
+
private:
friend class PacketSequenceState;
@@ -175,12 +195,10 @@ class PacketSequenceStateGeneration : public RefCounted {
}
}
- PacketSequenceStateGeneration(PacketSequenceState* state,
- size_t generation_index)
- : state_(state), generation_index_(generation_index) {}
+ explicit PacketSequenceStateGeneration(PacketSequenceState* state)
+ : state_(state) {}
PacketSequenceStateGeneration(PacketSequenceState* state,
- size_t generation_index,
PacketSequenceStateGeneration* prev_gen,
TraceBlobView defaults);
@@ -194,8 +212,9 @@ class PacketSequenceStateGeneration : public RefCounted {
trace_packet_defaults_ = InternedMessageView(std::move(defaults));
}
+ // TODO(carlscab): This is dangerous given that PacketSequenceStateGeneration
+ // is refcounted and PacketSequenceState is not.
PacketSequenceState* state_;
- size_t generation_index_;
InternedFieldMap interned_data_;
std::optional<InternedMessageView> trace_packet_defaults_;
std::array<RefPtr<InternedDataTracker>,
diff --git a/src/trace_processor/importers/proto/profile_module.cc b/src/trace_processor/importers/proto/profile_module.cc
index c194107eb..6064d33f6 100644
--- a/src/trace_processor/importers/proto/profile_module.cc
+++ b/src/trace_processor/importers/proto/profile_module.cc
@@ -27,7 +27,7 @@
#include "src/trace_processor/importers/common/mapping_tracker.h"
#include "src/trace_processor/importers/common/process_tracker.h"
#include "src/trace_processor/importers/common/stack_profile_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/perf_sample_tracker.h"
#include "src/trace_processor/importers/proto/profile_packet_sequence_state.h"
#include "src/trace_processor/importers/proto/profile_packet_utils.h"
@@ -66,14 +66,15 @@ ProfileModule::ProfileModule(TraceProcessorContext* context)
ProfileModule::~ProfileModule() = default;
-ModuleResult ProfileModule::TokenizePacket(const TracePacket::Decoder& decoder,
- TraceBlobView* packet,
- int64_t /*packet_timestamp*/,
- PacketSequenceState* state,
- uint32_t field_id) {
+ModuleResult ProfileModule::TokenizePacket(
+ const TracePacket::Decoder& decoder,
+ TraceBlobView* packet,
+ int64_t /*packet_timestamp*/,
+ RefPtr<PacketSequenceStateGeneration> state,
+ uint32_t field_id) {
switch (field_id) {
case TracePacket::kStreamingProfilePacketFieldNumber:
- return TokenizeStreamingProfilePacket(state, packet,
+ return TokenizeStreamingProfilePacket(std::move(state), packet,
decoder.streaming_profile_packet());
}
return ModuleResult::Ignored();
@@ -93,7 +94,7 @@ void ProfileModule::ParseTracePacketData(
ParsePerfSample(ts, data.sequence_state.get(), decoder);
return;
case TracePacket::kProfilePacketFieldNumber:
- ParseProfilePacket(ts, data.sequence_state->state(),
+ ParseProfilePacket(ts, data.sequence_state.get(),
decoder.profile_packet());
return;
case TracePacket::kModuleSymbolsFieldNumber:
@@ -111,7 +112,7 @@ void ProfileModule::ParseTracePacketData(
}
ModuleResult ProfileModule::TokenizeStreamingProfilePacket(
- PacketSequenceState* sequence_state,
+ RefPtr<PacketSequenceStateGeneration> sequence_state,
TraceBlobView* packet,
ConstBytes streaming_profile_packet) {
protos::pbzero::StreamingProfilePacket::Decoder decoder(
@@ -139,8 +140,7 @@ ModuleResult ProfileModule::TokenizeStreamingProfilePacket(
sequence_state->IncrementAndGetTrackEventTimeNs(*timestamp_it * 1000);
}
- context_->sorter->PushTracePacket(packet_ts,
- sequence_state->current_generation(),
+ context_->sorter->PushTracePacket(packet_ts, std::move(sequence_state),
std::move(*packet), context_->machine_id());
return ModuleResult::Handled();
}
@@ -157,8 +157,8 @@ void ProfileModule::ParseStreamingProfilePacket(
StackProfileSequenceState& stack_profile_sequence_state =
*sequence_state->GetOrCreate<StackProfileSequenceState>();
- uint32_t pid = static_cast<uint32_t>(sequence_state->state()->pid());
- uint32_t tid = static_cast<uint32_t>(sequence_state->state()->tid());
+ uint32_t pid = static_cast<uint32_t>(sequence_state->pid());
+ uint32_t tid = static_cast<uint32_t>(sequence_state->tid());
const UniqueTid utid = procs->UpdateThread(tid, pid);
const UniquePid upid = procs->GetOrCreateProcess(pid);
@@ -301,12 +301,12 @@ void ProfileModule::ParsePerfSample(
context_->storage->mutable_perf_sample_table()->Insert(sample_row);
}
-void ProfileModule::ParseProfilePacket(int64_t ts,
- PacketSequenceState* sequence_state,
- ConstBytes blob) {
+void ProfileModule::ParseProfilePacket(
+ int64_t ts,
+ PacketSequenceStateGeneration* sequence_state,
+ ConstBytes blob) {
ProfilePacketSequenceState& profile_packet_sequence_state =
- *sequence_state->current_generation()
- ->GetOrCreate<ProfilePacketSequenceState>();
+ *sequence_state->GetOrCreate<ProfilePacketSequenceState>();
protos::pbzero::ProfilePacket::Decoder packet(blob.data, blob.size);
profile_packet_sequence_state.SetProfilePacketIndex(packet.index());
diff --git a/src/trace_processor/importers/proto/profile_module.h b/src/trace_processor/importers/proto/profile_module.h
index 883fb7aa2..cabc3bfef 100644
--- a/src/trace_processor/importers/proto/profile_module.h
+++ b/src/trace_processor/importers/proto/profile_module.h
@@ -18,8 +18,8 @@
#define SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_PROFILE_MODULE_H_
#include "perfetto/protozero/field.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
-#include "src/trace_processor/importers/proto/proto_incremental_state.h"
#include "protos/perfetto/trace/trace_packet.pbzero.h"
@@ -37,7 +37,7 @@ class ProfileModule : public ProtoImporterModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket::Decoder& decoder,
@@ -50,7 +50,7 @@ class ProfileModule : public ProtoImporterModule {
private:
// chrome stack sampling:
ModuleResult TokenizeStreamingProfilePacket(
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration>,
TraceBlobView* packet,
protozero::ConstBytes streaming_profile_packet);
void ParseStreamingProfilePacket(
@@ -65,7 +65,7 @@ class ProfileModule : public ProtoImporterModule {
// heap profiling:
void ParseProfilePacket(int64_t ts,
- PacketSequenceState*,
+ PacketSequenceStateGeneration*,
protozero::ConstBytes);
void ParseDeobfuscationMapping(int64_t ts,
PacketSequenceStateGeneration*,
diff --git a/src/trace_processor/importers/proto/profile_packet_sequence_state.cc b/src/trace_processor/importers/proto/profile_packet_sequence_state.cc
index d90976825..b5cdb704b 100644
--- a/src/trace_processor/importers/proto/profile_packet_sequence_state.cc
+++ b/src/trace_processor/importers/proto/profile_packet_sequence_state.cc
@@ -23,7 +23,6 @@
#include "src/trace_processor/importers/common/mapping_tracker.h"
#include "src/trace_processor/importers/common/process_tracker.h"
#include "src/trace_processor/importers/common/stack_profile_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/profile_packet_utils.h"
#include "src/trace_processor/importers/proto/stack_profile_sequence_state.h"
diff --git a/src/trace_processor/importers/proto/profile_packet_utils.h b/src/trace_processor/importers/proto/profile_packet_utils.h
index a9ea0e68b..68e4e50ad 100644
--- a/src/trace_processor/importers/proto/profile_packet_utils.h
+++ b/src/trace_processor/importers/proto/profile_packet_utils.h
@@ -19,7 +19,6 @@
#include <optional>
#include "perfetto/ext/base/string_view.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
#include "src/trace_processor/importers/proto/profile_packet_sequence_state.h"
#include "protos/perfetto/trace/interned_data/interned_data.pbzero.h"
diff --git a/src/trace_processor/importers/proto/proto_importer_module.cc b/src/trace_processor/importers/proto/proto_importer_module.cc
index c79c05dd5..fbfa96037 100644
--- a/src/trace_processor/importers/proto/proto_importer_module.cc
+++ b/src/trace_processor/importers/proto/proto_importer_module.cc
@@ -16,6 +16,8 @@
#include "src/trace_processor/importers/proto/proto_importer_module.h"
+#include "perfetto/trace_processor/ref_counted.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/types/trace_processor_context.h"
namespace perfetto {
@@ -29,7 +31,7 @@ ModuleResult ProtoImporterModule::TokenizePacket(
const protos::pbzero::TracePacket_Decoder&,
TraceBlobView* /*packet*/,
int64_t /*packet_timestamp*/,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration> /*sequence_state*/,
uint32_t /*field_id*/) {
return ModuleResult::Ignored();
}
diff --git a/src/trace_processor/importers/proto/proto_importer_module.h b/src/trace_processor/importers/proto/proto_importer_module.h
index cc2c3a2b3..d770111a5 100644
--- a/src/trace_processor/importers/proto/proto_importer_module.h
+++ b/src/trace_processor/importers/proto/proto_importer_module.h
@@ -21,6 +21,7 @@
#include "perfetto/base/status.h"
#include "src/trace_processor/importers/common/trace_parser.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
namespace perfetto {
@@ -33,7 +34,6 @@ class TracePacket_Decoder;
namespace trace_processor {
-class PacketSequenceState;
class TraceBlobView;
class TraceProcessorContext;
@@ -108,7 +108,7 @@ class ProtoImporterModule {
const protos::pbzero::TracePacket_Decoder&,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration> sequence_state,
uint32_t field_id);
// Called by ProtoTraceReader during the tokenization stage i.e. before
diff --git a/src/trace_processor/importers/proto/proto_trace_parser_impl.cc b/src/trace_processor/importers/proto/proto_trace_parser_impl.cc
index bbd38c3f0..9d318a1c8 100644
--- a/src/trace_processor/importers/proto/proto_trace_parser_impl.cc
+++ b/src/trace_processor/importers/proto/proto_trace_parser_impl.cc
@@ -38,7 +38,6 @@
#include "src/trace_processor/importers/common/track_tracker.h"
#include "src/trace_processor/importers/etw/etw_module.h"
#include "src/trace_processor/importers/ftrace/ftrace_module.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
#include "src/trace_processor/importers/proto/track_event_module.h"
#include "src/trace_processor/storage/metadata.h"
#include "src/trace_processor/storage/stats.h"
diff --git a/src/trace_processor/importers/proto/proto_trace_reader.cc b/src/trace_processor/importers/proto/proto_trace_reader.cc
index 972acf358..e139cbe0e 100644
--- a/src/trace_processor/importers/proto/proto_trace_reader.cc
+++ b/src/trace_processor/importers/proto/proto_trace_reader.cc
@@ -236,13 +236,13 @@ util::Status ProtoTraceReader::ParsePacket(TraceBlobView packet) {
for (ProtoImporterModule* global_module :
context_->modules_for_all_fields) {
ModuleResult res = global_module->TokenizePacket(
- decoder, &packet, timestamp, state, field_id);
+ decoder, &packet, timestamp, state->current_generation(), field_id);
if (!res.ignored())
return res.ToStatus();
}
for (ProtoImporterModule* module : modules[field_id]) {
- ModuleResult res = module->TokenizePacket(decoder, &packet, timestamp,
- state, field_id);
+ ModuleResult res = module->TokenizePacket(
+ decoder, &packet, timestamp, state->current_generation(), field_id);
if (!res.ignored())
return res.ToStatus();
}
diff --git a/src/trace_processor/importers/proto/stack_profile_sequence_state.cc b/src/trace_processor/importers/proto/stack_profile_sequence_state.cc
index 2688d26dd..3d133094d 100644
--- a/src/trace_processor/importers/proto/stack_profile_sequence_state.cc
+++ b/src/trace_processor/importers/proto/stack_profile_sequence_state.cc
@@ -63,10 +63,10 @@ StackProfileSequenceState::~StackProfileSequenceState() = default;
VirtualMemoryMapping* StackProfileSequenceState::FindOrInsertMapping(
uint64_t iid) {
- if (state()->pid_and_tid_valid()) {
+ if (pid_and_tid_valid()) {
return FindOrInsertMappingImpl(
context_->process_tracker->GetOrCreateProcess(
- static_cast<uint32_t>(state()->pid())),
+ static_cast<uint32_t>(pid())),
iid);
}
diff --git a/src/trace_processor/importers/proto/statsd_module.cc b/src/trace_processor/importers/proto/statsd_module.cc
index 2f9d3cd0c..e925b5a63 100644
--- a/src/trace_processor/importers/proto/statsd_module.cc
+++ b/src/trace_processor/importers/proto/statsd_module.cc
@@ -23,7 +23,7 @@
#include "src/trace_processor/importers/common/machine_tracker.h"
#include "src/trace_processor/importers/common/slice_tracker.h"
#include "src/trace_processor/importers/common/track_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/sorter/trace_sorter.h"
#include "src/trace_processor/storage/stats.h"
#include "src/trace_processor/storage/trace_storage.h"
@@ -216,11 +216,12 @@ StatsdModule::StatsdModule(TraceProcessorContext* context)
StatsdModule::~StatsdModule() = default;
-ModuleResult StatsdModule::TokenizePacket(const TracePacket::Decoder& decoder,
- TraceBlobView* /*packet*/,
- int64_t packet_timestamp,
- PacketSequenceState* state,
- uint32_t field_id) {
+ModuleResult StatsdModule::TokenizePacket(
+ const TracePacket::Decoder& decoder,
+ TraceBlobView* /*packet*/,
+ int64_t packet_timestamp,
+ RefPtr<PacketSequenceStateGeneration> state,
+ uint32_t field_id) {
if (field_id != TracePacket::kStatsdAtomFieldNumber) {
return ModuleResult::Ignored();
}
@@ -246,9 +247,9 @@ ModuleResult StatsdModule::TokenizePacket(const TracePacket::Decoder& decoder,
std::vector<uint8_t> vec = forged.SerializeAsArray();
TraceBlob blob = TraceBlob::CopyFrom(vec.data(), vec.size());
- context_->sorter->PushTracePacket(
- atom_timestamp, state->current_generation(),
- TraceBlobView(std::move(blob)), context_->machine_id());
+ context_->sorter->PushTracePacket(atom_timestamp, state,
+ TraceBlobView(std::move(blob)),
+ context_->machine_id());
}
return ModuleResult::Handled();
diff --git a/src/trace_processor/importers/proto/statsd_module.h b/src/trace_processor/importers/proto/statsd_module.h
index 07a524d55..bb084b8c2 100644
--- a/src/trace_processor/importers/proto/statsd_module.h
+++ b/src/trace_processor/importers/proto/statsd_module.h
@@ -24,6 +24,7 @@
#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "src/trace_processor/importers/common/async_track_set_tracker.h"
#include "src/trace_processor/importers/common/trace_parser.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/storage/trace_storage.h"
#include "src/trace_processor/tables/sched_tables_py.h"
@@ -66,7 +67,7 @@ class StatsdModule : public ProtoImporterModule {
ModuleResult TokenizePacket(const protos::pbzero::TracePacket::Decoder&,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket::Decoder& decoder,
diff --git a/src/trace_processor/importers/proto/system_probes_module.cc b/src/trace_processor/importers/proto/system_probes_module.cc
index b451f966a..633a0bc8b 100644
--- a/src/trace_processor/importers/proto/system_probes_module.cc
+++ b/src/trace_processor/importers/proto/system_probes_module.cc
@@ -16,6 +16,7 @@
#include "src/trace_processor/importers/proto/system_probes_module.h"
#include "perfetto/base/build_config.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/system_probes_parser.h"
#include "protos/perfetto/trace/trace_packet.pbzero.h"
@@ -38,7 +39,7 @@ ModuleResult SystemProbesModule::TokenizePacket(
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView*,
int64_t,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration>,
uint32_t field_id) {
switch (field_id) {
case TracePacket::kSystemInfoFieldNumber:
diff --git a/src/trace_processor/importers/proto/system_probes_module.h b/src/trace_processor/importers/proto/system_probes_module.h
index b781ecce6..96909a54e 100644
--- a/src/trace_processor/importers/proto/system_probes_module.h
+++ b/src/trace_processor/importers/proto/system_probes_module.h
@@ -19,6 +19,7 @@
#include "perfetto/base/build_config.h"
#include "src/trace_processor/importers/common/trace_parser.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/importers/proto/system_probes_parser.h"
@@ -34,7 +35,7 @@ class SystemProbesModule : public ProtoImporterModule {
ModuleResult TokenizePacket(const protos::pbzero::TracePacket::Decoder&,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState*,
+ RefPtr<PacketSequenceStateGeneration>,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket::Decoder& decoder,
diff --git a/src/trace_processor/importers/proto/track_event_module.cc b/src/trace_processor/importers/proto/track_event_module.cc
index 719704615..aee720c55 100644
--- a/src/trace_processor/importers/proto/track_event_module.cc
+++ b/src/trace_processor/importers/proto/track_event_module.cc
@@ -19,6 +19,7 @@
#include "perfetto/base/logging.h"
#include "perfetto/ext/base/string_utils.h"
#include "src/trace_processor/importers/common/track_tracker.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/track_event_tracker.h"
#include "src/trace_processor/types/trace_processor_context.h"
@@ -48,22 +49,23 @@ ModuleResult TrackEventModule::TokenizePacket(
const TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) {
switch (field_id) {
case TracePacket::kTrackEventRangeOfInterestFieldNumber:
- return tokenizer_.TokenizeRangeOfInterestPacket(state, decoder,
+ return tokenizer_.TokenizeRangeOfInterestPacket(std::move(state), decoder,
packet_timestamp);
case TracePacket::kTrackDescriptorFieldNumber:
- return tokenizer_.TokenizeTrackDescriptorPacket(state, decoder,
+ return tokenizer_.TokenizeTrackDescriptorPacket(std::move(state), decoder,
packet_timestamp);
case TracePacket::kTrackEventFieldNumber:
- tokenizer_.TokenizeTrackEventPacket(state, decoder, packet,
+ tokenizer_.TokenizeTrackEventPacket(std::move(state), decoder, packet,
packet_timestamp);
return ModuleResult::Handled();
case TracePacket::kThreadDescriptorFieldNumber:
// TODO(eseckler): Remove once Chrome has switched to TrackDescriptors.
- return tokenizer_.TokenizeThreadDescriptorPacket(state, decoder);
+ return tokenizer_.TokenizeThreadDescriptorPacket(std::move(state),
+ decoder);
}
return ModuleResult::Ignored();
}
diff --git a/src/trace_processor/importers/proto/track_event_module.h b/src/trace_processor/importers/proto/track_event_module.h
index 2b68a88b2..4a7ae69e8 100644
--- a/src/trace_processor/importers/proto/track_event_module.h
+++ b/src/trace_processor/importers/proto/track_event_module.h
@@ -17,6 +17,8 @@
#ifndef SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_TRACK_EVENT_MODULE_H_
#define SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_TRACK_EVENT_MODULE_H_
+#include "perfetto/trace_processor/ref_counted.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/importers/proto/track_event_parser.h"
#include "src/trace_processor/importers/proto/track_event_tokenizer.h"
@@ -36,7 +38,7 @@ class TrackEventModule : public ProtoImporterModule {
const protos::pbzero::TracePacket::Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void OnIncrementalStateCleared(uint32_t) override;
diff --git a/src/trace_processor/importers/proto/track_event_parser.cc b/src/trace_processor/importers/proto/track_event_parser.cc
index cb8084474..09ef47433 100644
--- a/src/trace_processor/importers/proto/track_event_parser.cc
+++ b/src/trace_processor/importers/proto/track_event_parser.cc
@@ -33,7 +33,6 @@
#include "src/trace_processor/importers/common/track_tracker.h"
#include "src/trace_processor/importers/json/json_utils.h"
#include "src/trace_processor/importers/proto/packet_analyzer.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
#include "src/trace_processor/importers/proto/profile_packet_utils.h"
#include "src/trace_processor/importers/proto/stack_profile_sequence_state.h"
#include "src/trace_processor/importers/proto/track_event_tracker.h"
@@ -477,11 +476,9 @@ class TrackEventParser::EventImporter {
storage_->process_track_table().id().IndexOf(track_id_);
if (process_track_row) {
upid_ = storage_->process_track_table().upid()[*process_track_row];
- if (sequence_state_->state()->pid_and_tid_valid()) {
- uint32_t pid =
- static_cast<uint32_t>(sequence_state_->state()->pid());
- uint32_t tid =
- static_cast<uint32_t>(sequence_state_->state()->tid());
+ if (sequence_state_->pid_and_tid_valid()) {
+ uint32_t pid = static_cast<uint32_t>(sequence_state_->pid());
+ uint32_t tid = static_cast<uint32_t>(sequence_state_->tid());
UniqueTid utid_candidate = procs->UpdateThread(tid, pid);
if (storage_->thread_table().upid()[utid_candidate] == upid_)
legacy_passthrough_utid_ = utid_candidate;
@@ -495,17 +492,15 @@ class TrackEventParser::EventImporter {
tracks->mutable_name()->Set(*track_index, name_id_);
}
- if (sequence_state_->state()->pid_and_tid_valid()) {
- uint32_t pid =
- static_cast<uint32_t>(sequence_state_->state()->pid());
- uint32_t tid =
- static_cast<uint32_t>(sequence_state_->state()->tid());
+ if (sequence_state_->pid_and_tid_valid()) {
+ uint32_t pid = static_cast<uint32_t>(sequence_state_->pid());
+ uint32_t tid = static_cast<uint32_t>(sequence_state_->tid());
legacy_passthrough_utid_ = procs->UpdateThread(tid, pid);
}
}
}
} else {
- bool pid_tid_state_valid = sequence_state_->state()->pid_and_tid_valid();
+ bool pid_tid_state_valid = sequence_state_->pid_and_tid_valid();
// We have a 0-value |track_uuid|. Nevertheless, we should only fall back
// if we have either no |track_uuid| specified at all or |track_uuid| was
@@ -524,8 +519,8 @@ class TrackEventParser::EventImporter {
legacy_event_.has_tid_override() && pid_tid_state_valid;
if (fallback_to_legacy_pid_tid_tracks) {
- uint32_t pid = static_cast<uint32_t>(sequence_state_->state()->pid());
- uint32_t tid = static_cast<uint32_t>(sequence_state_->state()->tid());
+ uint32_t pid = static_cast<uint32_t>(sequence_state_->pid());
+ uint32_t tid = static_cast<uint32_t>(sequence_state_->tid());
if (legacy_event_.has_pid_override()) {
pid = static_cast<uint32_t>(legacy_event_.pid_override());
tid = static_cast<uint32_t>(-1);
diff --git a/src/trace_processor/importers/proto/track_event_tokenizer.cc b/src/trace_processor/importers/proto/track_event_tokenizer.cc
index 7f2074280..d9ed33607 100644
--- a/src/trace_processor/importers/proto/track_event_tokenizer.cc
+++ b/src/trace_processor/importers/proto/track_event_tokenizer.cc
@@ -17,13 +17,14 @@
#include "src/trace_processor/importers/proto/track_event_tokenizer.h"
#include "perfetto/base/logging.h"
+#include "perfetto/trace_processor/ref_counted.h"
#include "perfetto/trace_processor/trace_blob_view.h"
#include "src/trace_processor/importers/common/clock_tracker.h"
#include "src/trace_processor/importers/common/machine_tracker.h"
#include "src/trace_processor/importers/common/metadata_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/proto/packet_sequence_state.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_trace_reader.h"
#include "src/trace_processor/importers/proto/track_event_tracker.h"
#include "src/trace_processor/sorter/trace_sorter.h"
@@ -58,7 +59,7 @@ TrackEventTokenizer::TrackEventTokenizer(TraceProcessorContext* context,
context_->storage->InternString("thread_instruction_count")) {}
ModuleResult TrackEventTokenizer::TokenizeRangeOfInterestPacket(
- PacketSequenceState* /*state*/,
+ RefPtr<PacketSequenceStateGeneration> /*state*/,
const protos::pbzero::TracePacket::Decoder& packet,
int64_t /*packet_timestamp*/) {
protos::pbzero::TrackEventRangeOfInterest::Decoder range_of_interest(
@@ -75,7 +76,7 @@ ModuleResult TrackEventTokenizer::TokenizeRangeOfInterestPacket(
}
ModuleResult TrackEventTokenizer::TokenizeTrackDescriptorPacket(
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
const protos::pbzero::TracePacket::Decoder& packet,
int64_t packet_timestamp) {
auto track_descriptor_field = packet.track_descriptor();
@@ -109,7 +110,7 @@ ModuleResult TrackEventTokenizer::TokenizeTrackDescriptorPacket(
}
if (state->IsIncrementalStateValid()) {
- TokenizeThreadDescriptor(state, thread);
+ TokenizeThreadDescriptor(*state, thread);
}
track_event_tracker_->ReserveDescriptorThreadTrack(
@@ -181,7 +182,7 @@ ModuleResult TrackEventTokenizer::TokenizeTrackDescriptorPacket(
}
ModuleResult TrackEventTokenizer::TokenizeThreadDescriptorPacket(
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
const protos::pbzero::TracePacket::Decoder& packet) {
if (PERFETTO_UNLIKELY(!packet.has_trusted_packet_sequence_id())) {
PERFETTO_ELOG("ThreadDescriptor packet without trusted_packet_sequence_id");
@@ -200,25 +201,25 @@ ModuleResult TrackEventTokenizer::TokenizeThreadDescriptorPacket(
}
protos::pbzero::ThreadDescriptor::Decoder thread(packet.thread_descriptor());
- TokenizeThreadDescriptor(state, thread);
+ TokenizeThreadDescriptor(*state, thread);
// Let ProtoTraceReader forward the packet to the parser.
return ModuleResult::Ignored();
}
void TrackEventTokenizer::TokenizeThreadDescriptor(
- PacketSequenceState* state,
+ PacketSequenceStateGeneration& state,
const protos::pbzero::ThreadDescriptor::Decoder& thread) {
// TODO(eseckler): Remove support for legacy thread descriptor-based default
// tracks and delta timestamps.
- state->SetThreadDescriptor(thread.pid(), thread.tid(),
- thread.reference_timestamp_us() * 1000,
- thread.reference_thread_time_us() * 1000,
- thread.reference_thread_instruction_count());
+ state.SetThreadDescriptor(thread.pid(), thread.tid(),
+ thread.reference_timestamp_us() * 1000,
+ thread.reference_thread_time_us() * 1000,
+ thread.reference_thread_instruction_count());
}
void TrackEventTokenizer::TokenizeTrackEventPacket(
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
const protos::pbzero::TracePacket::Decoder& packet,
TraceBlobView* packet_blob,
int64_t packet_timestamp) {
@@ -232,10 +233,10 @@ void TrackEventTokenizer::TokenizeTrackEventPacket(
protos::pbzero::TrackEvent::Decoder event(field.data, field.size);
protos::pbzero::TrackEventDefaults::Decoder* defaults =
- state->current_generation()->GetTrackEventDefaults();
+ state->GetTrackEventDefaults();
int64_t timestamp;
- TrackEventData data(std::move(*packet_blob), state->current_generation());
+ TrackEventData data(std::move(*packet_blob), state);
// TODO(eseckler): Remove handling of timestamps relative to ThreadDescriptors
// once all producers have switched to clock-domain timestamps (e.g.
diff --git a/src/trace_processor/importers/proto/track_event_tokenizer.h b/src/trace_processor/importers/proto/track_event_tokenizer.h
index 010bc87dd..6ce334713 100644
--- a/src/trace_processor/importers/proto/track_event_tokenizer.h
+++ b/src/trace_processor/importers/proto/track_event_tokenizer.h
@@ -20,6 +20,7 @@
#include <stdint.h>
#include "perfetto/protozero/proto_decoder.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/storage/trace_storage.h"
@@ -36,7 +37,6 @@ class TracePacket_Decoder;
namespace trace_processor {
-class PacketSequenceState;
class TraceProcessorContext;
class TraceBlobView;
class TrackEventTracker;
@@ -47,24 +47,24 @@ class TrackEventTokenizer {
explicit TrackEventTokenizer(TraceProcessorContext*, TrackEventTracker*);
ModuleResult TokenizeRangeOfInterestPacket(
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
const protos::pbzero::TracePacket_Decoder&,
int64_t packet_timestamp);
ModuleResult TokenizeTrackDescriptorPacket(
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
const protos::pbzero::TracePacket_Decoder&,
int64_t packet_timestamp);
ModuleResult TokenizeThreadDescriptorPacket(
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
const protos::pbzero::TracePacket_Decoder&);
- void TokenizeTrackEventPacket(PacketSequenceState* state,
+ void TokenizeTrackEventPacket(RefPtr<PacketSequenceStateGeneration> state,
const protos::pbzero::TracePacket_Decoder&,
TraceBlobView* packet,
int64_t packet_timestamp);
private:
void TokenizeThreadDescriptor(
- PacketSequenceState* state,
+ PacketSequenceStateGeneration& state,
const protos::pbzero::ThreadDescriptor_Decoder&);
template <typename T>
base::Status AddExtraCounterValues(
diff --git a/src/trace_processor/importers/proto/translation_table_module.cc b/src/trace_processor/importers/proto/translation_table_module.cc
index b86c3d3a5..8684df031 100644
--- a/src/trace_processor/importers/proto/translation_table_module.cc
+++ b/src/trace_processor/importers/proto/translation_table_module.cc
@@ -17,6 +17,7 @@
#include "src/trace_processor/importers/common/args_translation_table.h"
#include "src/trace_processor/importers/common/slice_translation_table.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "protos/perfetto/trace/translation/translation_table.pbzero.h"
@@ -37,7 +38,7 @@ ModuleResult TranslationTableModule::TokenizePacket(
const protos::pbzero::TracePacket_Decoder& decoder,
TraceBlobView* /*packet*/,
int64_t /*packet_timestamp*/,
- PacketSequenceState* /*state*/,
+ RefPtr<PacketSequenceStateGeneration> /*state*/,
uint32_t field_id) {
if (field_id != TracePacket::kTranslationTableFieldNumber) {
return ModuleResult::Ignored();
diff --git a/src/trace_processor/importers/proto/translation_table_module.h b/src/trace_processor/importers/proto/translation_table_module.h
index a318e6015..2060f4139 100644
--- a/src/trace_processor/importers/proto/translation_table_module.h
+++ b/src/trace_processor/importers/proto/translation_table_module.h
@@ -21,6 +21,7 @@
#include <optional>
#include "protos/perfetto/trace/trace_packet.pbzero.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/types/trace_processor_context.h"
@@ -37,7 +38,7 @@ class TranslationTableModule : public ProtoImporterModule {
const protos::pbzero::TracePacket_Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
private:
diff --git a/src/trace_processor/importers/proto/v8_module.cc b/src/trace_processor/importers/proto/v8_module.cc
index f90a71c40..89360b6b4 100644
--- a/src/trace_processor/importers/proto/v8_module.cc
+++ b/src/trace_processor/importers/proto/v8_module.cc
@@ -24,7 +24,6 @@
#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "src/trace_processor/importers/common/parser_types.h"
#include "src/trace_processor/importers/common/process_tracker.h"
-#include "src/trace_processor/importers/proto/packet_sequence_state.h"
#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/v8_sequence_state.h"
#include "src/trace_processor/importers/proto/v8_tracker.h"
@@ -58,11 +57,12 @@ V8Module::V8Module(TraceProcessorContext* context)
V8Module::~V8Module() = default;
-ModuleResult V8Module::TokenizePacket(const TracePacket::Decoder&,
- TraceBlobView* /*packet*/,
- int64_t /*packet_timestamp*/,
- PacketSequenceState* /*state*/,
- uint32_t /*field_id*/) {
+ModuleResult V8Module::TokenizePacket(
+ const TracePacket::Decoder&,
+ TraceBlobView* /*packet*/,
+ int64_t /*packet_timestamp*/,
+ RefPtr<PacketSequenceStateGeneration> /*state*/,
+ uint32_t /*field_id*/) {
return ModuleResult::Ignored();
}
diff --git a/src/trace_processor/importers/proto/v8_module.h b/src/trace_processor/importers/proto/v8_module.h
index ea49b3208..e5825f717 100644
--- a/src/trace_processor/importers/proto/v8_module.h
+++ b/src/trace_processor/importers/proto/v8_module.h
@@ -22,6 +22,7 @@
#include "perfetto/ext/base/flat_hash_map.h"
#include "perfetto/protozero/field.h"
+#include "src/trace_processor/importers/proto/packet_sequence_state_generation.h"
#include "src/trace_processor/importers/proto/proto_importer_module.h"
#include "src/trace_processor/storage/trace_storage.h"
#include "src/trace_processor/tables/v8_tables_py.h"
@@ -53,7 +54,7 @@ class V8Module : public ProtoImporterModule {
const protos::pbzero::TracePacket_Decoder& decoder,
TraceBlobView* packet,
int64_t packet_timestamp,
- PacketSequenceState* state,
+ RefPtr<PacketSequenceStateGeneration> state,
uint32_t field_id) override;
void ParseTracePacketData(const protos::pbzero::TracePacket_Decoder&,