Add ftrace event SchedWakeup

Bug: 72082535
Change-Id: Iad7bf1198df879195eaa191d19784fd932c8146a
diff --git a/Android.bp b/Android.bp
index 98e5208..6f0a66e 100644
--- a/Android.bp
+++ b/Android.bp
@@ -361,6 +361,7 @@
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup.proto",
     "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
   ],
   tools: [
@@ -384,6 +385,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_switch.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/sched_wakeup.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pb.cc",
   ],
 }
@@ -408,6 +410,7 @@
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup.proto",
     "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
   ],
   tools: [
@@ -431,6 +434,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_switch.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/sched_wakeup.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pb.h",
   ],
   export_include_dirs: [
@@ -458,6 +462,7 @@
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup.proto",
     "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
   ],
   tools: [
@@ -482,6 +487,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_switch.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/sched_wakeup.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pbzero.cc",
   ],
 }
@@ -506,6 +512,7 @@
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
     "protos/perfetto/trace/ftrace/print.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup.proto",
     "protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
   ],
   tools: [
@@ -530,6 +537,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/print.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_switch.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/sched_wakeup.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pbzero.h",
   ],
   export_include_dirs: [
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index 8643702..d9cf072 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -29,5 +29,6 @@
   "ftrace_event_bundle.proto",
   "print.proto",
   "sched_switch.proto",
+  "sched_wakeup.proto",
   "test_bundle_wrapper.proto",
 ]
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index e7880ae..5c6bf57 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -30,6 +30,7 @@
 import "perfetto/trace/ftrace/cpufreq_interactive_target.proto";
 import "perfetto/trace/ftrace/cpufreq_interactive_unboost.proto";
 import "perfetto/trace/ftrace/print.proto";
+import "perfetto/trace/ftrace/sched_wakeup.proto";
 import "perfetto/trace/ftrace/sched_switch.proto";
 
 package perfetto.protos;
@@ -46,6 +47,7 @@
   oneof event {
     PrintFtraceEvent print = 3;
     SchedSwitchFtraceEvent sched_switch = 4;
+    SchedWakeupFtraceEvent sched_wakeup = 17;
     CpufreqInteractiveAlreadyFtraceEvent cpu_freq_interactive_already = 5;
     CpufreqInteractiveBoostFtraceEvent cpu_freq_interactive_boost = 6;
     CpufreqInteractiveNotyetFtraceEvent cpu_freq_interactive_notyet = 7;
diff --git a/protos/perfetto/trace/ftrace/sched_wakeup.proto b/protos/perfetto/trace/ftrace/sched_wakeup.proto
new file mode 100644
index 0000000..d28d284
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/sched_wakeup.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 SchedWakeupFtraceEvent {
+  optional string comm = 1;
+  optional int32 pid = 2;
+  optional int32 prio = 3;
+  optional int32 success = 4;
+  optional int32 target_cpu = 5;
+}
diff --git a/src/ftrace_reader/event_info.cc b/src/ftrace_reader/event_info.cc
index 4f44f5e..bc29730 100644
--- a/src/ftrace_reader/event_info.cc
+++ b/src/ftrace_reader/event_info.cc
@@ -50,6 +50,19 @@
   {
     events.emplace_back(Event{});
     Event* event = &events.back();
+    event->name = "sched_wakeup";
+    event->group = "sched";
+    event->proto_field_id = 17;
+    event->fields.push_back(FieldFromNameIdType("comm", 1, kProtoString));
+    event->fields.push_back(FieldFromNameIdType("pid", 2, kProtoInt32));
+    event->fields.push_back(FieldFromNameIdType("prio", 3, kProtoInt32));
+    event->fields.push_back(FieldFromNameIdType("success", 4, kProtoInt32));
+    event->fields.push_back(FieldFromNameIdType("target_cpu", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
     event->name = "cpufreq_interactive_already";
     event->group = "cpufreq_interactive";
     event->proto_field_id = 5;
diff --git a/src/ftrace_reader/proto_translation_table_unittest.cc b/src/ftrace_reader/proto_translation_table_unittest.cc
index ff87a55..51beaad 100644
--- a/src/ftrace_reader/proto_translation_table_unittest.cc
+++ b/src/ftrace_reader/proto_translation_table_unittest.cc
@@ -60,6 +60,7 @@
   EXPECT_TRUE(table_);
   EXPECT_TRUE(table_->GetEventByName("print"));
   EXPECT_TRUE(table_->GetEventByName("sched_switch"));
+  EXPECT_TRUE(table_->GetEventByName("sched_wakeup"));
   for (const Event& event : table_->events()) {
     if (!event.ftrace_event_id)
       continue;
@@ -117,6 +118,15 @@
   }
 
   {
+    auto event = table->GetEventByName("sched_wakeup");
+    EXPECT_EQ(std::string(event->name), "sched_wakeup");
+    EXPECT_EQ(std::string(event->group), "sched");
+    EXPECT_EQ(event->ftrace_event_id, 70ul);
+    EXPECT_EQ(event->fields.at(0).ftrace_offset, 8u);
+    EXPECT_EQ(event->fields.at(0).ftrace_size, 16u);
+  }
+
+  {
     auto event = table->GetEventByName("cpufreq_interactive_target");
     EXPECT_EQ(std::string(event->name), "cpufreq_interactive_target");
     EXPECT_EQ(std::string(event->group), "cpufreq_interactive");
diff --git a/test/configs/ftrace.cfg b/test/configs/ftrace.cfg
index 87d0709..63687d7 100644
--- a/test/configs/ftrace.cfg
+++ b/test/configs/ftrace.cfg
@@ -22,6 +22,7 @@
       event_names: "cpu_idle"
       event_names: "cpu_frequency_limits"
       event_names: "sched_switch"
+      event_names: "sched_wakeup"
     }
   }
 }
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist
index 1e6908b..53843e3 100644
--- a/tools/ftrace_proto_gen/event_whitelist
+++ b/tools/ftrace_proto_gen/event_whitelist
@@ -12,3 +12,4 @@
 power/cpu_frequency_limits
 power/cpu_idle
 sched/sched_switch
+sched/sched_wakeup
diff --git a/tools/trace_to_text/main.cc b/tools/trace_to_text/main.cc
index 7a29054..41f63ec 100644
--- a/tools/trace_to_text/main.cc
+++ b/tools/trace_to_text/main.cc
@@ -78,6 +78,7 @@
 using protos::FtraceEventBundle;
 using protos::PrintFtraceEvent;
 using protos::SchedSwitchFtraceEvent;
+using protos::SchedWakeupFtraceEvent;
 using protos::CpuFrequencyFtraceEvent;
 using protos::CpuFrequencyLimitsFtraceEvent;
 using protos::CpuIdleFtraceEvent;
@@ -158,6 +159,16 @@
   return std::string(line);
 }
 
+std::string FormatSchedWakeup(const SchedWakeupFtraceEvent& sched_wakeup) {
+  char line[2048];
+  sprintf(line,
+          "sched_wakeup: comm=%s "
+          "pid=%d prio=%d success=%d target_cpu=%03d\\n",
+          sched_wakeup.comm().c_str(), sched_wakeup.pid(), sched_wakeup.prio(),
+          sched_wakeup.success(), sched_wakeup.target_cpu());
+  return std::string(line);
+}
+
 std::string FormatPrint(const PrintFtraceEvent& print) {
   char line[2048];
   std::string msg = print.buf();