[tracing007] Add chrome trigger packet
Similar to traced trigger.
For use in chrome, the hash will go through privacy filters and get
re-symbolized on the other side based on the scenario config.
Change-Id: Ic0502fae9e6adc8aebdbd67d818a5b3724baf6b6
diff --git a/Android.bp b/Android.bp
index dce7dbc..929aa79 100644
--- a/Android.bp
+++ b/Android.bp
@@ -5695,6 +5695,7 @@
"protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
"protos/perfetto/trace/chrome/chrome_metadata.proto",
"protos/perfetto/trace/chrome/chrome_trace_event.proto",
+ "protos/perfetto/trace/chrome/chrome_trigger.proto",
"protos/perfetto/trace/chrome/v8.proto",
],
}
@@ -5714,6 +5715,7 @@
"external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.gen.cc",
"external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.gen.cc",
"external/perfetto/protos/perfetto/trace/chrome/chrome_trace_event.gen.cc",
+ "external/perfetto/protos/perfetto/trace/chrome/chrome_trigger.gen.cc",
"external/perfetto/protos/perfetto/trace/chrome/v8.gen.cc",
],
}
@@ -5733,6 +5735,7 @@
"external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.gen.h",
"external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.gen.h",
"external/perfetto/protos/perfetto/trace/chrome/chrome_trace_event.gen.h",
+ "external/perfetto/protos/perfetto/trace/chrome/chrome_trigger.gen.h",
"external/perfetto/protos/perfetto/trace/chrome/v8.gen.h",
],
export_include_dirs: [
@@ -5748,6 +5751,7 @@
"protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
"protos/perfetto/trace/chrome/chrome_metadata.proto",
"protos/perfetto/trace/chrome/chrome_trace_event.proto",
+ "protos/perfetto/trace/chrome/chrome_trigger.proto",
"protos/perfetto/trace/chrome/v8.proto",
],
}
@@ -5766,6 +5770,7 @@
"external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pb.cc",
"external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pb.cc",
"external/perfetto/protos/perfetto/trace/chrome/chrome_trace_event.pb.cc",
+ "external/perfetto/protos/perfetto/trace/chrome/chrome_trigger.pb.cc",
"external/perfetto/protos/perfetto/trace/chrome/v8.pb.cc",
],
}
@@ -5784,6 +5789,7 @@
"external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pb.h",
"external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pb.h",
"external/perfetto/protos/perfetto/trace/chrome/chrome_trace_event.pb.h",
+ "external/perfetto/protos/perfetto/trace/chrome/chrome_trigger.pb.h",
"external/perfetto/protos/perfetto/trace/chrome/v8.pb.h",
],
export_include_dirs: [
@@ -5799,6 +5805,7 @@
"protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
"protos/perfetto/trace/chrome/chrome_metadata.proto",
"protos/perfetto/trace/chrome/chrome_trace_event.proto",
+ "protos/perfetto/trace/chrome/chrome_trigger.proto",
"protos/perfetto/trace/chrome/v8.proto",
],
}
@@ -5818,6 +5825,7 @@
"external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pbzero.cc",
"external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pbzero.cc",
"external/perfetto/protos/perfetto/trace/chrome/chrome_trace_event.pbzero.cc",
+ "external/perfetto/protos/perfetto/trace/chrome/chrome_trigger.pbzero.cc",
"external/perfetto/protos/perfetto/trace/chrome/v8.pbzero.cc",
],
}
@@ -5837,6 +5845,7 @@
"external/perfetto/protos/perfetto/trace/chrome/chrome_benchmark_metadata.pbzero.h",
"external/perfetto/protos/perfetto/trace/chrome/chrome_metadata.pbzero.h",
"external/perfetto/protos/perfetto/trace/chrome/chrome_trace_event.pbzero.h",
+ "external/perfetto/protos/perfetto/trace/chrome/chrome_trigger.pbzero.h",
"external/perfetto/protos/perfetto/trace/chrome/v8.pbzero.h",
],
export_include_dirs: [
@@ -5920,6 +5929,7 @@
"protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
"protos/perfetto/trace/chrome/chrome_metadata.proto",
"protos/perfetto/trace/chrome/chrome_trace_event.proto",
+ "protos/perfetto/trace/chrome/chrome_trigger.proto",
"protos/perfetto/trace/chrome/v8.proto",
"protos/perfetto/trace/clock_snapshot.proto",
"protos/perfetto/trace/etw/etw.proto",
@@ -13801,6 +13811,7 @@
"protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
"protos/perfetto/trace/chrome/chrome_metadata.proto",
"protos/perfetto/trace/chrome/chrome_trace_event.proto",
+ "protos/perfetto/trace/chrome/chrome_trigger.proto",
"protos/perfetto/trace/chrome/v8.proto",
"protos/perfetto/trace/clock_snapshot.proto",
"protos/perfetto/trace/etw/etw.proto",
diff --git a/BUILD b/BUILD
index 4b1e498..b233064 100644
--- a/BUILD
+++ b/BUILD
@@ -4643,6 +4643,7 @@
"protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto",
"protos/perfetto/trace/chrome/chrome_metadata.proto",
"protos/perfetto/trace/chrome/chrome_trace_event.proto",
+ "protos/perfetto/trace/chrome/chrome_trigger.proto",
"protos/perfetto/trace/chrome/v8.proto",
],
visibility = [
diff --git a/protos/perfetto/trace/chrome/BUILD.gn b/protos/perfetto/trace/chrome/BUILD.gn
index 0df6b88..b9599aa 100644
--- a/protos/perfetto/trace/chrome/BUILD.gn
+++ b/protos/perfetto/trace/chrome/BUILD.gn
@@ -19,6 +19,7 @@
"chrome_benchmark_metadata.proto",
"chrome_metadata.proto",
"chrome_trace_event.proto",
+ "chrome_trigger.proto",
"v8.proto",
]
}
diff --git a/protos/perfetto/trace/chrome/chrome_trace_packet.proto b/protos/perfetto/trace/chrome/chrome_trace_packet.proto
index ae0201d..17f1e68 100644
--- a/protos/perfetto/trace/chrome/chrome_trace_packet.proto
+++ b/protos/perfetto/trace/chrome/chrome_trace_packet.proto
@@ -28,6 +28,7 @@
import "protos/perfetto/common/trace_stats.proto";
import "protos/perfetto/config/trace_config.proto";
import "protos/perfetto/trace/chrome/chrome_trace_event.proto";
+import "protos/perfetto/trace/chrome/chrome_trigger.proto";
import "protos/perfetto/trace/clock_snapshot.proto";
import "protos/perfetto/trace/interned_data/interned_data.proto";
import "protos/perfetto/trace/profiling/profile_packet.proto";
@@ -52,6 +53,7 @@
ThreadDescriptor thread_descriptor = 44;
StreamingProfilePacket streaming_profile_packet = 54;
ProfiledFrameSymbols profiled_frame_symbols = 55;
+ ChromeTrigger chrome_trigger = 109;
// The original trace config.
TraceConfig trace_config = 33;
diff --git a/protos/perfetto/trace/chrome/chrome_trigger.proto b/protos/perfetto/trace/chrome/chrome_trigger.proto
new file mode 100644
index 0000000..9662e92
--- /dev/null
+++ b/protos/perfetto/trace/chrome/chrome_trigger.proto
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2024 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+syntax = "proto2";
+
+package perfetto.protos;
+
+// When a TracingSession receives a trigger it records the boot time
+// nanoseconds in the TracePacket's timestamp field. We emit this data so
+// filtering can be done on triggers received in the trace.
+message ChromeTrigger {
+ // Name of the trigger which was received.
+ optional string trigger_name = 1;
+ // MD5 hash of the trigger name.
+ optional string trigger_hash = 2;
+}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index d5cf2d8..bf2915d 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -5988,6 +5988,20 @@
// End of protos/perfetto/trace/chrome/chrome_trace_event.proto
+// Begin of protos/perfetto/trace/chrome/chrome_trigger.proto
+
+// When a TracingSession receives a trigger it records the boot time
+// nanoseconds in the TracePacket's timestamp field. We emit this data so
+// filtering can be done on triggers received in the trace.
+message ChromeTrigger {
+ // Name of the trigger which was received.
+ optional string trigger_name = 1;
+ // MD5 hash of the trigger name.
+ optional string trigger_hash = 2;
+}
+
+// End of protos/perfetto/trace/chrome/chrome_trigger.proto
+
// Begin of protos/perfetto/trace/chrome/v8.proto
// These are the protos for the V8 data source.
@@ -14630,7 +14644,7 @@
// See the [Buffers and Dataflow](/docs/concepts/buffers.md) doc for details.
//
// Next reserved id: 14 (up to 15).
-// Next id: 108.
+// Next id: 109.
message TracePacket {
// The timestamp of the TracePacket.
// By default this timestamps refers to the trace clock (CLOCK_BOOTTIME on
@@ -14671,6 +14685,7 @@
AndroidLogPacket android_log = 39;
SystemInfo system_info = 45;
Trigger trigger = 46;
+ ChromeTrigger chrome_trigger = 109;
PackagesList packages_list = 47;
ChromeBenchmarkMetadata chrome_benchmark_metadata = 48;
PerfettoMetatrace perfetto_metatrace = 49;
diff --git a/protos/perfetto/trace/trace_packet.proto b/protos/perfetto/trace/trace_packet.proto
index 2547824..93fb7d3 100644
--- a/protos/perfetto/trace/trace_packet.proto
+++ b/protos/perfetto/trace/trace_packet.proto
@@ -37,6 +37,7 @@
import "protos/perfetto/trace/chrome/chrome_benchmark_metadata.proto";
import "protos/perfetto/trace/chrome/chrome_metadata.proto";
import "protos/perfetto/trace/chrome/chrome_trace_event.proto";
+import "protos/perfetto/trace/chrome/chrome_trigger.proto";
import "protos/perfetto/trace/chrome/v8.proto";
import "protos/perfetto/trace/clock_snapshot.proto";
import "protos/perfetto/trace/etw/etw_event_bundle.proto";
@@ -102,7 +103,7 @@
// See the [Buffers and Dataflow](/docs/concepts/buffers.md) doc for details.
//
// Next reserved id: 14 (up to 15).
-// Next id: 108.
+// Next id: 109.
message TracePacket {
// The timestamp of the TracePacket.
// By default this timestamps refers to the trace clock (CLOCK_BOOTTIME on
@@ -143,6 +144,7 @@
AndroidLogPacket android_log = 39;
SystemInfo system_info = 45;
Trigger trigger = 46;
+ ChromeTrigger chrome_trigger = 109;
PackagesList packages_list = 47;
ChromeBenchmarkMetadata chrome_benchmark_metadata = 48;
PerfettoMetatrace perfetto_metatrace = 49;
diff --git a/src/trace_processor/importers/proto/metadata_module.cc b/src/trace_processor/importers/proto/metadata_module.cc
index 3374043..9f2cb30 100644
--- a/src/trace_processor/importers/proto/metadata_module.cc
+++ b/src/trace_processor/importers/proto/metadata_module.cc
@@ -26,6 +26,7 @@
#include "src/trace_processor/util/protozero_to_text.h"
#include "protos/perfetto/config/trace_config.pbzero.h"
+#include "protos/perfetto/trace/chrome/chrome_trigger.pbzero.h"
#include "protos/perfetto/trace/trace_packet.pbzero.h"
#include "protos/perfetto/trace/trace_uuid.pbzero.h"
#include "protos/perfetto/trace/trigger.pbzero.h"
@@ -87,11 +88,14 @@
int64_t ts,
const TracePacketData&,
uint32_t field_id) {
+ // We handle triggers at parse time rather at tokenization because
+ // we add slices to tables which need to happen post-sorting.
if (field_id == TracePacket::kTriggerFieldNumber) {
- // We handle triggers at parse time rather at tokenization because
- // we add slices to tables which need to happen post-sorting.
ParseTrigger(ts, decoder.trigger());
}
+ if (field_id == TracePacket::kChromeTriggerFieldNumber) {
+ ParseChromeTrigger(ts, decoder.chrome_trigger());
+ }
}
void MetadataModule::ParseTrigger(int64_t ts, ConstBytes blob) {
@@ -116,6 +120,20 @@
});
}
+void MetadataModule::ParseChromeTrigger(int64_t ts, ConstBytes blob) {
+ protos::pbzero::ChromeTrigger::Decoder trigger(blob.data, blob.size);
+ StringId cat_id = kNullStringId;
+ TrackId track_id = context_->track_tracker->GetOrCreateTriggerTrack();
+ StringId name_id;
+ if (trigger.has_trigger_name()) {
+ name_id = context_->storage->InternString(trigger.trigger_name());
+ } else {
+ name_id = context_->storage->InternString(trigger.trigger_hash());
+ }
+ context_->slice_tracker->Scoped(ts, track_id, cat_id, name_id,
+ /* duration = */ 0);
+}
+
void MetadataModule::ParseTraceUuid(ConstBytes blob) {
// If both the TraceUuid packet and TraceConfig.trace_uuid_msb/lsb are set,
// the former (which is emitted first) takes precedence. This is because the
diff --git a/src/trace_processor/importers/proto/metadata_module.h b/src/trace_processor/importers/proto/metadata_module.h
index 49e0384..31cbd42 100644
--- a/src/trace_processor/importers/proto/metadata_module.h
+++ b/src/trace_processor/importers/proto/metadata_module.h
@@ -47,6 +47,7 @@
private:
void ParseTrigger(int64_t ts, ConstBytes);
+ void ParseChromeTrigger(int64_t ts, ConstBytes);
void ParseTraceUuid(ConstBytes);
TraceProcessorContext* context_;