Generate proto descriptor for trace protos.

This will be used to parse existing protos for field numbers when
generating protos from ftrace format files.

Bug: 77844626
Change-Id: Idb182753e0a53b6d3a63f7dd855842735663c8aa
diff --git a/gn/standalone/proto_library.gni b/gn/standalone/proto_library.gni
index 1401cc9..3005f78 100644
--- a/gn/standalone/proto_library.gni
+++ b/gn/standalone/proto_library.gni
@@ -38,6 +38,11 @@
     generate_cc = invoker.generate_cc
   }
 
+  generate_descriptor = ""
+  if (defined(invoker.generate_descriptor)) {
+    generate_descriptor = invoker.generate_descriptor
+  }
+
   if (defined(invoker.generator_plugin_label)) {
     plugin_host_label = invoker.generator_plugin_label + "($host_toolchain)"
     plugin_path = get_label_info(plugin_host_label, "root_out_dir") + "/" +
@@ -67,6 +72,10 @@
   protos = rebase_path(proto_sources, proto_in_dir)
   protogens = []
 
+  if (generate_descriptor != "") {
+    protogens += [ "$root_gen_dir/" + generate_descriptor ]
+  }
+
   foreach(proto, protos) {
     proto_dir = get_path_info(proto, "dir")
     proto_name = get_path_info(proto, "name")
@@ -115,6 +124,12 @@
         rel_cc_out_dir,
       ]
     }
+    if (generate_descriptor != "") {
+      args += [
+        "--descriptor_set_out",
+        rebase_path("$root_gen_dir/" + generate_descriptor, root_build_dir),
+      ]
+    }
 
     if (generate_with_plugin) {
       plugin_path_rebased = rebase_path(plugin_path, root_build_dir)
diff --git a/protos/perfetto/trace/BUILD.gn b/protos/perfetto/trace/BUILD.gn
index d58e354..90af5e0 100644
--- a/protos/perfetto/trace/BUILD.gn
+++ b/protos/perfetto/trace/BUILD.gn
@@ -55,6 +55,7 @@
     "ftrace:lite",
     "ps:lite",
   ]
+  generate_descriptor = "$perfetto_root_path/protos/trace/trace.descriptor"
   sources = proto_sources
   proto_in_dir = "$perfetto_root_path/protos"
   proto_out_dir = "$perfetto_root_path/protos"
diff --git a/tools/gen_android_bp b/tools/gen_android_bp
index f71e001..d887501 100755
--- a/tools/gen_android_bp
+++ b/tools/gen_android_bp
@@ -368,6 +368,7 @@
     parser.add_argument('--cpp_out')
     parser.add_argument('--plugin')
     parser.add_argument('--plugin_out')
+    parser.add_argument('--descriptor_set_out')
     parser.add_argument('protos', nargs=argparse.REMAINDER)
     args = parser.parse_args(args[1:])