Added .proto and targets for minimal 'lite' TracePacket for Chrome
Bug: 78791178
Change-Id: Iebc458505015ab0cdafcf54f8206fae004bae690
diff --git a/Android.bp b/Android.bp
index 65684ee..0579556 100644
--- a/Android.bp
+++ b/Android.bp
@@ -27,6 +27,7 @@
":perfetto_protos_perfetto_trace_ftrace_zero_gen",
":perfetto_protos_perfetto_trace_minimal_lite_gen",
":perfetto_protos_perfetto_trace_ps_zero_gen",
+ ":perfetto_protos_perfetto_trace_trusted_lite_gen",
":perfetto_protos_perfetto_trace_zero_gen",
":perfetto_src_ipc_wire_protocol_gen",
"src/base/file_utils.cc",
@@ -110,6 +111,7 @@
"perfetto_protos_perfetto_trace_ftrace_zero_gen_headers",
"perfetto_protos_perfetto_trace_minimal_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_zero_gen_headers",
+ "perfetto_protos_perfetto_trace_trusted_lite_gen_headers",
"perfetto_protos_perfetto_trace_zero_gen_headers",
"perfetto_src_ipc_wire_protocol_gen_headers",
],
@@ -135,6 +137,7 @@
":perfetto_protos_perfetto_trace_ftrace_zero_gen",
":perfetto_protos_perfetto_trace_minimal_lite_gen",
":perfetto_protos_perfetto_trace_ps_zero_gen",
+ ":perfetto_protos_perfetto_trace_trusted_lite_gen",
":perfetto_protos_perfetto_trace_zero_gen",
":perfetto_src_ipc_wire_protocol_gen",
":perfetto_src_perfetto_cmd_protos_gen",
@@ -208,6 +211,7 @@
"perfetto_protos_perfetto_trace_ftrace_zero_gen_headers",
"perfetto_protos_perfetto_trace_minimal_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_zero_gen_headers",
+ "perfetto_protos_perfetto_trace_trusted_lite_gen_headers",
"perfetto_protos_perfetto_trace_zero_gen_headers",
"perfetto_src_ipc_wire_protocol_gen_headers",
"perfetto_src_perfetto_cmd_protos_gen_headers",
@@ -260,6 +264,7 @@
":perfetto_protos_perfetto_trace_minimal_lite_gen",
":perfetto_protos_perfetto_trace_ps_lite_gen",
":perfetto_protos_perfetto_trace_ps_zero_gen",
+ ":perfetto_protos_perfetto_trace_trusted_lite_gen",
":perfetto_protos_perfetto_trace_zero_gen",
":perfetto_src_ipc_wire_protocol_gen",
"src/base/android_task_runner.cc",
@@ -359,6 +364,7 @@
"perfetto_protos_perfetto_trace_minimal_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_zero_gen_headers",
+ "perfetto_protos_perfetto_trace_trusted_lite_gen_headers",
"perfetto_protos_perfetto_trace_zero_gen_headers",
"perfetto_src_ipc_wire_protocol_gen_headers",
],
@@ -2932,7 +2938,6 @@
srcs: [
"protos/perfetto/trace/clock_snapshot.proto",
"protos/perfetto/trace/trace_stats.proto",
- "protos/perfetto/trace/trusted_packet.proto",
],
tools: [
"aprotoc",
@@ -2941,7 +2946,6 @@
out: [
"external/perfetto/protos/perfetto/trace/clock_snapshot.pb.cc",
"external/perfetto/protos/perfetto/trace/trace_stats.pb.cc",
- "external/perfetto/protos/perfetto/trace/trusted_packet.pb.cc",
],
}
@@ -2951,7 +2955,6 @@
srcs: [
"protos/perfetto/trace/clock_snapshot.proto",
"protos/perfetto/trace/trace_stats.proto",
- "protos/perfetto/trace/trusted_packet.proto",
],
tools: [
"aprotoc",
@@ -2960,7 +2963,6 @@
out: [
"external/perfetto/protos/perfetto/trace/clock_snapshot.pb.h",
"external/perfetto/protos/perfetto/trace/trace_stats.pb.h",
- "external/perfetto/protos/perfetto/trace/trusted_packet.pb.h",
],
export_include_dirs: [
"protos",
@@ -3035,6 +3037,39 @@
],
}
+// GN target: //protos/perfetto/trace:trusted_lite_gen
+genrule {
+ name: "perfetto_protos_perfetto_trace_trusted_lite_gen",
+ srcs: [
+ "protos/perfetto/trace/trusted_packet.proto",
+ ],
+ tools: [
+ "aprotoc",
+ ],
+ cmd: "mkdir -p $(genDir)/external/perfetto/protos && $(location aprotoc) --cpp_out=$(genDir)/external/perfetto/protos --proto_path=external/perfetto/protos $(in)",
+ out: [
+ "external/perfetto/protos/perfetto/trace/trusted_packet.pb.cc",
+ ],
+}
+
+// GN target: //protos/perfetto/trace:trusted_lite_gen
+genrule {
+ name: "perfetto_protos_perfetto_trace_trusted_lite_gen_headers",
+ srcs: [
+ "protos/perfetto/trace/trusted_packet.proto",
+ ],
+ tools: [
+ "aprotoc",
+ ],
+ cmd: "mkdir -p $(genDir)/external/perfetto/protos && $(location aprotoc) --cpp_out=$(genDir)/external/perfetto/protos --proto_path=external/perfetto/protos $(in)",
+ out: [
+ "external/perfetto/protos/perfetto/trace/trusted_packet.pb.h",
+ ],
+ export_include_dirs: [
+ "protos",
+ ],
+}
+
// GN target: //protos/perfetto/trace:zero_gen
genrule {
name: "perfetto_protos_perfetto_trace_zero_gen",
@@ -3044,7 +3079,6 @@
"protos/perfetto/trace/trace.proto",
"protos/perfetto/trace/trace_packet.proto",
"protos/perfetto/trace/trace_stats.proto",
- "protos/perfetto/trace/trusted_packet.proto",
],
tools: [
"aprotoc",
@@ -3057,7 +3091,6 @@
"external/perfetto/protos/perfetto/trace/trace.pbzero.cc",
"external/perfetto/protos/perfetto/trace/trace_packet.pbzero.cc",
"external/perfetto/protos/perfetto/trace/trace_stats.pbzero.cc",
- "external/perfetto/protos/perfetto/trace/trusted_packet.pbzero.cc",
],
}
@@ -3070,7 +3103,6 @@
"protos/perfetto/trace/trace.proto",
"protos/perfetto/trace/trace_packet.proto",
"protos/perfetto/trace/trace_stats.proto",
- "protos/perfetto/trace/trusted_packet.proto",
],
tools: [
"aprotoc",
@@ -3083,7 +3115,6 @@
"external/perfetto/protos/perfetto/trace/trace.pbzero.h",
"external/perfetto/protos/perfetto/trace/trace_packet.pbzero.h",
"external/perfetto/protos/perfetto/trace/trace_stats.pbzero.h",
- "external/perfetto/protos/perfetto/trace/trusted_packet.pbzero.h",
],
export_include_dirs: [
"protos",
@@ -3416,6 +3447,7 @@
":perfetto_protos_perfetto_trace_ftrace_zero_gen",
":perfetto_protos_perfetto_trace_minimal_lite_gen",
":perfetto_protos_perfetto_trace_ps_zero_gen",
+ ":perfetto_protos_perfetto_trace_trusted_lite_gen",
":perfetto_protos_perfetto_trace_zero_gen",
":perfetto_src_ipc_wire_protocol_gen",
"src/base/file_utils.cc",
@@ -3487,6 +3519,7 @@
"perfetto_protos_perfetto_trace_ftrace_zero_gen_headers",
"perfetto_protos_perfetto_trace_minimal_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_zero_gen_headers",
+ "perfetto_protos_perfetto_trace_trusted_lite_gen_headers",
"perfetto_protos_perfetto_trace_zero_gen_headers",
"perfetto_src_ipc_wire_protocol_gen_headers",
],
@@ -3500,6 +3533,7 @@
"perfetto_protos_perfetto_trace_ftrace_zero_gen_headers",
"perfetto_protos_perfetto_trace_minimal_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_zero_gen_headers",
+ "perfetto_protos_perfetto_trace_trusted_lite_gen_headers",
"perfetto_protos_perfetto_trace_zero_gen_headers",
"perfetto_src_ipc_wire_protocol_gen_headers",
],
@@ -3577,6 +3611,7 @@
":perfetto_protos_perfetto_trace_minimal_lite_gen",
":perfetto_protos_perfetto_trace_ps_lite_gen",
":perfetto_protos_perfetto_trace_ps_zero_gen",
+ ":perfetto_protos_perfetto_trace_trusted_lite_gen",
":perfetto_protos_perfetto_trace_zero_gen",
":perfetto_src_ftrace_reader_ftrace_reader_test_messages_lite_gen",
":perfetto_src_ftrace_reader_ftrace_reader_test_messages_zero_gen",
@@ -3744,6 +3779,7 @@
"perfetto_protos_perfetto_trace_minimal_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_lite_gen_headers",
"perfetto_protos_perfetto_trace_ps_zero_gen_headers",
+ "perfetto_protos_perfetto_trace_trusted_lite_gen_headers",
"perfetto_protos_perfetto_trace_zero_gen_headers",
"perfetto_src_ftrace_reader_ftrace_reader_test_messages_lite_gen_headers",
"perfetto_src_ftrace_reader_ftrace_reader_test_messages_zero_gen_headers",
diff --git a/include/perfetto/tracing/core/trace_packet.h b/include/perfetto/tracing/core/trace_packet.h
index 66c5eba..3c9d44c 100644
--- a/include/perfetto/tracing/core/trace_packet.h
+++ b/include/perfetto/tracing/core/trace_packet.h
@@ -60,7 +60,7 @@
// Decodes the packet. This function requires that the caller:
// 1) Does #include "perfetto/trace/trace_packet.pb.h"
// 2) Links against the //protos/trace:lite target.
- // The core service code delierately doesn't link against that in order to
+ // The core service code deliberately doesn't link against that in order to
// avoid binary bloat. This is the reason why this is a templated function.
// It doesn't need to be (i.e. the caller should not specify the template
// argument) but doing so prevents the compiler trying to resolve the
diff --git a/protos/perfetto/trace/BUILD.gn b/protos/perfetto/trace/BUILD.gn
index 64f2489..60d8259 100644
--- a/protos/perfetto/trace/BUILD.gn
+++ b/protos/perfetto/trace/BUILD.gn
@@ -21,9 +21,10 @@
proto_sources_minimal = [
"clock_snapshot.proto",
"trace_stats.proto",
- "trusted_packet.proto",
]
+proto_sources_trusted = [ "trusted_packet.proto" ]
+
proto_sources = [
"test_event.proto",
"trace_packet.proto",
@@ -64,7 +65,7 @@
proto_out_dir = "$perfetto_root_path/protos"
}
-# Used by the traced service for packet sanitization.
+# Contains the subprotos of TracePacket that all targets need.
proto_library("minimal_lite") {
generate_python = false
deps = [
@@ -75,6 +76,18 @@
proto_out_dir = "$perfetto_root_path/protos"
}
+# Used by the traced service for packet sanitization.
+proto_library("trusted_lite") {
+ generate_python = false
+ deps = [
+ ":minimal_lite",
+ "../config:config",
+ ]
+ sources = proto_sources_trusted
+ proto_in_dir = "$perfetto_root_path/protos"
+ proto_out_dir = "$perfetto_root_path/protos"
+}
+
# This target is not used in the tree and is built only to guarantee that the
# autogenerated merged proto has a valid syntax.
proto_library("merged_trace") {
diff --git a/protos/perfetto/trace/chrome/BUILD.gn b/protos/perfetto/trace/chrome/BUILD.gn
index 6cf9a2f..4a6735f 100644
--- a/protos/perfetto/trace/chrome/BUILD.gn
+++ b/protos/perfetto/trace/chrome/BUILD.gn
@@ -16,6 +16,7 @@
import("../../../../src/protozero/protozero_library.gni")
chrome_proto_names = [ "chrome_trace_event.proto" ]
+minimal_chrome_proto_names = [ "chrome_trace_packet.proto" ]
proto_library("lite") {
generate_python = false
@@ -30,3 +31,15 @@
proto_out_dir = "$perfetto_root_path/protos"
generator_plugin_options = "wrapper_namespace=pbzero"
}
+
+proto_library("minimal_complete_lite") {
+ generate_python = false
+ deps = [
+ ":lite",
+ "../:minimal_lite",
+ "../../config:config",
+ ]
+ sources = minimal_chrome_proto_names
+ proto_in_dir = "$perfetto_root_path/protos"
+ proto_out_dir = "$perfetto_root_path/protos"
+}
diff --git a/protos/perfetto/trace/chrome/chrome_trace_packet.proto b/protos/perfetto/trace/chrome/chrome_trace_packet.proto
new file mode 100644
index 0000000..76eab46
--- /dev/null
+++ b/protos/perfetto/trace/chrome/chrome_trace_packet.proto
@@ -0,0 +1,49 @@
+/*
+ * Copyright (C) 2018 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.
+ */
+
+// Use proto3 syntax as an optimization. The difference is that proto2 stores
+// unknown fields seen while decoding in an internal buffer (std::string) while
+// proto3 completely drops them. Since during validation we only need to check
+// for the presence of the trusted fields below, we can use proto3 as a way to
+// speed up this process.
+//
+// See https://developers.google.com/protocol-buffers/docs/proto3#unknowns and
+// https://android-review.googlesource.com/c/platform/external/perfetto/+/
+// 591673#17 for details.
+syntax = "proto3";
+option optimize_for = LITE_RUNTIME;
+
+import "perfetto/config/trace_config.proto";
+import "perfetto/trace/chrome/chrome_trace_event.proto";
+import "perfetto/trace/clock_snapshot.proto";
+import "perfetto/trace/trace_stats.proto";
+
+package perfetto.protos;
+
+// This proto contains only the TracePacket fields that Chrome needs.
+// Note that the field ids here must be kept in sync with TracePacket.
+// This protobuf is here to avoid bloating the Chrome binary with symbols
+// for all possible trace protos.
+// TODO(b/78898755): Try using weak bindings instead of a separate proto.
+message ChromeTracePacket {
+ ChromeEventBundle chrome_events = 5;
+
+ // The original trace config.
+ TraceConfig trace_config = 33;
+ TraceStats trace_stats = 35;
+
+ ClockSnapshot clock_snapshot = 6;
+}
diff --git a/src/tracing/BUILD.gn b/src/tracing/BUILD.gn
index 6b718a2..4415938 100644
--- a/src/tracing/BUILD.gn
+++ b/src/tracing/BUILD.gn
@@ -20,7 +20,7 @@
public_deps = [
"../../include/perfetto/tracing/core",
"../../protos/perfetto/common",
- "../../protos/perfetto/trace:minimal_lite",
+ "../../protos/perfetto/trace:trusted_lite",
"../../protos/perfetto/trace:zero",
]
deps = [