tp: Add TrackEvent plugin registry + android_track_event_process table

TrackEventParser gains a field-id-keyed plugin registry.

The frameworks/base plugin feeds the process table from process
lifecycle events -- start sets name/uid via GetOrCreateProcess,
binder-died EndThread()s the pid -- and keeps the framework start/end
timestamps in the new __intrinsic_android_track_event_process table
(upid, fw_start_ts, fw_end_ts).

Drops the aliased IMPORTANCE_BACKGROUND enumerator, which pbzero's
switch-based ToString rejects under -Werror. This field is
deprecated in favor of importance_cached anyways.

Change-Id: I958d9c9707d0f5629a17eb3468beb82a20fbf923
diff --git a/Android.bp b/Android.bp
index 13f8399..8a920fc 100644
--- a/Android.bp
+++ b/Android.bp
@@ -3001,6 +3001,7 @@
         ":perfetto_protos_perfetto_trace_translation_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen",
+        ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen",
         ":perfetto_protos_third_party_chromium_zero_gen",
         ":perfetto_protos_third_party_pprof_zero_gen",
         ":perfetto_protos_third_party_primes_cpp_gen",
@@ -3119,6 +3120,7 @@
         ":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
         ":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":perfetto_src_trace_processor_plugins_ancestor_ancestor",
+        ":perfetto_src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":perfetto_src_trace_processor_plugins_args_args",
         ":perfetto_src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":perfetto_src_trace_processor_plugins_base64_functions_base64_functions",
@@ -3425,6 +3427,7 @@
         "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen_headers",
+        "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
         "perfetto_protos_third_party_chromium_zero_gen_headers",
         "perfetto_protos_third_party_pprof_zero_gen_headers",
         "perfetto_protos_third_party_primes_cpp_gen_headers",
@@ -14762,6 +14765,52 @@
     ],
 }
 
+// GN: //protos/third_party/android/frameworks/base/proto/tracing:frameworks_base_track_event_zero
+filegroup {
+    name: "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
+    srcs: [
+        "protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.proto",
+    ],
+}
+
+// GN: //protos/third_party/android/frameworks/base/proto/tracing:frameworks_base_track_event_zero
+genrule {
+    name: "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_track_event_zero",
+        ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
+    ],
+    tools: [
+        "aprotoc",
+        "protozero_plugin",
+    ],
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero)",
+    out: [
+        "external/perfetto/protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.pbzero.cc",
+    ],
+}
+
+// GN: //protos/third_party/android/frameworks/base/proto/tracing:frameworks_base_track_event_zero
+genrule {
+    name: "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
+    srcs: [
+        ":perfetto_protos_perfetto_trace_track_event_zero",
+        ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
+    ],
+    tools: [
+        "aprotoc",
+        "protozero_plugin",
+    ],
+    cmd: "mkdir -p $(genDir)/external/perfetto/ && $(location aprotoc) --proto_path=external/perfetto --plugin=protoc-gen-plugin=$(location protozero_plugin) --plugin_out=wrapper_namespace=pbzero:$(genDir)/external/perfetto/ $(locations :perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero)",
+    out: [
+        "external/perfetto/protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.pbzero.h",
+    ],
+    export_include_dirs: [
+        ".",
+        "protos",
+    ],
+}
+
 // GN: //protos/third_party/chromium:descriptor
 genrule {
     name: "perfetto_protos_third_party_chromium_descriptor",
@@ -17711,6 +17760,7 @@
     name: "perfetto_src_trace_processor_importers_proto_proto_importer_module",
     srcs: [
         "src/trace_processor/importers/proto/proto_importer_module.cc",
+        "src/trace_processor/importers/proto/track_event_plugin.cc",
     ],
 }
 
@@ -18699,6 +18749,14 @@
     ],
 }
 
+// GN: //src/trace_processor/plugins/android_framework_track_event:android_framework_track_event
+filegroup {
+    name: "perfetto_src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
+    srcs: [
+        "src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.cc",
+    ],
+}
+
 // GN: //src/trace_processor/plugins/args:args
 filegroup {
     name: "perfetto_src_trace_processor_plugins_args_args",
@@ -20154,6 +20212,7 @@
         ":perfetto_protos_perfetto_trace_translation_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen",
+        ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen",
         ":perfetto_protos_third_party_chromium_zero_gen",
         ":perfetto_protos_third_party_pprof_zero_gen",
         ":perfetto_protos_third_party_primes_cpp_gen",
@@ -20234,6 +20293,7 @@
         ":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
         ":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":perfetto_src_trace_processor_plugins_ancestor_ancestor",
+        ":perfetto_src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":perfetto_src_trace_processor_plugins_args_args",
         ":perfetto_src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":perfetto_src_trace_processor_plugins_base64_functions_base64_functions",
@@ -20400,6 +20460,7 @@
         "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen_headers",
+        "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
         "perfetto_protos_third_party_chromium_zero_gen_headers",
         "perfetto_protos_third_party_pprof_zero_gen_headers",
         "perfetto_protos_third_party_primes_cpp_gen_headers",
@@ -20500,6 +20561,7 @@
         "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen_headers",
+        "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
         "perfetto_protos_third_party_chromium_zero_gen_headers",
         "perfetto_protos_third_party_pprof_zero_gen_headers",
         "perfetto_protos_third_party_primes_cpp_gen_headers",
@@ -22671,6 +22733,7 @@
         ":perfetto_protos_perfetto_trace_translation_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen",
+        ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen",
         ":perfetto_protos_third_party_chromium_zero_gen",
         ":perfetto_protos_third_party_pprof_zero_gen",
         ":perfetto_protos_third_party_primes_cpp_gen",
@@ -22862,6 +22925,7 @@
         ":perfetto_src_trace_processor_perfetto_sql_tokenizer_unittests",
         ":perfetto_src_trace_processor_plugins_ancestor_ancestor",
         ":perfetto_src_trace_processor_plugins_ancestor_unittests",
+        ":perfetto_src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":perfetto_src_trace_processor_plugins_args_args",
         ":perfetto_src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":perfetto_src_trace_processor_plugins_base64_functions_base64_functions",
@@ -23217,6 +23281,7 @@
         "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen_headers",
+        "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
         "perfetto_protos_third_party_chromium_zero_gen_headers",
         "perfetto_protos_third_party_pprof_zero_gen_headers",
         "perfetto_protos_third_party_primes_cpp_gen_headers",
@@ -23856,6 +23921,7 @@
         ":perfetto_protos_perfetto_trace_translation_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen",
+        ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen",
         ":perfetto_protos_third_party_chromium_zero_gen",
         ":perfetto_protos_third_party_pprof_zero_gen",
         ":perfetto_protos_third_party_primes_cpp_gen",
@@ -23932,6 +23998,7 @@
         ":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
         ":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":perfetto_src_trace_processor_plugins_ancestor_ancestor",
+        ":perfetto_src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":perfetto_src_trace_processor_plugins_args_args",
         ":perfetto_src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":perfetto_src_trace_processor_plugins_base64_functions_base64_functions",
@@ -24087,6 +24154,7 @@
         "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen_headers",
+        "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
         "perfetto_protos_third_party_chromium_zero_gen_headers",
         "perfetto_protos_third_party_pprof_zero_gen_headers",
         "perfetto_protos_third_party_primes_cpp_gen_headers",
@@ -24183,6 +24251,7 @@
         "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen_headers",
+        "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
         "perfetto_protos_third_party_chromium_zero_gen_headers",
         "perfetto_protos_third_party_pprof_zero_gen_headers",
         "perfetto_protos_third_party_primes_cpp_gen_headers",
@@ -24509,6 +24578,7 @@
         ":perfetto_protos_perfetto_trace_translation_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen",
         ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen",
+        ":perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen",
         ":perfetto_protos_third_party_chromium_zero_gen",
         ":perfetto_protos_third_party_pprof_zero_gen",
         ":perfetto_protos_third_party_primes_cpp_gen",
@@ -24587,6 +24657,7 @@
         ":perfetto_src_trace_processor_perfetto_sql_syntaqlite_syntaqlite",
         ":perfetto_src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":perfetto_src_trace_processor_plugins_ancestor_ancestor",
+        ":perfetto_src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":perfetto_src_trace_processor_plugins_args_args",
         ":perfetto_src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":perfetto_src_trace_processor_plugins_base64_functions_base64_functions",
@@ -24751,6 +24822,7 @@
         "perfetto_protos_perfetto_trace_translation_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero_gen_headers",
         "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero_gen_headers",
+        "perfetto_protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero_gen_headers",
         "perfetto_protos_third_party_chromium_zero_gen_headers",
         "perfetto_protos_third_party_pprof_zero_gen_headers",
         "perfetto_protos_third_party_primes_cpp_gen_headers",
diff --git a/BUILD b/BUILD
index a6917af..dbb2008 100644
--- a/BUILD
+++ b/BUILD
@@ -464,6 +464,7 @@
         ":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":src_trace_processor_plugins_ancestor_ancestor",
         ":src_trace_processor_plugins_ancestor_tables",
+        ":src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":src_trace_processor_plugins_args_args",
         ":src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":src_trace_processor_plugins_base64_functions_base64_functions",
@@ -645,6 +646,7 @@
                ":protos_perfetto_trace_translation_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero",
+               ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
                ":protos_third_party_chromium_zero",
                ":protos_third_party_pprof_zero",
                ":protos_third_party_primes_cpp",
@@ -755,6 +757,7 @@
         ":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":src_trace_processor_plugins_ancestor_ancestor",
         ":src_trace_processor_plugins_ancestor_tables",
+        ":src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":src_trace_processor_plugins_args_args",
         ":src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":src_trace_processor_plugins_base64_functions_base64_functions",
@@ -950,6 +953,7 @@
                ":protos_perfetto_trace_translation_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero",
+               ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
                ":protos_third_party_chromium_zero",
                ":protos_third_party_pprof_zero",
                ":protos_third_party_primes_cpp",
@@ -3258,6 +3262,8 @@
     srcs = [
         "src/trace_processor/importers/proto/proto_importer_module.cc",
         "src/trace_processor/importers/proto/proto_importer_module.h",
+        "src/trace_processor/importers/proto/track_event_plugin.cc",
+        "src/trace_processor/importers/proto/track_event_plugin.h",
     ],
 )
 
@@ -4327,6 +4333,15 @@
     ],
 )
 
+# GN target: //src/trace_processor/plugins/android_framework_track_event:android_framework_track_event
+perfetto_filegroup(
+    name = "src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
+    srcs = [
+        "src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.cc",
+        "src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.h",
+    ],
+)
+
 # GN target: //src/trace_processor/plugins/args:args
 perfetto_filegroup(
     name = "src_trace_processor_plugins_args_args",
@@ -10007,6 +10022,15 @@
     ],
 )
 
+# GN target: //protos/third_party/android/frameworks/base/proto/tracing:frameworks_base_track_event_zero
+perfetto_cc_protozero_library(
+    name = "protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
+    deps = [
+        ":protos_perfetto_trace_track_event_zero",
+        ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_protos",
+    ],
+)
+
 # GN target: //protos/third_party/android/frameworks/native/tracing:frameworks_native_track_event_source_set
 perfetto_proto_library(
     name = "protos_third_party_android_frameworks_native_tracing_frameworks_native_track_event_protos",
@@ -10473,6 +10497,7 @@
         ":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":src_trace_processor_plugins_ancestor_ancestor",
         ":src_trace_processor_plugins_ancestor_tables",
+        ":src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":src_trace_processor_plugins_args_args",
         ":src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":src_trace_processor_plugins_base64_functions_base64_functions",
@@ -10654,6 +10679,7 @@
                ":protos_perfetto_trace_translation_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero",
+               ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
                ":protos_third_party_chromium_zero",
                ":protos_third_party_pprof_zero",
                ":protos_third_party_primes_cpp",
@@ -10794,6 +10820,7 @@
         ":src_trace_processor_perfetto_sql_tokenizer_tokenizer",
         ":src_trace_processor_plugins_ancestor_ancestor",
         ":src_trace_processor_plugins_ancestor_tables",
+        ":src_trace_processor_plugins_android_framework_track_event_android_framework_track_event",
         ":src_trace_processor_plugins_args_args",
         ":src_trace_processor_plugins_art_heap_graph_functions_art_heap_graph_functions",
         ":src_trace_processor_plugins_base64_functions_base64_functions",
@@ -10966,6 +10993,7 @@
                ":protos_perfetto_trace_translation_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_interned_data_zero",
                ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_trace_packet_zero",
+               ":protos_third_party_android_frameworks_base_proto_tracing_frameworks_base_track_event_zero",
                ":protos_third_party_chromium_zero",
                ":protos_third_party_pprof_zero",
                ":protos_third_party_primes_cpp",
diff --git a/protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.proto b/protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.proto
index 4f4b399..8c3d066 100644
--- a/protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.proto
+++ b/protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.proto
@@ -277,8 +277,6 @@
 }
 
 enum Importance {
-  option allow_alias = true;
-
   IMPORTANCE_UNKNOWN = 0;
   IMPORTANCE_FOREGROUND = 100;
   IMPORTANCE_FOREGROUND_SERVICE = 125;
@@ -291,7 +289,6 @@
   IMPORTANCE_TOP_SLEEPING = 325;
   IMPORTANCE_CANT_SAVE_STATE = 350;
   IMPORTANCE_CACHED = 400;
-  IMPORTANCE_BACKGROUND = 400;
   IMPORTANCE_EMPTY = 500;
   IMPORTANCE_GONE = 1000;
 }
diff --git a/src/trace_processor/BUILD.gn b/src/trace_processor/BUILD.gn
index f738973..69771f6 100644
--- a/src/trace_processor/BUILD.gn
+++ b/src/trace_processor/BUILD.gn
@@ -203,6 +203,7 @@
       "perfetto_sql/generator",
       "perfetto_sql/stdlib",
       "plugins/ancestor",
+      "plugins/android_framework_track_event",
       "plugins/args",
       "plugins/art_heap_graph_functions",
       "plugins/base64_functions",
diff --git a/src/trace_processor/importers/proto/BUILD.gn b/src/trace_processor/importers/proto/BUILD.gn
index b0f9142..62d58a8 100644
--- a/src/trace_processor/importers/proto/BUILD.gn
+++ b/src/trace_processor/importers/proto/BUILD.gn
@@ -255,6 +255,8 @@
   sources = [
     "proto_importer_module.cc",
     "proto_importer_module.h",
+    "track_event_plugin.cc",
+    "track_event_plugin.h",
   ]
   public_deps = [ ":packet_sequence_state_generation_hdr" ]
   deps = [
@@ -262,6 +264,7 @@
     "../../../../gn:default_deps",
     "../../../../include/perfetto/trace_processor:trace_processor",
     "../../../base",
+    "../../../protozero",
     "../../sorter",
     "../../types",
     "../common:parser_types",
diff --git a/src/trace_processor/importers/proto/additional_modules.cc b/src/trace_processor/importers/proto/additional_modules.cc
index 6a0c537..6b6a35b 100644
--- a/src/trace_processor/importers/proto/additional_modules.cc
+++ b/src/trace_processor/importers/proto/additional_modules.cc
@@ -41,6 +41,7 @@
 #include "src/trace_processor/importers/proto/statsd_module.h"
 #include "src/trace_processor/importers/proto/system_probes_module.h"
 #include "src/trace_processor/importers/proto/trace.descriptor.h"
+#include "src/trace_processor/importers/proto/track_event_module.h"
 #include "src/trace_processor/importers/proto/translation_table_module.h"
 #include "src/trace_processor/importers/proto/v8_module.h"
 #include "src/trace_processor/types/trace_processor_context.h"
diff --git a/src/trace_processor/importers/proto/proto_importer_module.h b/src/trace_processor/importers/proto/proto_importer_module.h
index 1a3b564..99c6642 100644
--- a/src/trace_processor/importers/proto/proto_importer_module.h
+++ b/src/trace_processor/importers/proto/proto_importer_module.h
@@ -29,6 +29,7 @@
 #include "perfetto/trace_processor/ref_counted.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/track_event_plugin.h"
 #include "src/trace_processor/sorter/trace_sorter.h"
 
 namespace perfetto {
@@ -180,6 +181,9 @@
   EtwModule* etw_module = nullptr;
   TrackEventModule* track_module = nullptr;
 
+  // TrackEvent extensions, populated by plugins and read by TrackEventParser.
+  TrackEventPluginRegistry track_event_plugins;
+
   std::unique_ptr<TraceSorter::Stream<TracePacketData>> trace_packet_stream;
   std::unique_ptr<TraceSorter::Stream<TrackEventData>> track_event_stream;
 
diff --git a/src/trace_processor/importers/proto/track_event_event_importer.h b/src/trace_processor/importers/proto/track_event_event_importer.h
index c7cb96c..957b0a9 100644
--- a/src/trace_processor/importers/proto/track_event_event_importer.h
+++ b/src/trace_processor/importers/proto/track_event_event_importer.h
@@ -1297,6 +1297,7 @@
         parser_->AddActiveProcess(ts_, *it);
       }
     }
+
     if (event_.has_correlation_id()) {
       base::StackString<512> id_str("tp:#%" PRIu64, event_.correlation_id());
       inserter->AddArg(parser_->correlation_id_key_id_,
diff --git a/src/trace_processor/importers/proto/track_event_module.cc b/src/trace_processor/importers/proto/track_event_module.cc
index abb9394..ba73745 100644
--- a/src/trace_processor/importers/proto/track_event_module.cc
+++ b/src/trace_processor/importers/proto/track_event_module.cc
@@ -41,7 +41,9 @@
     : ProtoImporterModule(module_context),
       track_event_tracker_(new TrackEventTracker(context)),
       tokenizer_(module_context, context, track_event_tracker_.get()),
-      parser_(context, track_event_tracker_.get()) {
+      parser_(context,
+              track_event_tracker_.get(),
+              &module_context->track_event_plugins) {
   RegisterForField(TracePacket::kTrackEventRangeOfInterestFieldNumber);
   RegisterForField(TracePacket::kTrackEventFieldNumber);
   RegisterForField(TracePacket::kTrackDescriptorFieldNumber);
diff --git a/src/trace_processor/importers/proto/track_event_parser.cc b/src/trace_processor/importers/proto/track_event_parser.cc
index a146127..449a522 100644
--- a/src/trace_processor/importers/proto/track_event_parser.cc
+++ b/src/trace_processor/importers/proto/track_event_parser.cc
@@ -133,10 +133,12 @@
 }  // namespace
 
 TrackEventParser::TrackEventParser(TraceProcessorContext* context,
-                                   TrackEventTracker* track_event_tracker)
+                                   TrackEventTracker* track_event_tracker,
+                                   const TrackEventPluginRegistry* plugins)
     : args_parser_(*context->descriptor_pool_),
       context_(context),
       track_event_tracker_(track_event_tracker),
+      plugins_(plugins),
       counter_name_thread_time_id_(
           context->storage->InternString("thread_time")),
       counter_name_thread_instruction_count_id_(
@@ -455,6 +457,8 @@
         stats::track_event_dropped_packets_outside_of_range_of_interest);
     return;
   }
+  plugins_->ParseFields(blob, ts);
+
   base::Status status =
       TrackEventEventImporter(this, ts, event_data, blob, packet_sequence_id)
           .Import();
diff --git a/src/trace_processor/importers/proto/track_event_parser.h b/src/trace_processor/importers/proto/track_event_parser.h
index d7acfa8..a66a4f8 100644
--- a/src/trace_processor/importers/proto/track_event_parser.h
+++ b/src/trace_processor/importers/proto/track_event_parser.h
@@ -25,6 +25,7 @@
 #include "src/trace_processor/importers/common/slice_tracker.h"
 #include "src/trace_processor/importers/proto/active_chrome_processes_tracker.h"
 #include "src/trace_processor/importers/proto/chrome_string_lookup.h"
+#include "src/trace_processor/importers/proto/track_event_plugin.h"
 #include "src/trace_processor/storage/trace_storage.h"
 #include "src/trace_processor/util/proto_to_args_parser.h"
 
@@ -49,7 +50,9 @@
 
 class TrackEventParser {
  public:
-  TrackEventParser(TraceProcessorContext*, TrackEventTracker*);
+  TrackEventParser(TraceProcessorContext*,
+                   TrackEventTracker*,
+                   const TrackEventPluginRegistry*);
 
   void ParseTrackDescriptor(int64_t packet_timestamp,
                             protozero::ConstBytes,
@@ -79,6 +82,7 @@
 
   TraceProcessorContext* context_;
   TrackEventTracker* track_event_tracker_;
+  const TrackEventPluginRegistry* plugins_;
 
   const StringId counter_name_thread_time_id_;
   const StringId counter_name_thread_instruction_count_id_;
diff --git a/src/trace_processor/importers/proto/track_event_plugin.cc b/src/trace_processor/importers/proto/track_event_plugin.cc
new file mode 100644
index 0000000..b1da7cf
--- /dev/null
+++ b/src/trace_processor/importers/proto/track_event_plugin.cc
@@ -0,0 +1,23 @@
+/*
+ * Copyright (C) 2026 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.
+ */
+
+#include "src/trace_processor/importers/proto/track_event_plugin.h"
+
+namespace perfetto::trace_processor {
+
+TrackEventPlugin::~TrackEventPlugin() = default;
+
+}  // namespace perfetto::trace_processor
diff --git a/src/trace_processor/importers/proto/track_event_plugin.h b/src/trace_processor/importers/proto/track_event_plugin.h
new file mode 100644
index 0000000..2680cb6
--- /dev/null
+++ b/src/trace_processor/importers/proto/track_event_plugin.h
@@ -0,0 +1,71 @@
+/*
+ * Copyright (C) 2026 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.
+ */
+
+#ifndef SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_TRACK_EVENT_PLUGIN_H_
+#define SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_TRACK_EVENT_PLUGIN_H_
+
+#include <cstdint>
+#include <initializer_list>
+#include <memory>
+#include <vector>
+
+#include "perfetto/ext/base/flat_hash_map.h"
+#include "perfetto/protozero/field.h"
+#include "perfetto/protozero/proto_decoder.h"
+
+namespace perfetto::trace_processor {
+
+// Parses an extension field nested inside a TrackEvent. Registered against one
+// or more TrackEvent field ids; ParseField runs for each matching field.
+class TrackEventPlugin {
+ public:
+  virtual ~TrackEventPlugin();
+  virtual void ParseField(uint32_t field_id,
+                          protozero::ConstBytes data,
+                          int64_t ts) = 0;
+};
+
+// Field-id-keyed dispatch to TrackEventPlugins. A no-op until something
+// registers, so an empty registry costs one check per event.
+class TrackEventPluginRegistry {
+ public:
+  // Registers `plugin` to handle each id in `field_ids`. Takes ownership.
+  void Register(std::unique_ptr<TrackEventPlugin> plugin,
+                std::initializer_list<uint32_t> field_ids) {
+    TrackEventPlugin* p = plugin.get();
+    plugins_.push_back(std::move(plugin));
+    for (uint32_t id : field_ids)
+      handlers_.Insert(id, p);
+  }
+
+  void ParseFields(protozero::ConstBytes event_bytes, int64_t ts) const {
+    if (handlers_.size() == 0)
+      return;
+    protozero::ProtoDecoder decoder(event_bytes);
+    for (auto f = decoder.ReadField(); f.valid(); f = decoder.ReadField()) {
+      if (auto* h = handlers_.Find(f.id()))
+        (*h)->ParseField(f.id(), f.as_bytes(), ts);
+    }
+  }
+
+ private:
+  base::FlatHashMap<uint32_t, TrackEventPlugin*> handlers_;
+  std::vector<std::unique_ptr<TrackEventPlugin>> plugins_;
+};
+
+}  // namespace perfetto::trace_processor
+
+#endif  // SRC_TRACE_PROCESSOR_IMPORTERS_PROTO_TRACK_EVENT_PLUGIN_H_
diff --git a/src/trace_processor/plugins/android_framework_track_event/BUILD.gn b/src/trace_processor/plugins/android_framework_track_event/BUILD.gn
new file mode 100644
index 0000000..a6f1511
--- /dev/null
+++ b/src/trace_processor/plugins/android_framework_track_event/BUILD.gn
@@ -0,0 +1,35 @@
+# Copyright (C) 2026 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.
+
+import("../../../../gn/perfetto.gni")
+
+source_set("android_framework_track_event") {
+  sources = [
+    "android_framework_track_event.cc",
+    "android_framework_track_event.h",
+  ]
+  deps = [
+    "../../../../gn:default_deps",
+    "../../../../protos/third_party/android/frameworks/base/proto/tracing:frameworks_base_track_event_zero",
+    "../../../base",
+    "../../../protozero",
+    "../../core/plugin",
+    "../../importers/common",
+    "../../importers/common:parser_types",
+    "../../importers/proto:proto_importer_module",
+    "../../storage",
+    "../../tables",
+    "../../types",
+  ]
+}
diff --git a/src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.cc b/src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.cc
new file mode 100644
index 0000000..298e50e
--- /dev/null
+++ b/src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.cc
@@ -0,0 +1,161 @@
+/*
+ * Copyright (C) 2026 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.
+ */
+
+#include "src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.h"
+
+#include <cstdint>
+#include <memory>
+#include <optional>
+
+#include "perfetto/base/compiler.h"
+#include "perfetto/ext/base/flat_hash_map.h"
+#include "perfetto/protozero/field.h"
+#include "protos/third_party/android/frameworks/base/proto/tracing/frameworks_base_track_event.pbzero.h"
+#include "src/trace_processor/core/plugin/plugin.h"
+#include "src/trace_processor/importers/common/process_tracker.h"
+#include "src/trace_processor/importers/proto/proto_importer_module.h"
+#include "src/trace_processor/importers/proto/track_event_plugin.h"
+#include "src/trace_processor/storage/trace_storage.h"
+#include "src/trace_processor/tables/android_tables_py.h"
+#include "src/trace_processor/types/trace_processor_context.h"
+
+namespace perfetto::trace_processor::android_framework_track_event {
+namespace {
+
+using FBTE = ::com::android::internal::pbzero::FrameworksBaseTrackEvent;
+using AndroidProcessStartEvent =
+    ::com::android::internal::pbzero::AndroidProcessStartEvent;
+using AndroidBinderDiedEvent =
+    ::com::android::internal::pbzero::AndroidBinderDiedEvent;
+
+// Records AndroidProcessStartEvent and AndroidBinderDiedEvent into
+// __intrinsic_android_track_event_process (upid, fw_start_ts, fw_end_ts).
+class Parser : public TrackEventPlugin {
+ public:
+  explicit Parser(TraceProcessorContext* context) : context_(context) {}
+  ~Parser() override = default;
+
+  void ParseField(uint32_t field_id,
+                  protozero::ConstBytes data,
+                  int64_t ts) override {
+    switch (field_id) {
+      case FBTE::kProcessStartEventFieldNumber:
+        HandleProcessStart(data, ts);
+        break;
+      case FBTE::kBinderDiedEventFieldNumber:
+        HandleBinderDied(data, ts);
+        break;
+    }
+  }
+
+ private:
+  void SetProcessMetadata(UniquePid upid,
+                          const AndroidProcessStartEvent::Decoder& evt) {
+    if (evt.has_uid())
+      context_->process_tracker->SetProcessUid(
+          upid, static_cast<uint32_t>(evt.uid()));
+    if (evt.has_process_name())
+      context_->process_tracker->UpdateProcessName(
+          upid, context_->storage->InternString(evt.process_name()),
+          ProcessNamePriority::kOther);
+  }
+
+  tables::AndroidTrackEventProcessTable::RowReference GetOrInsertRow(
+      UniquePid upid) {
+    auto* table =
+        context_->storage->mutable_android_track_event_process_table();
+    auto it_and_ins =
+        upid_to_row_.Insert(upid, tables::AndroidTrackEventProcessTable::Id{0});
+    if (it_and_ins.second) {
+      tables::AndroidTrackEventProcessTable::Row row;
+      row.upid = upid;
+      *it_and_ins.first = table->Insert(row).id;
+    }
+    return (*table)[*it_and_ins.first];
+  }
+
+  void HandleProcessStart(protozero::ConstBytes data, int64_t ts) {
+    AndroidProcessStartEvent::Decoder evt(data);
+    if (!evt.has_pid())
+      return;
+    UniquePid upid = context_->process_tracker->GetOrCreateProcess(evt.pid());
+    SetProcessMetadata(upid, evt);
+    // Keep the earliest start to capture the process_bound event as opposed to
+    // process_start event as the first event even though they share the same
+    // proto.
+    auto row = GetOrInsertRow(upid);
+    if (!row.fw_start_ts().has_value())
+      row.set_fw_start_ts(ts);
+  }
+
+  void HandleBinderDied(protozero::ConstBytes data, int64_t ts) {
+    AndroidBinderDiedEvent::Decoder evt(data);
+    if (!evt.has_pid())
+      return;
+    // Resolve the process without creating one. If ftrace sched already ended
+    // it (freeing the pid), GetOrCreateProcess would resurrect a phantom
+    // process, so look it up via its still-tracked main thread instead and
+    // bail if the process is already gone.
+    std::optional<UniqueTid> utid =
+        context_->process_tracker->GetThreadOrNull(evt.pid());
+    if (!utid)
+      return;
+    std::optional<UniquePid> upid =
+        context_->storage->thread_table()[*utid].upid();
+    if (!upid)
+      return;
+    GetOrInsertRow(*upid).set_fw_end_ts(ts);
+    // End the process so its pid is freed for reuse. With only an initial
+    // ftrace snapshot (no ongoing sched) this is the sole signal that ends it.
+    context_->process_tracker->EndThread(ts, evt.pid());
+  }
+
+  TraceProcessorContext* context_;
+  base::FlatHashMap<UniquePid, tables::AndroidTrackEventProcessTable::Id>
+      upid_to_row_;
+};
+
+class AndroidFrameworkTrackEventPlugin
+    : public Plugin<AndroidFrameworkTrackEventPlugin> {
+ public:
+  ~AndroidFrameworkTrackEventPlugin() override;
+
+  void RegisterProtoImporterModules(
+      ProtoImporterModuleContext* module_context,
+      TraceProcessorContext* trace_context) override {
+    module_context->track_event_plugins.Register(
+        std::make_unique<Parser>(trace_context),
+        {FBTE::kProcessStartEventFieldNumber,
+         FBTE::kBinderDiedEventFieldNumber});
+  }
+};
+
+AndroidFrameworkTrackEventPlugin::~AndroidFrameworkTrackEventPlugin() = default;
+
+}  // namespace
+
+void RegisterPlugin() {
+  static PluginRegistration reg(
+      []() -> std::unique_ptr<PluginBase> {
+        return std::make_unique<AndroidFrameworkTrackEventPlugin>();
+      },
+      AndroidFrameworkTrackEventPlugin::kPluginId,
+      AndroidFrameworkTrackEventPlugin::kDepIds.data(),
+      AndroidFrameworkTrackEventPlugin::kDepIds.size());
+  base::ignore_result(reg);
+}
+
+}  // namespace perfetto::trace_processor::android_framework_track_event
diff --git a/src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.h b/src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.h
new file mode 100644
index 0000000..0f7a4fc
--- /dev/null
+++ b/src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright (C) 2026 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.
+ */
+
+#ifndef SRC_TRACE_PROCESSOR_PLUGINS_ANDROID_FRAMEWORK_TRACK_EVENT_ANDROID_FRAMEWORK_TRACK_EVENT_H_
+#define SRC_TRACE_PROCESSOR_PLUGINS_ANDROID_FRAMEWORK_TRACK_EVENT_ANDROID_FRAMEWORK_TRACK_EVENT_H_
+
+namespace perfetto::trace_processor::android_framework_track_event {
+
+// Records AndroidProcessStartEvent / AndroidBinderDiedEvent TrackEvents into
+// __intrinsic_android_track_event_process. Called from trace_processor_impl.cc.
+void RegisterPlugin();
+
+}  // namespace perfetto::trace_processor::android_framework_track_event
+
+#endif  // SRC_TRACE_PROCESSOR_PLUGINS_ANDROID_FRAMEWORK_TRACK_EVENT_ANDROID_FRAMEWORK_TRACK_EVENT_H_
diff --git a/src/trace_processor/plugins/storage_tables/storage_tables.cc b/src/trace_processor/plugins/storage_tables/storage_tables.cc
index a4d7cb6..3cb75c0 100644
--- a/src/trace_processor/plugins/storage_tables/storage_tables.cc
+++ b/src/trace_processor/plugins/storage_tables/storage_tables.cc
@@ -158,6 +158,7 @@
     AddDataframe(out, s->mutable_jit_frame_table());
     AddDataframe(out, s->mutable_android_key_events_table());
     AddDataframe(out, s->mutable_android_motion_events_table());
+    AddDataframe(out, s->mutable_android_track_event_process_table());
     AddDataframe(out, s->mutable_android_input_event_dispatch_table());
     AddDataframe(out, s->mutable_inputmethod_clients_table());
     AddDataframe(out, s->mutable_inputmethod_manager_service_table());
diff --git a/src/trace_processor/storage/trace_storage.h b/src/trace_processor/storage/trace_storage.h
index 9db8894..59a139f 100644
--- a/src/trace_processor/storage/trace_storage.h
+++ b/src/trace_processor/storage/trace_storage.h
@@ -369,6 +369,15 @@
     return mutable_table<tables::AndroidMotionEventsTable>();
   }
 
+  const tables::AndroidTrackEventProcessTable&
+  android_track_event_process_table() const {
+    return table<tables::AndroidTrackEventProcessTable>();
+  }
+  tables::AndroidTrackEventProcessTable*
+  mutable_android_track_event_process_table() {
+    return mutable_table<tables::AndroidTrackEventProcessTable>();
+  }
+
   const tables::AndroidInputEventDispatchTable&
   android_input_event_dispatch_table() const {
     return table<tables::AndroidInputEventDispatchTable>();
diff --git a/src/trace_processor/tables/android_tables.py b/src/trace_processor/tables/android_tables.py
index 214f118..52606f4 100644
--- a/src/trace_processor/tables/android_tables.py
+++ b/src/trace_processor/tables/android_tables.py
@@ -29,6 +29,7 @@
 from python.generators.trace_processor_table.public import TableDoc
 from python.generators.trace_processor_table.public import WrappingSqlView
 
+from src.trace_processor.tables.metadata_tables import PROCESS_TABLE
 from src.trace_processor.tables.track_tables import TRACK_TABLE
 
 ANDROID_CPU_PER_UID_TRACK_TABLE = Table(
@@ -368,6 +369,30 @@
     ),
 )
 
+ANDROID_TRACK_EVENT_PROCESS_TABLE = Table(
+    python_module=__file__,
+    class_name='AndroidTrackEventProcessTable',
+    sql_name='__intrinsic_android_track_event_process',
+    columns=[
+        C('upid', CppTableId(PROCESS_TABLE), cpp_access=CppAccess.READ),
+        C('fw_start_ts',
+          CppOptional(CppInt64()),
+          cpp_access=CppAccess.READ_AND_HIGH_PERF_WRITE),
+        C('fw_end_ts',
+          CppOptional(CppInt64()),
+          cpp_access=CppAccess.READ_AND_HIGH_PERF_WRITE),
+    ],
+    tabledoc=TableDoc(
+        doc='Per-process lifecycle from Android framework TrackEvents.',
+        group='Android',
+        columns={
+            'upid': 'The process this row describes.',
+            'fw_start_ts': 'Timestamp of AndroidProcessStartEvent.',
+            'fw_end_ts': 'Timestamp of AndroidBinderDiedEvent.',
+        },
+    ),
+)
+
 # Keep this list sorted.
 ALL_TABLES = [
     ANDROID_AFLAGS_TABLE,
@@ -377,5 +402,6 @@
     ANDROID_INPUT_EVENT_DISPATCH_TABLE,
     ANDROID_KEY_EVENTS_TABLE,
     ANDROID_MOTION_EVENTS_TABLE,
+    ANDROID_TRACK_EVENT_PROCESS_TABLE,
     ANDROID_USER_LIST_TABLE,
 ]
diff --git a/src/trace_processor/trace_processor_impl.cc b/src/trace_processor/trace_processor_impl.cc
index a4a63f4..8a76606 100644
--- a/src/trace_processor/trace_processor_impl.cc
+++ b/src/trace_processor/trace_processor_impl.cc
@@ -86,6 +86,7 @@
 #include "src/trace_processor/perfetto_sql/engine/perfetto_sql_connection.h"
 #include "src/trace_processor/perfetto_sql/stdlib/stdlib.h"
 #include "src/trace_processor/plugins/ancestor/ancestor.h"
+#include "src/trace_processor/plugins/android_framework_track_event/android_framework_track_event.h"
 #include "src/trace_processor/plugins/args/args.h"
 #include "src/trace_processor/plugins/art_heap_graph_functions/art_heap_graph_functions.h"
 #include "src/trace_processor/plugins/base64_functions/base64_functions.h"
@@ -315,6 +316,7 @@
   // we call here before GetPluginSet() builds its cached set. Remove these
   // explicit calls once the static-init based registration is restored.
   ancestor::RegisterPlugin();
+  android_framework_track_event::RegisterPlugin();
   args::RegisterPlugin();
   art_heap_graph_functions::RegisterPlugin();
   base64_functions::RegisterPlugin();