ftrace: Add oom_score_adj_update

Bug: 119616981
Change-Id: If9203e30d309583fe7c1b2b80c7ae4256ced8d1b
diff --git a/Android.bp b/Android.bp
index f548a75..8bb0a4c 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1262,6 +1262,7 @@
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto",
+    "protos/perfetto/trace/ftrace/oom_score_adj_update.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/regulator_disable.proto",
     "protos/perfetto/trace/ftrace/regulator_disable_complete.proto",
@@ -1578,6 +1579,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/oom_score_adj_update.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable_complete.pb.cc",
@@ -1895,6 +1897,7 @@
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto",
+    "protos/perfetto/trace/ftrace/oom_score_adj_update.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/regulator_disable.proto",
     "protos/perfetto/trace/ftrace/regulator_disable_complete.proto",
@@ -2211,6 +2214,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/oom_score_adj_update.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable_complete.pb.h",
@@ -2531,6 +2535,7 @@
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto",
+    "protos/perfetto/trace/ftrace/oom_score_adj_update.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/regulator_disable.proto",
     "protos/perfetto/trace/ftrace/regulator_disable_complete.proto",
@@ -2848,6 +2853,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/oom_score_adj_update.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable_complete.pbzero.cc",
@@ -3165,6 +3171,7 @@
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto",
+    "protos/perfetto/trace/ftrace/oom_score_adj_update.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/regulator_disable.proto",
     "protos/perfetto/trace/ftrace/regulator_disable_complete.proto",
@@ -3482,6 +3489,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/oom_score_adj_update.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator_disable_complete.pbzero.h",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index 33aef38..3436e1b 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -325,4 +325,5 @@
   "binder_transaction_alloc_buf.proto",
   "signal_deliver.proto",
   "signal_generate.proto",
+  "oom_score_adj_update.proto",
 ]
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index 860eb48..5320e57 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -311,6 +311,7 @@
 import "perfetto/trace/ftrace/binder_transaction_alloc_buf.proto";
 import "perfetto/trace/ftrace/signal_deliver.proto";
 import "perfetto/trace/ftrace/signal_generate.proto";
+import "perfetto/trace/ftrace/oom_score_adj_update.proto";
 
 package perfetto.protos;
 
@@ -665,5 +666,6 @@
     BinderTransactionAllocBufFtraceEvent binder_transaction_alloc_buf = 323;
     SignalDeliverFtraceEvent signal_deliver = 324;
     SignalGenerateFtraceEvent signal_generate = 325;
+    OomScoreAdjUpdateFtraceEvent oom_score_adj_update = 326;
   }
 }
diff --git a/protos/perfetto/trace/ftrace/oom_score_adj_update.proto b/protos/perfetto/trace/ftrace/oom_score_adj_update.proto
new file mode 100644
index 0000000..da46153
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/oom_score_adj_update.proto
@@ -0,0 +1,13 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message OomScoreAdjUpdateFtraceEvent {
+  optional string comm = 1;
+  optional int32 oom_score_adj = 2;
+  optional int32 pid = 3;
+}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index e7a85e4..3687b76 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -561,6 +561,7 @@
     // removed field with id 323
     // removed field with id 324
     // removed field with id 325
+    // removed field with id 326
   }
 }
 
diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc
index 80cbcc6..1bf3ddb 100644
--- a/src/traced/probes/ftrace/event_info.cc
+++ b/src/traced/probes/ftrace/event_info.cc
@@ -3756,6 +3756,17 @@
     event->fields.push_back(MakeField("sig", 6, kProtoInt32));
   }
 
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "oom_score_adj_update";
+    event->group = "oom";
+    event->proto_field_id = 326;
+    event->fields.push_back(MakeField("comm", 1, kProtoString));
+    event->fields.push_back(MakeField("oom_score_adj", 2, kProtoInt32));
+    event->fields.push_back(MakeField("pid", 3, kProtoInt32));
+  }
+
   return events;
 }
 
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist
index 8d85611..d2dd889 100644
--- a/tools/ftrace_proto_gen/event_whitelist
+++ b/tools/ftrace_proto_gen/event_whitelist
@@ -320,4 +320,5 @@
 clk/clk_set_rate
 binder/binder_transaction_alloc_buf
 signal/signal_deliver
-signal/signal_generate
\ No newline at end of file
+signal/signal_generate
+oom/oom_score_adj_update
diff --git a/tools/ftrace_proto_gen/ftrace_proto_gen.cc b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
index 484e0ad..4a1747b 100644
--- a/tools/ftrace_proto_gen/ftrace_proto_gen.cc
+++ b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
@@ -308,7 +308,7 @@
 void PrintEventFormatterMain(const std::set<std::string>& events) {
   printf(
       "\nAdd output to FormatEventText in "
-      "tools/ftrace_proto_gen/ftrace_event_formatter.cc\n");
+      "tools/trace_to_text/ftrace_event_formatter.cc\n");
   for (auto event : events) {
     printf(
         "else if (event.has_%s()) {\nconst auto& inner = event.%s();\nreturn "
@@ -332,7 +332,7 @@
 }
 
 void PrintEventFormatterUsingStatements(const std::set<std::string>& events) {
-  printf("\nAdd output to tools/ftrace_proto_gen/ftrace_event_formatter.cc\n");
+  printf("\nAdd output to tools/trace_to_text/ftrace_event_formatter.cc\n");
   for (auto event : events) {
     printf("using protos::%sFtraceEvent;\n", ToCamelCase(event).c_str());
   }
@@ -340,7 +340,7 @@
 
 void PrintEventFormatterFunctions(const std::set<std::string>& events) {
   printf(
-      "\nAdd output to tools/ftrace_proto_gen/ftrace_event_formatter.cc and "
+      "\nAdd output to tools/trace_to_text/ftrace_event_formatter.cc and "
       "then manually go through format files to match fields\n");
   for (auto event : events) {
     printf(
diff --git a/tools/trace_to_text/ftrace_event_formatter.cc b/tools/trace_to_text/ftrace_event_formatter.cc
index 2357eef..3c55fc7 100644
--- a/tools/trace_to_text/ftrace_event_formatter.cc
+++ b/tools/trace_to_text/ftrace_event_formatter.cc
@@ -340,6 +340,7 @@
 using protos::ClkSetRateFtraceEvent;
 using protos::SignalDeliverFtraceEvent;
 using protos::SignalGenerateFtraceEvent;
+using protos::OomScoreAdjUpdateFtraceEvent;
 
 const char* GetSchedSwitchFlag(int64_t state) {
   state &= 511;
@@ -2691,6 +2692,13 @@
   return std::string(line);
 }
 
+std::string FormatOomScoreAdjUpdate(const OomScoreAdjUpdateFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "oom_score_adj_update: pid=%d comm=%s oom_score_adj=%hd",
+          event.pid(), event.comm().c_str(), event.oom_score_adj());
+  return std::string(line);
+}
+
 std::string FormatEventText(const protos::FtraceEvent& event) {
   if (event.has_binder_lock()) {
     const auto& inner = event.binder_lock();
@@ -3490,6 +3498,9 @@
   } else if (event.has_signal_generate()) {
     const auto& inner = event.signal_generate();
     return FormatSignalGenerate(inner);
+  } else if (event.has_oom_score_adj_update()) {
+    const auto& inner = event.oom_score_adj_update();
+    return FormatOomScoreAdjUpdate(inner);
   }
 
   return "";