perfetto_cmd: Teach perfetto_cmd to parse pbtxt configs
Adds the ability for perfetto_cmd to understand pbtxt configs
(this is controlled by the -t/--txt flag). This is somewhat complicated
by perfetto_cmd only having access to protobuf lite.
- Add a cut down version of descriptor.proto
- Use this to generate a (lite) descriptor.pb.h/descriptor.pb.cc
- Convert perfetto_config.proto into a FileSetDescriptor
(perfetto_config.descriptor)
- Encode perfetto_config.descriptor as a C++ constant named
kPerfettoConfigDescriptor (perfetto_config.descriptor.h)
- Use descriptor.pb.h to parse the kPerfettoConfigDescriptor
- Manually parse the incoming config based on the descriptor and
use protozero to write the proto encoding into a buffer which is then
parsed as normal.
Converting perfetto_config.proto to a descriptor happens at commit time
to avoid having to teach google3 and Android build systems how to
convert a proto descriptor into a .h file of the correct format.
This is not a stable API. Backwards and forwards compatible proto format changes
such as renaming a field or removing an optional field are breaking changes to
the proto text format (we can't distinguish between a typo'ed field and an
optional field) so this format is only really designed for local testing.
Several smaller clean ups:
- Move scattered_stream_memory_delegate.{h,cc} to be part of protozero
proper
- Remove the (now empty) src/protozero:test_support target
- Remove unused code in tools/gen_merged_protos
- Remove trailing whitespace in PRESUBMIT.py
Change-Id: Ic59b1338bd83421f68d4e12b4e01b9aaf5aa99be
diff --git a/Android.bp b/Android.bp
index 811700e..4b67947 100644
--- a/Android.bp
+++ b/Android.bp
@@ -63,6 +63,7 @@
"src/protozero/message_handle.cc",
"src/protozero/proto_decoder.cc",
"src/protozero/proto_field_descriptor.cc",
+ "src/protozero/scattered_stream_memory_delegate.cc",
"src/protozero/scattered_stream_null_delegate.cc",
"src/protozero/scattered_stream_writer.cc",
"src/tracing/core/chrome_config.cc",
@@ -207,6 +208,7 @@
"src/protozero/message_handle.cc",
"src/protozero/proto_decoder.cc",
"src/protozero/proto_field_descriptor.cc",
+ "src/protozero/scattered_stream_memory_delegate.cc",
"src/protozero/scattered_stream_null_delegate.cc",
"src/protozero/scattered_stream_writer.cc",
"src/traced/probes/filesystem/file_scanner.cc",
@@ -332,12 +334,14 @@
"src/ipc/service_proxy.cc",
"src/ipc/virtual_destructors.cc",
"src/perfetto_cmd/main.cc",
+ "src/perfetto_cmd/pbtxt_to_pb.cc",
"src/perfetto_cmd/perfetto_cmd.cc",
"src/perfetto_cmd/rate_limiter.cc",
"src/protozero/message.cc",
"src/protozero/message_handle.cc",
"src/protozero/proto_decoder.cc",
"src/protozero/proto_field_descriptor.cc",
+ "src/protozero/scattered_stream_memory_delegate.cc",
"src/protozero/scattered_stream_null_delegate.cc",
"src/protozero/scattered_stream_writer.cc",
"src/tracing/core/chrome_config.cc",
@@ -480,7 +484,7 @@
"src/protozero/message_handle.cc",
"src/protozero/proto_decoder.cc",
"src/protozero/proto_field_descriptor.cc",
- "src/protozero/scattered_stream_delegate_for_testing.cc",
+ "src/protozero/scattered_stream_memory_delegate.cc",
"src/protozero/scattered_stream_null_delegate.cc",
"src/protozero/scattered_stream_writer.cc",
"src/traced/probes/filesystem/file_scanner.cc",
@@ -3929,6 +3933,7 @@
genrule {
name: "perfetto_src_perfetto_cmd_protos_gen",
srcs: [
+ "src/perfetto_cmd/descriptor.proto",
"src/perfetto_cmd/perfetto_cmd_state.proto",
],
tools: [
@@ -3936,6 +3941,7 @@
],
cmd: "mkdir -p $(genDir)/external/perfetto && $(location aprotoc) --cpp_out=$(genDir)/external/perfetto --proto_path=external/perfetto/ $(in)",
out: [
+ "external/perfetto/src/perfetto_cmd/descriptor.pb.cc",
"external/perfetto/src/perfetto_cmd/perfetto_cmd_state.pb.cc",
],
}
@@ -3944,6 +3950,7 @@
genrule {
name: "perfetto_src_perfetto_cmd_protos_gen_headers",
srcs: [
+ "src/perfetto_cmd/descriptor.proto",
"src/perfetto_cmd/perfetto_cmd_state.proto",
],
tools: [
@@ -3951,6 +3958,7 @@
],
cmd: "mkdir -p $(genDir)/external/perfetto && $(location aprotoc) --cpp_out=$(genDir)/external/perfetto --proto_path=external/perfetto/ $(in)",
out: [
+ "external/perfetto/src/perfetto_cmd/descriptor.pb.h",
"external/perfetto/src/perfetto_cmd/perfetto_cmd_state.pb.h",
],
export_include_dirs: [
@@ -4178,6 +4186,7 @@
"src/protozero/message_handle.cc",
"src/protozero/proto_decoder.cc",
"src/protozero/proto_field_descriptor.cc",
+ "src/protozero/scattered_stream_memory_delegate.cc",
"src/protozero/scattered_stream_null_delegate.cc",
"src/protozero/scattered_stream_writer.cc",
"src/tracing/core/chrome_config.cc",
@@ -4385,6 +4394,8 @@
"src/ipc/service_proxy.cc",
"src/ipc/test/ipc_integrationtest.cc",
"src/ipc/virtual_destructors.cc",
+ "src/perfetto_cmd/pbtxt_to_pb.cc",
+ "src/perfetto_cmd/pbtxt_to_pb_unittest.cc",
"src/perfetto_cmd/perfetto_cmd.cc",
"src/perfetto_cmd/rate_limiter.cc",
"src/perfetto_cmd/rate_limiter_unittest.cc",
@@ -4415,7 +4426,7 @@
"src/protozero/proto_decoder_unittest.cc",
"src/protozero/proto_field_descriptor.cc",
"src/protozero/proto_utils_unittest.cc",
- "src/protozero/scattered_stream_delegate_for_testing.cc",
+ "src/protozero/scattered_stream_memory_delegate.cc",
"src/protozero/scattered_stream_null_delegate.cc",
"src/protozero/scattered_stream_writer.cc",
"src/protozero/scattered_stream_writer_unittest.cc",