Merge "Add clock ftrace APIs"
diff --git a/Android.bp b/Android.bp
index 6b350eb..ad0d4d1 100644
--- a/Android.bp
+++ b/Android.bp
@@ -408,6 +408,20 @@
     "protos/perfetto/trace/ftrace/mdp_sspp_set.proto",
     "protos/perfetto/trace/ftrace/mdp_trace_counter.proto",
     "protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_begin.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_reset.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_deferred.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_end.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_finished.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_suitable.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto",
@@ -427,6 +441,7 @@
     "protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
     "protos/perfetto/trace/ftrace/sched_wakeup.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup_new.proto",
     "protos/perfetto/trace/ftrace/sched_waking.proto",
     "protos/perfetto/trace/ftrace/smbus_read.proto",
     "protos/perfetto/trace/ftrace/smbus_reply.proto",
@@ -435,6 +450,7 @@
     "protos/perfetto/trace/ftrace/softirq_entry.proto",
     "protos/perfetto/trace/ftrace/softirq_exit.proto",
     "protos/perfetto/trace/ftrace/softirq_raise.proto",
+    "protos/perfetto/trace/ftrace/suspend_resume.proto",
     "protos/perfetto/trace/ftrace/sync_pt.proto",
     "protos/perfetto/trace/ftrace/sync_timeline.proto",
     "protos/perfetto/trace/ftrace/sync_wait.proto",
@@ -513,6 +529,20 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_sspp_set.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_trace_counter.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_video_underrun_done.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_begin.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_reset.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_deferred.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_end.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_finished.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_migratepages.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_suitable.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.pb.cc",
@@ -532,6 +562,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/sched_cpu_hotplug.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/sched_wakeup_new.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_waking.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_read.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_reply.pb.cc",
@@ -540,6 +571,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_entry.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_exit.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_raise.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/suspend_resume.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_pt.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_timeline.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_wait.pb.cc",
@@ -619,6 +651,20 @@
     "protos/perfetto/trace/ftrace/mdp_sspp_set.proto",
     "protos/perfetto/trace/ftrace/mdp_trace_counter.proto",
     "protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_begin.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_reset.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_deferred.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_end.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_finished.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_suitable.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto",
@@ -638,6 +684,7 @@
     "protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
     "protos/perfetto/trace/ftrace/sched_wakeup.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup_new.proto",
     "protos/perfetto/trace/ftrace/sched_waking.proto",
     "protos/perfetto/trace/ftrace/smbus_read.proto",
     "protos/perfetto/trace/ftrace/smbus_reply.proto",
@@ -646,6 +693,7 @@
     "protos/perfetto/trace/ftrace/softirq_entry.proto",
     "protos/perfetto/trace/ftrace/softirq_exit.proto",
     "protos/perfetto/trace/ftrace/softirq_raise.proto",
+    "protos/perfetto/trace/ftrace/suspend_resume.proto",
     "protos/perfetto/trace/ftrace/sync_pt.proto",
     "protos/perfetto/trace/ftrace/sync_timeline.proto",
     "protos/perfetto/trace/ftrace/sync_wait.proto",
@@ -724,6 +772,20 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_sspp_set.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_trace_counter.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_video_underrun_done.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_begin.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_reset.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_deferred.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_end.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_finished.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_migratepages.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_suitable.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.pb.h",
@@ -743,6 +805,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/sched_cpu_hotplug.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/sched_wakeup_new.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_waking.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_read.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_reply.pb.h",
@@ -751,6 +814,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_entry.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_exit.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_raise.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/suspend_resume.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_pt.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_timeline.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_wait.pb.h",
@@ -833,6 +897,20 @@
     "protos/perfetto/trace/ftrace/mdp_sspp_set.proto",
     "protos/perfetto/trace/ftrace/mdp_trace_counter.proto",
     "protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_begin.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_reset.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_deferred.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_end.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_finished.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_suitable.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto",
@@ -852,6 +930,7 @@
     "protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
     "protos/perfetto/trace/ftrace/sched_wakeup.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup_new.proto",
     "protos/perfetto/trace/ftrace/sched_waking.proto",
     "protos/perfetto/trace/ftrace/smbus_read.proto",
     "protos/perfetto/trace/ftrace/smbus_reply.proto",
@@ -860,6 +939,7 @@
     "protos/perfetto/trace/ftrace/softirq_entry.proto",
     "protos/perfetto/trace/ftrace/softirq_exit.proto",
     "protos/perfetto/trace/ftrace/softirq_raise.proto",
+    "protos/perfetto/trace/ftrace/suspend_resume.proto",
     "protos/perfetto/trace/ftrace/sync_pt.proto",
     "protos/perfetto/trace/ftrace/sync_timeline.proto",
     "protos/perfetto/trace/ftrace/sync_wait.proto",
@@ -939,6 +1019,20 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_sspp_set.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_trace_counter.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_video_underrun_done.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_begin.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_reset.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_deferred.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_end.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_finished.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_migratepages.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_suitable.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.pbzero.cc",
@@ -958,6 +1052,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/sched_cpu_hotplug.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/sched_wakeup_new.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_waking.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_read.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_reply.pbzero.cc",
@@ -966,6 +1061,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_entry.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_exit.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_raise.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/suspend_resume.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_pt.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_timeline.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_wait.pbzero.cc",
@@ -1045,6 +1141,20 @@
     "protos/perfetto/trace/ftrace/mdp_sspp_set.proto",
     "protos/perfetto/trace/ftrace/mdp_trace_counter.proto",
     "protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_begin.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_defer_reset.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_deferred.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_end.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_finished.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_migratepages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_suitable.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.proto",
+    "protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto",
     "protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto",
@@ -1064,6 +1174,7 @@
     "protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto",
     "protos/perfetto/trace/ftrace/sched_switch.proto",
     "protos/perfetto/trace/ftrace/sched_wakeup.proto",
+    "protos/perfetto/trace/ftrace/sched_wakeup_new.proto",
     "protos/perfetto/trace/ftrace/sched_waking.proto",
     "protos/perfetto/trace/ftrace/smbus_read.proto",
     "protos/perfetto/trace/ftrace/smbus_reply.proto",
@@ -1072,6 +1183,7 @@
     "protos/perfetto/trace/ftrace/softirq_entry.proto",
     "protos/perfetto/trace/ftrace/softirq_exit.proto",
     "protos/perfetto/trace/ftrace/softirq_raise.proto",
+    "protos/perfetto/trace/ftrace/suspend_resume.proto",
     "protos/perfetto/trace/ftrace/sync_pt.proto",
     "protos/perfetto/trace/ftrace/sync_timeline.proto",
     "protos/perfetto/trace/ftrace/sync_wait.proto",
@@ -1151,6 +1263,20 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_sspp_set.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_trace_counter.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mdp_video_underrun_done.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_begin.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_defer_reset.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_deferred.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_end.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_finished.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_migratepages.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_suitable.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.pbzero.h",
@@ -1170,6 +1296,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/sched_cpu_hotplug.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/sched_wakeup_new.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sched_waking.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_read.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/smbus_reply.pbzero.h",
@@ -1178,6 +1305,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_entry.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_exit.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/softirq_raise.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/suspend_resume.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_pt.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_timeline.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sync_wait.pbzero.h",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index 2f2eaae..ae406db 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -76,6 +76,20 @@
   "mdp_sspp_set.proto",
   "mdp_trace_counter.proto",
   "mdp_video_underrun_done.proto",
+  "mm_compaction_begin.proto",
+  "mm_compaction_defer_compaction.proto",
+  "mm_compaction_defer_reset.proto",
+  "mm_compaction_deferred.proto",
+  "mm_compaction_end.proto",
+  "mm_compaction_finished.proto",
+  "mm_compaction_isolate_freepages.proto",
+  "mm_compaction_isolate_migratepages.proto",
+  "mm_compaction_kcompactd_sleep.proto",
+  "mm_compaction_kcompactd_wake.proto",
+  "mm_compaction_migratepages.proto",
+  "mm_compaction_suitable.proto",
+  "mm_compaction_try_to_compact_pages.proto",
+  "mm_compaction_wakeup_kcompactd.proto",
   "mm_filemap_add_to_page_cache.proto",
   "mm_filemap_delete_from_page_cache.proto",
   "mm_vmscan_direct_reclaim_begin.proto",
@@ -95,6 +109,7 @@
   "sched_cpu_hotplug.proto",
   "sched_switch.proto",
   "sched_wakeup.proto",
+  "sched_wakeup_new.proto",
   "sched_waking.proto",
   "smbus_read.proto",
   "smbus_reply.proto",
@@ -103,6 +118,7 @@
   "softirq_entry.proto",
   "softirq_exit.proto",
   "softirq_raise.proto",
+  "suspend_resume.proto",
   "sync_pt.proto",
   "sync_timeline.proto",
   "sync_wait.proto",
diff --git a/protos/perfetto/trace/ftrace/binder_lock.proto b/protos/perfetto/trace/ftrace/binder_lock.proto
index 00358d2..9ffa5c9 100644
--- a/protos/perfetto/trace/ftrace/binder_lock.proto
+++ b/protos/perfetto/trace/ftrace/binder_lock.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/binder_locked.proto b/protos/perfetto/trace/ftrace/binder_locked.proto
index 380b300..9c6218e 100644
--- a/protos/perfetto/trace/ftrace/binder_locked.proto
+++ b/protos/perfetto/trace/ftrace/binder_locked.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/binder_set_priority.proto b/protos/perfetto/trace/ftrace/binder_set_priority.proto
index 19e2ea8..91f659e 100644
--- a/protos/perfetto/trace/ftrace/binder_set_priority.proto
+++ b/protos/perfetto/trace/ftrace/binder_set_priority.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/binder_transaction.proto b/protos/perfetto/trace/ftrace/binder_transaction.proto
index 9f9c222..4a11d6c 100644
--- a/protos/perfetto/trace/ftrace/binder_transaction.proto
+++ b/protos/perfetto/trace/ftrace/binder_transaction.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/binder_transaction_received.proto b/protos/perfetto/trace/ftrace/binder_transaction_received.proto
index f6df469..cc68cf3 100644
--- a/protos/perfetto/trace/ftrace/binder_transaction_received.proto
+++ b/protos/perfetto/trace/ftrace/binder_transaction_received.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/binder_unlock.proto b/protos/perfetto/trace/ftrace/binder_unlock.proto
index 5cdd0f3..75d8960 100644
--- a/protos/perfetto/trace/ftrace/binder_unlock.proto
+++ b/protos/perfetto/trace/ftrace/binder_unlock.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/block_rq_issue.proto b/protos/perfetto/trace/ftrace/block_rq_issue.proto
index 44e1b40..e266c37 100644
--- a/protos/perfetto/trace/ftrace/block_rq_issue.proto
+++ b/protos/perfetto/trace/ftrace/block_rq_issue.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_attach_task.proto b/protos/perfetto/trace/ftrace/cgroup_attach_task.proto
index fd11335..f7a3902 100644
--- a/protos/perfetto/trace/ftrace/cgroup_attach_task.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_attach_task.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_destroy_root.proto b/protos/perfetto/trace/ftrace/cgroup_destroy_root.proto
index 0dc8d22..91757e7 100644
--- a/protos/perfetto/trace/ftrace/cgroup_destroy_root.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_destroy_root.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_mkdir.proto b/protos/perfetto/trace/ftrace/cgroup_mkdir.proto
index 465fd62..726a3a8 100644
--- a/protos/perfetto/trace/ftrace/cgroup_mkdir.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_mkdir.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_release.proto b/protos/perfetto/trace/ftrace/cgroup_release.proto
index 6e48bc3..4e69aab 100644
--- a/protos/perfetto/trace/ftrace/cgroup_release.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_release.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_remount.proto b/protos/perfetto/trace/ftrace/cgroup_remount.proto
index 15fbada..bbd2d14 100644
--- a/protos/perfetto/trace/ftrace/cgroup_remount.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_remount.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_rename.proto b/protos/perfetto/trace/ftrace/cgroup_rename.proto
index 9d44dbf..7e97195 100644
--- a/protos/perfetto/trace/ftrace/cgroup_rename.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_rename.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_rmdir.proto b/protos/perfetto/trace/ftrace/cgroup_rmdir.proto
index ecc430c..451a6e2 100644
--- a/protos/perfetto/trace/ftrace/cgroup_rmdir.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_rmdir.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_setup_root.proto b/protos/perfetto/trace/ftrace/cgroup_setup_root.proto
index 0321897..bd63372 100644
--- a/protos/perfetto/trace/ftrace/cgroup_setup_root.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_setup_root.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cgroup_transfer_tasks.proto b/protos/perfetto/trace/ftrace/cgroup_transfer_tasks.proto
index 588083d..4509085 100644
--- a/protos/perfetto/trace/ftrace/cgroup_transfer_tasks.proto
+++ b/protos/perfetto/trace/ftrace/cgroup_transfer_tasks.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/clock_disable.proto b/protos/perfetto/trace/ftrace/clock_disable.proto
index dc71b9f..c0758a8 100644
--- a/protos/perfetto/trace/ftrace/clock_disable.proto
+++ b/protos/perfetto/trace/ftrace/clock_disable.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/clock_enable.proto b/protos/perfetto/trace/ftrace/clock_enable.proto
index c2503b4..1c09d90 100644
--- a/protos/perfetto/trace/ftrace/clock_enable.proto
+++ b/protos/perfetto/trace/ftrace/clock_enable.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/clock_set_rate.proto b/protos/perfetto/trace/ftrace/clock_set_rate.proto
index f4eb05d..d180907 100644
--- a/protos/perfetto/trace/ftrace/clock_set_rate.proto
+++ b/protos/perfetto/trace/ftrace/clock_set_rate.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpu_frequency.proto b/protos/perfetto/trace/ftrace/cpu_frequency.proto
index 9315418..ef4b928 100644
--- a/protos/perfetto/trace/ftrace/cpu_frequency.proto
+++ b/protos/perfetto/trace/ftrace/cpu_frequency.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpu_frequency_limits.proto b/protos/perfetto/trace/ftrace/cpu_frequency_limits.proto
index 2586fc6..7d331d5 100644
--- a/protos/perfetto/trace/ftrace/cpu_frequency_limits.proto
+++ b/protos/perfetto/trace/ftrace/cpu_frequency_limits.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpu_idle.proto b/protos/perfetto/trace/ftrace/cpu_idle.proto
index c26673e..644ff95 100644
--- a/protos/perfetto/trace/ftrace/cpu_idle.proto
+++ b/protos/perfetto/trace/ftrace/cpu_idle.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpufreq_interactive_already.proto b/protos/perfetto/trace/ftrace/cpufreq_interactive_already.proto
index 3293d41..8cb1c8c 100644
--- a/protos/perfetto/trace/ftrace/cpufreq_interactive_already.proto
+++ b/protos/perfetto/trace/ftrace/cpufreq_interactive_already.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpufreq_interactive_boost.proto b/protos/perfetto/trace/ftrace/cpufreq_interactive_boost.proto
index ff93ac0..c26b9e9 100644
--- a/protos/perfetto/trace/ftrace/cpufreq_interactive_boost.proto
+++ b/protos/perfetto/trace/ftrace/cpufreq_interactive_boost.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpufreq_interactive_notyet.proto b/protos/perfetto/trace/ftrace/cpufreq_interactive_notyet.proto
index 10e8131..468db18 100644
--- a/protos/perfetto/trace/ftrace/cpufreq_interactive_notyet.proto
+++ b/protos/perfetto/trace/ftrace/cpufreq_interactive_notyet.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto b/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto
index 3a15f3d..39de36c 100644
--- a/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto
+++ b/protos/perfetto/trace/ftrace/cpufreq_interactive_setspeed.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto b/protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto
index c9600c0..06fd131 100644
--- a/protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto
+++ b/protos/perfetto/trace/ftrace/cpufreq_interactive_target.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto b/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto
index f722cfa..9b6ef04 100644
--- a/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto
+++ b/protos/perfetto/trace/ftrace/cpufreq_interactive_unboost.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ext4_da_write_begin.proto b/protos/perfetto/trace/ftrace/ext4_da_write_begin.proto
index 0706f86..25237cb 100644
--- a/protos/perfetto/trace/ftrace/ext4_da_write_begin.proto
+++ b/protos/perfetto/trace/ftrace/ext4_da_write_begin.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ext4_da_write_end.proto b/protos/perfetto/trace/ftrace/ext4_da_write_end.proto
index 1052bdf..6972d17 100644
--- a/protos/perfetto/trace/ftrace/ext4_da_write_end.proto
+++ b/protos/perfetto/trace/ftrace/ext4_da_write_end.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto b/protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto
index 060da44..6a26f79 100644
--- a/protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto
+++ b/protos/perfetto/trace/ftrace/ext4_sync_file_enter.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto b/protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto
index f5816fb..71c49c6 100644
--- a/protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto
+++ b/protos/perfetto/trace/ftrace/ext4_sync_file_exit.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index 3b6d4a1..b11748a 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -113,6 +113,22 @@
 import "perfetto/trace/ftrace/rotator_bw_ao_as_context.proto";
 import "perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto";
 import "perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto";
+import "perfetto/trace/ftrace/mm_compaction_begin.proto";
+import "perfetto/trace/ftrace/mm_compaction_defer_compaction.proto";
+import "perfetto/trace/ftrace/mm_compaction_defer_reset.proto";
+import "perfetto/trace/ftrace/mm_compaction_deferred.proto";
+import "perfetto/trace/ftrace/mm_compaction_end.proto";
+import "perfetto/trace/ftrace/mm_compaction_finished.proto";
+import "perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto";
+import "perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto";
+import "perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto";
+import "perfetto/trace/ftrace/mm_compaction_kcompactd_wake.proto";
+import "perfetto/trace/ftrace/mm_compaction_migratepages.proto";
+import "perfetto/trace/ftrace/mm_compaction_suitable.proto";
+import "perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.proto";
+import "perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto";
+import "perfetto/trace/ftrace/suspend_resume.proto";
+import "perfetto/trace/ftrace/sched_wakeup_new.proto";
 
 package perfetto.protos;
 
@@ -223,5 +239,24 @@
     MmFilemapAddToPageCacheFtraceEvent mm_filemap_add_to_page_cache = 97;
     MmFilemapDeleteFromPageCacheFtraceEvent mm_filemap_delete_from_page_cache =
         98;
+    MmCompactionBeginFtraceEvent mm_compaction_begin = 99;
+    MmCompactionDeferCompactionFtraceEvent mm_compaction_defer_compaction = 100;
+    MmCompactionDeferredFtraceEvent mm_compaction_deferred = 101;
+    MmCompactionDeferResetFtraceEvent mm_compaction_defer_reset = 102;
+    MmCompactionEndFtraceEvent mm_compaction_end = 103;
+    MmCompactionFinishedFtraceEvent mm_compaction_finished = 104;
+    MmCompactionIsolateFreepagesFtraceEvent mm_compaction_isolate_freepages =
+        105;
+    MmCompactionIsolateMigratepagesFtraceEvent
+        mm_compaction_isolate_migratepages = 106;
+    MmCompactionKcompactdSleepFtraceEvent mm_compaction_kcompactd_sleep = 107;
+    MmCompactionKcompactdWakeFtraceEvent mm_compaction_kcompactd_wake = 108;
+    MmCompactionMigratepagesFtraceEvent mm_compaction_migratepages = 109;
+    MmCompactionSuitableFtraceEvent mm_compaction_suitable = 110;
+    MmCompactionTryToCompactPagesFtraceEvent
+        mm_compaction_try_to_compact_pages = 111;
+    MmCompactionWakeupKcompactdFtraceEvent mm_compaction_wakeup_kcompactd = 112;
+    SuspendResumeFtraceEvent suspend_resume = 113;
+    SchedWakeupNewFtraceEvent sched_wakeup_new = 114;
   }
 }
diff --git a/protos/perfetto/trace/ftrace/i2c_read.proto b/protos/perfetto/trace/ftrace/i2c_read.proto
index a254886..61363cd 100644
--- a/protos/perfetto/trace/ftrace/i2c_read.proto
+++ b/protos/perfetto/trace/ftrace/i2c_read.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/i2c_reply.proto b/protos/perfetto/trace/ftrace/i2c_reply.proto
index 68f9525..b1382bb 100644
--- a/protos/perfetto/trace/ftrace/i2c_reply.proto
+++ b/protos/perfetto/trace/ftrace/i2c_reply.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/i2c_result.proto b/protos/perfetto/trace/ftrace/i2c_result.proto
index 0ee37d3..0d8bd7c 100644
--- a/protos/perfetto/trace/ftrace/i2c_result.proto
+++ b/protos/perfetto/trace/ftrace/i2c_result.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/i2c_write.proto b/protos/perfetto/trace/ftrace/i2c_write.proto
index f43c6de..a7c8ab0 100644
--- a/protos/perfetto/trace/ftrace/i2c_write.proto
+++ b/protos/perfetto/trace/ftrace/i2c_write.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ipi_entry.proto b/protos/perfetto/trace/ftrace/ipi_entry.proto
index 3c01d2e..dca2dfa 100644
--- a/protos/perfetto/trace/ftrace/ipi_entry.proto
+++ b/protos/perfetto/trace/ftrace/ipi_entry.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ipi_exit.proto b/protos/perfetto/trace/ftrace/ipi_exit.proto
index 807a48f..ca3f3aa 100644
--- a/protos/perfetto/trace/ftrace/ipi_exit.proto
+++ b/protos/perfetto/trace/ftrace/ipi_exit.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/ipi_raise.proto b/protos/perfetto/trace/ftrace/ipi_raise.proto
index 081366a..17bd795 100644
--- a/protos/perfetto/trace/ftrace/ipi_raise.proto
+++ b/protos/perfetto/trace/ftrace/ipi_raise.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/irq_handler_entry.proto b/protos/perfetto/trace/ftrace/irq_handler_entry.proto
index 657b7bc..1e47fe5 100644
--- a/protos/perfetto/trace/ftrace/irq_handler_entry.proto
+++ b/protos/perfetto/trace/ftrace/irq_handler_entry.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/irq_handler_exit.proto b/protos/perfetto/trace/ftrace/irq_handler_exit.proto
index 9afd394..ae1768c 100644
--- a/protos/perfetto/trace/ftrace/irq_handler_exit.proto
+++ b/protos/perfetto/trace/ftrace/irq_handler_exit.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/lowmemory_kill.proto b/protos/perfetto/trace/ftrace/lowmemory_kill.proto
index e687d90..ea1ce0d 100644
--- a/protos/perfetto/trace/ftrace/lowmemory_kill.proto
+++ b/protos/perfetto/trace/ftrace/lowmemory_kill.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_cmd_kickoff.proto b/protos/perfetto/trace/ftrace/mdp_cmd_kickoff.proto
index eaec903..b86ef04 100644
--- a/protos/perfetto/trace/ftrace/mdp_cmd_kickoff.proto
+++ b/protos/perfetto/trace/ftrace/mdp_cmd_kickoff.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_cmd_pingpong_done.proto b/protos/perfetto/trace/ftrace/mdp_cmd_pingpong_done.proto
index 827c59a..4ae6808 100644
--- a/protos/perfetto/trace/ftrace/mdp_cmd_pingpong_done.proto
+++ b/protos/perfetto/trace/ftrace/mdp_cmd_pingpong_done.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_cmd_readptr_done.proto b/protos/perfetto/trace/ftrace/mdp_cmd_readptr_done.proto
index 0859b65..a4ca84f 100644
--- a/protos/perfetto/trace/ftrace/mdp_cmd_readptr_done.proto
+++ b/protos/perfetto/trace/ftrace/mdp_cmd_readptr_done.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_cmd_release_bw.proto b/protos/perfetto/trace/ftrace/mdp_cmd_release_bw.proto
index 55d468c..10f0a54 100644
--- a/protos/perfetto/trace/ftrace/mdp_cmd_release_bw.proto
+++ b/protos/perfetto/trace/ftrace/mdp_cmd_release_bw.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_cmd_wait_pingpong.proto b/protos/perfetto/trace/ftrace/mdp_cmd_wait_pingpong.proto
index c40c569..c2ddf7c 100644
--- a/protos/perfetto/trace/ftrace/mdp_cmd_wait_pingpong.proto
+++ b/protos/perfetto/trace/ftrace/mdp_cmd_wait_pingpong.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_commit.proto b/protos/perfetto/trace/ftrace/mdp_commit.proto
index 1b92b2f..2f09260 100644
--- a/protos/perfetto/trace/ftrace/mdp_commit.proto
+++ b/protos/perfetto/trace/ftrace/mdp_commit.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_compare_bw.proto b/protos/perfetto/trace/ftrace/mdp_compare_bw.proto
index 3135cc1..b818234 100644
--- a/protos/perfetto/trace/ftrace/mdp_compare_bw.proto
+++ b/protos/perfetto/trace/ftrace/mdp_compare_bw.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_misr_crc.proto b/protos/perfetto/trace/ftrace/mdp_misr_crc.proto
index 89c467f..5aeb3bb 100644
--- a/protos/perfetto/trace/ftrace/mdp_misr_crc.proto
+++ b/protos/perfetto/trace/ftrace/mdp_misr_crc.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_mixer_update.proto b/protos/perfetto/trace/ftrace/mdp_mixer_update.proto
index 96603ae..ad738ca 100644
--- a/protos/perfetto/trace/ftrace/mdp_mixer_update.proto
+++ b/protos/perfetto/trace/ftrace/mdp_mixer_update.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_perf_prefill_calc.proto b/protos/perfetto/trace/ftrace/mdp_perf_prefill_calc.proto
index faa0641..745e164 100644
--- a/protos/perfetto/trace/ftrace/mdp_perf_prefill_calc.proto
+++ b/protos/perfetto/trace/ftrace/mdp_perf_prefill_calc.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_perf_set_ot.proto b/protos/perfetto/trace/ftrace/mdp_perf_set_ot.proto
index 298b45a..9fc059e 100644
--- a/protos/perfetto/trace/ftrace/mdp_perf_set_ot.proto
+++ b/protos/perfetto/trace/ftrace/mdp_perf_set_ot.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_perf_set_panic_luts.proto b/protos/perfetto/trace/ftrace/mdp_perf_set_panic_luts.proto
index 3049021..ca86f32 100644
--- a/protos/perfetto/trace/ftrace/mdp_perf_set_panic_luts.proto
+++ b/protos/perfetto/trace/ftrace/mdp_perf_set_panic_luts.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_perf_set_qos_luts.proto b/protos/perfetto/trace/ftrace/mdp_perf_set_qos_luts.proto
index 2c56503..a5a77cf 100644
--- a/protos/perfetto/trace/ftrace/mdp_perf_set_qos_luts.proto
+++ b/protos/perfetto/trace/ftrace/mdp_perf_set_qos_luts.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_perf_set_wm_levels.proto b/protos/perfetto/trace/ftrace/mdp_perf_set_wm_levels.proto
index 489ff1c..5e541aa 100644
--- a/protos/perfetto/trace/ftrace/mdp_perf_set_wm_levels.proto
+++ b/protos/perfetto/trace/ftrace/mdp_perf_set_wm_levels.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_perf_update_bus.proto b/protos/perfetto/trace/ftrace/mdp_perf_update_bus.proto
index 70399c2..5516bde 100644
--- a/protos/perfetto/trace/ftrace/mdp_perf_update_bus.proto
+++ b/protos/perfetto/trace/ftrace/mdp_perf_update_bus.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_sspp_change.proto b/protos/perfetto/trace/ftrace/mdp_sspp_change.proto
index fff9f2e..f5a75d5 100644
--- a/protos/perfetto/trace/ftrace/mdp_sspp_change.proto
+++ b/protos/perfetto/trace/ftrace/mdp_sspp_change.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_sspp_set.proto b/protos/perfetto/trace/ftrace/mdp_sspp_set.proto
index 4d92805..6d9d1d9 100644
--- a/protos/perfetto/trace/ftrace/mdp_sspp_set.proto
+++ b/protos/perfetto/trace/ftrace/mdp_sspp_set.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_trace_counter.proto b/protos/perfetto/trace/ftrace/mdp_trace_counter.proto
index 89a9922..316c90d 100644
--- a/protos/perfetto/trace/ftrace/mdp_trace_counter.proto
+++ b/protos/perfetto/trace/ftrace/mdp_trace_counter.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto b/protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto
index 5f553bc..b3b9cc0 100644
--- a/protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto
+++ b/protos/perfetto/trace/ftrace/mdp_video_underrun_done.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_begin.proto b/protos/perfetto/trace/ftrace/mm_compaction_begin.proto
new file mode 100644
index 0000000..53a55f1
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_begin.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionBeginFtraceEvent {
+  optional uint64 zone_start = 1;
+  optional uint64 migrate_pfn = 2;
+  optional uint64 free_pfn = 3;
+  optional uint64 zone_end = 4;
+  optional uint32 sync = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.proto b/protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.proto
new file mode 100644
index 0000000..19e90bd
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_defer_compaction.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionDeferCompactionFtraceEvent {
+  optional int32 nid = 1;
+  optional uint32 idx = 2;
+  optional int32 order = 3;
+  optional uint32 considered = 4;
+  optional uint32 defer_shift = 5;
+  optional int32 order_failed = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_defer_reset.proto b/protos/perfetto/trace/ftrace/mm_compaction_defer_reset.proto
new file mode 100644
index 0000000..74de8ee
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_defer_reset.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionDeferResetFtraceEvent {
+  optional int32 nid = 1;
+  optional uint32 idx = 2;
+  optional int32 order = 3;
+  optional uint32 considered = 4;
+  optional uint32 defer_shift = 5;
+  optional int32 order_failed = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_deferred.proto b/protos/perfetto/trace/ftrace/mm_compaction_deferred.proto
new file mode 100644
index 0000000..fe98aa5
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_deferred.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionDeferredFtraceEvent {
+  optional int32 nid = 1;
+  optional uint32 idx = 2;
+  optional int32 order = 3;
+  optional uint32 considered = 4;
+  optional uint32 defer_shift = 5;
+  optional int32 order_failed = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_end.proto b/protos/perfetto/trace/ftrace/mm_compaction_end.proto
new file mode 100644
index 0000000..f6ea280
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_end.proto
@@ -0,0 +1,16 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionEndFtraceEvent {
+  optional uint64 zone_start = 1;
+  optional uint64 migrate_pfn = 2;
+  optional uint64 free_pfn = 3;
+  optional uint64 zone_end = 4;
+  optional uint32 sync = 5;
+  optional int32 status = 6;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_finished.proto b/protos/perfetto/trace/ftrace/mm_compaction_finished.proto
new file mode 100644
index 0000000..f306a41
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_finished.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionFinishedFtraceEvent {
+  optional int32 nid = 1;
+  optional uint32 idx = 2;
+  optional int32 order = 3;
+  optional int32 ret = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto b/protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto
new file mode 100644
index 0000000..ebe9112
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_isolate_freepages.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionIsolateFreepagesFtraceEvent {
+  optional uint64 start_pfn = 1;
+  optional uint64 end_pfn = 2;
+  optional uint64 nr_scanned = 3;
+  optional uint64 nr_taken = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto b/protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto
new file mode 100644
index 0000000..36ec9b0
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_isolate_migratepages.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionIsolateMigratepagesFtraceEvent {
+  optional uint64 start_pfn = 1;
+  optional uint64 end_pfn = 2;
+  optional uint64 nr_scanned = 3;
+  optional uint64 nr_taken = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto b/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto
new file mode 100644
index 0000000..659fc44
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_sleep.proto
@@ -0,0 +1,11 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionKcompactdSleepFtraceEvent {
+  optional int32 nid = 1;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.proto b/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.proto
new file mode 100644
index 0000000..6460db0
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_kcompactd_wake.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 MmCompactionKcompactdWakeFtraceEvent {
+  optional int32 nid = 1;
+  optional int32 order = 2;
+  optional uint32 classzone_idx = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_migratepages.proto b/protos/perfetto/trace/ftrace/mm_compaction_migratepages.proto
new file mode 100644
index 0000000..bdd6eaa
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_migratepages.proto
@@ -0,0 +1,12 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionMigratepagesFtraceEvent {
+  optional uint64 nr_migrated = 1;
+  optional uint64 nr_failed = 2;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_suitable.proto b/protos/perfetto/trace/ftrace/mm_compaction_suitable.proto
new file mode 100644
index 0000000..79d5d9d
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_suitable.proto
@@ -0,0 +1,14 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message MmCompactionSuitableFtraceEvent {
+  optional int32 nid = 1;
+  optional uint32 idx = 2;
+  optional int32 order = 3;
+  optional int32 ret = 4;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.proto b/protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.proto
new file mode 100644
index 0000000..9592318
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_try_to_compact_pages.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 MmCompactionTryToCompactPagesFtraceEvent {
+  optional int32 order = 1;
+  optional uint32 gfp_mask = 2;
+  optional uint32 mode = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto b/protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.proto
new file mode 100644
index 0000000..3172584
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_compaction_wakeup_kcompactd.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 MmCompactionWakeupKcompactdFtraceEvent {
+  optional int32 nid = 1;
+  optional int32 order = 2;
+  optional uint32 classzone_idx = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto b/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto
index 3b29751..3bab542 100644
--- a/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto
+++ b/protos/perfetto/trace/ftrace/mm_filemap_add_to_page_cache.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto b/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto
index d3f2769..24f798b 100644
--- a/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto
+++ b/protos/perfetto/trace/ftrace/mm_filemap_delete_from_page_cache.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto b/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto
index 9ed2d22..20c8647 100644
--- a/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto
+++ b/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_begin.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto b/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto
index 7110987..5d41dab 100644
--- a/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto
+++ b/protos/perfetto/trace/ftrace/mm_vmscan_direct_reclaim_end.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto b/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto
index 9dcdec5..2057730 100644
--- a/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto
+++ b/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_sleep.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto b/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto
index 4126cd0..0144581 100644
--- a/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto
+++ b/protos/perfetto/trace/ftrace/mm_vmscan_kswapd_wake.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/print.proto b/protos/perfetto/trace/ftrace/print.proto
index 32d6d6a..86b7a6d 100644
--- a/protos/perfetto/trace/ftrace/print.proto
+++ b/protos/perfetto/trace/ftrace/print.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/regulator_disable.proto b/protos/perfetto/trace/ftrace/regulator_disable.proto
index 8549310..bb98175 100644
--- a/protos/perfetto/trace/ftrace/regulator_disable.proto
+++ b/protos/perfetto/trace/ftrace/regulator_disable.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/regulator_disable_complete.proto b/protos/perfetto/trace/ftrace/regulator_disable_complete.proto
index c4ecafc..33a7b03 100644
--- a/protos/perfetto/trace/ftrace/regulator_disable_complete.proto
+++ b/protos/perfetto/trace/ftrace/regulator_disable_complete.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/regulator_enable.proto b/protos/perfetto/trace/ftrace/regulator_enable.proto
index 69ad4eb..9e4321d 100644
--- a/protos/perfetto/trace/ftrace/regulator_enable.proto
+++ b/protos/perfetto/trace/ftrace/regulator_enable.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/regulator_enable_complete.proto b/protos/perfetto/trace/ftrace/regulator_enable_complete.proto
index 6042d4b..fd29ee7 100644
--- a/protos/perfetto/trace/ftrace/regulator_enable_complete.proto
+++ b/protos/perfetto/trace/ftrace/regulator_enable_complete.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/regulator_enable_delay.proto b/protos/perfetto/trace/ftrace/regulator_enable_delay.proto
index c003ee3..340a2e4 100644
--- a/protos/perfetto/trace/ftrace/regulator_enable_delay.proto
+++ b/protos/perfetto/trace/ftrace/regulator_enable_delay.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/regulator_set_voltage.proto b/protos/perfetto/trace/ftrace/regulator_set_voltage.proto
index f385442..6a33d3e 100644
--- a/protos/perfetto/trace/ftrace/regulator_set_voltage.proto
+++ b/protos/perfetto/trace/ftrace/regulator_set_voltage.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/regulator_set_voltage_complete.proto b/protos/perfetto/trace/ftrace/regulator_set_voltage_complete.proto
index 7df4df9..4bdce52 100644
--- a/protos/perfetto/trace/ftrace/regulator_set_voltage_complete.proto
+++ b/protos/perfetto/trace/ftrace/regulator_set_voltage_complete.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/rotator_bw_ao_as_context.proto b/protos/perfetto/trace/ftrace/rotator_bw_ao_as_context.proto
index 30b834f..d7e2600 100644
--- a/protos/perfetto/trace/ftrace/rotator_bw_ao_as_context.proto
+++ b/protos/perfetto/trace/ftrace/rotator_bw_ao_as_context.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/sched_blocked_reason.proto b/protos/perfetto/trace/ftrace/sched_blocked_reason.proto
index 49b7b29..5d630e8 100644
--- a/protos/perfetto/trace/ftrace/sched_blocked_reason.proto
+++ b/protos/perfetto/trace/ftrace/sched_blocked_reason.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto b/protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto
index 7387f53..6c23c0e 100644
--- a/protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto
+++ b/protos/perfetto/trace/ftrace/sched_cpu_hotplug.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/sched_switch.proto b/protos/perfetto/trace/ftrace/sched_switch.proto
index 9d35ba8..b985c8a 100644
--- a/protos/perfetto/trace/ftrace/sched_switch.proto
+++ b/protos/perfetto/trace/ftrace/sched_switch.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/sched_wakeup.proto b/protos/perfetto/trace/ftrace/sched_wakeup.proto
index d28d284..32950eb 100644
--- a/protos/perfetto/trace/ftrace/sched_wakeup.proto
+++ b/protos/perfetto/trace/ftrace/sched_wakeup.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/sched_wakeup_new.proto b/protos/perfetto/trace/ftrace/sched_wakeup_new.proto
new file mode 100644
index 0000000..51d5b61
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/sched_wakeup_new.proto
@@ -0,0 +1,15 @@
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+message SchedWakeupNewFtraceEvent {
+  optional string comm = 1;
+  optional int32 pid = 2;
+  optional int32 prio = 3;
+  optional int32 success = 4;
+  optional int32 target_cpu = 5;
+}
diff --git a/protos/perfetto/trace/ftrace/sched_waking.proto b/protos/perfetto/trace/ftrace/sched_waking.proto
index 7062f4d..dbf3597 100644
--- a/protos/perfetto/trace/ftrace/sched_waking.proto
+++ b/protos/perfetto/trace/ftrace/sched_waking.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/smbus_read.proto b/protos/perfetto/trace/ftrace/smbus_read.proto
index db4ef6c..198c46d 100644
--- a/protos/perfetto/trace/ftrace/smbus_read.proto
+++ b/protos/perfetto/trace/ftrace/smbus_read.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/smbus_reply.proto b/protos/perfetto/trace/ftrace/smbus_reply.proto
index f594941..6ffef3b 100644
--- a/protos/perfetto/trace/ftrace/smbus_reply.proto
+++ b/protos/perfetto/trace/ftrace/smbus_reply.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/smbus_result.proto b/protos/perfetto/trace/ftrace/smbus_result.proto
index 3859680..2ae7845 100644
--- a/protos/perfetto/trace/ftrace/smbus_result.proto
+++ b/protos/perfetto/trace/ftrace/smbus_result.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/smbus_write.proto b/protos/perfetto/trace/ftrace/smbus_write.proto
index 93b7e2a..2f5b8fd 100644
--- a/protos/perfetto/trace/ftrace/smbus_write.proto
+++ b/protos/perfetto/trace/ftrace/smbus_write.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/softirq_entry.proto b/protos/perfetto/trace/ftrace/softirq_entry.proto
index 85e8dcc..b93d6cd 100644
--- a/protos/perfetto/trace/ftrace/softirq_entry.proto
+++ b/protos/perfetto/trace/ftrace/softirq_entry.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/softirq_exit.proto b/protos/perfetto/trace/ftrace/softirq_exit.proto
index ab62a79..d1812e0 100644
--- a/protos/perfetto/trace/ftrace/softirq_exit.proto
+++ b/protos/perfetto/trace/ftrace/softirq_exit.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/softirq_raise.proto b/protos/perfetto/trace/ftrace/softirq_raise.proto
index 61c5c9a..8701df7 100644
--- a/protos/perfetto/trace/ftrace/softirq_raise.proto
+++ b/protos/perfetto/trace/ftrace/softirq_raise.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/suspend_resume.proto b/protos/perfetto/trace/ftrace/suspend_resume.proto
new file mode 100644
index 0000000..683ee87
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/suspend_resume.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 SuspendResumeFtraceEvent {
+  optional string action = 1;
+  optional int32 val = 2;
+  optional uint32 start = 3;
+}
diff --git a/protos/perfetto/trace/ftrace/sync_pt.proto b/protos/perfetto/trace/ftrace/sync_pt.proto
index 9ed950b..aec5f93 100644
--- a/protos/perfetto/trace/ftrace/sync_pt.proto
+++ b/protos/perfetto/trace/ftrace/sync_pt.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/sync_timeline.proto b/protos/perfetto/trace/ftrace/sync_timeline.proto
index b16bc9a..d14ce69 100644
--- a/protos/perfetto/trace/ftrace/sync_timeline.proto
+++ b/protos/perfetto/trace/ftrace/sync_timeline.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/sync_wait.proto b/protos/perfetto/trace/ftrace/sync_wait.proto
index 3eb07a1..f64278a 100644
--- a/protos/perfetto/trace/ftrace/sync_wait.proto
+++ b/protos/perfetto/trace/ftrace/sync_wait.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/tracing_mark_write.proto b/protos/perfetto/trace/ftrace/tracing_mark_write.proto
index 61f21bb..6a2b611 100644
--- a/protos/perfetto/trace/ftrace/tracing_mark_write.proto
+++ b/protos/perfetto/trace/ftrace/tracing_mark_write.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/workqueue_activate_work.proto b/protos/perfetto/trace/ftrace/workqueue_activate_work.proto
index 7193c48..ca67a2f 100644
--- a/protos/perfetto/trace/ftrace/workqueue_activate_work.proto
+++ b/protos/perfetto/trace/ftrace/workqueue_activate_work.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/workqueue_execute_end.proto b/protos/perfetto/trace/ftrace/workqueue_execute_end.proto
index eb5f416..c8beb4a 100644
--- a/protos/perfetto/trace/ftrace/workqueue_execute_end.proto
+++ b/protos/perfetto/trace/ftrace/workqueue_execute_end.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/workqueue_execute_start.proto b/protos/perfetto/trace/ftrace/workqueue_execute_start.proto
index 232f3de..b9b3fd1 100644
--- a/protos/perfetto/trace/ftrace/workqueue_execute_start.proto
+++ b/protos/perfetto/trace/ftrace/workqueue_execute_start.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/protos/perfetto/trace/ftrace/workqueue_queue_work.proto b/protos/perfetto/trace/ftrace/workqueue_queue_work.proto
index 0c9926a..226afe4 100644
--- a/protos/perfetto/trace/ftrace/workqueue_queue_work.proto
+++ b/protos/perfetto/trace/ftrace/workqueue_queue_work.proto
@@ -1,5 +1,7 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
 syntax = "proto2";
 option optimize_for = LITE_RUNTIME;
 package perfetto.protos;
diff --git a/src/ftrace_reader/cpu_reader.cc b/src/ftrace_reader/cpu_reader.cc
index 77ddfde..d0ed7d5 100644
--- a/src/ftrace_reader/cpu_reader.cc
+++ b/src/ftrace_reader/cpu_reader.cc
@@ -286,6 +286,7 @@
   uint32_t field_id = field.proto_field_id;
 
   switch (field.strategy) {
+    case kUint8ToUint32:
     case kUint16ToUint32:
     case kUint32ToUint32:
     case kUint32ToUint64:
diff --git a/src/ftrace_reader/event_info.cc b/src/ftrace_reader/event_info.cc
index 3b66233..a4c3933 100644
--- a/src/ftrace_reader/event_info.cc
+++ b/src/ftrace_reader/event_info.cc
@@ -1,5 +1,6 @@
-// Autogenerated by ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc do not
-// edit.
+// Autogenerated by:
+// ../../tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
 
 #include "src/ftrace_reader/event_info.h"
 
@@ -14,7 +15,7 @@
     event->name = "binder_lock";
     event->group = "binder";
     event->proto_field_id = 53;
-    event->fields.push_back(FieldFromNameIdType("tag", 1, kProtoString));
+    event->fields.push_back(MakeField("tag", 1, kProtoString));
   }
 
   {
@@ -23,7 +24,7 @@
     event->name = "binder_locked";
     event->group = "binder";
     event->proto_field_id = 54;
-    event->fields.push_back(FieldFromNameIdType("tag", 1, kProtoString));
+    event->fields.push_back(MakeField("tag", 1, kProtoString));
   }
 
   {
@@ -32,12 +33,11 @@
     event->name = "binder_set_priority";
     event->group = "binder";
     event->proto_field_id = 52;
-    event->fields.push_back(FieldFromNameIdType("proc", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("thread", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("old_prio", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("new_prio", 4, kProtoUint32));
-    event->fields.push_back(
-        FieldFromNameIdType("desired_prio", 5, kProtoUint32));
+    event->fields.push_back(MakeField("proc", 1, kProtoInt32));
+    event->fields.push_back(MakeField("thread", 2, kProtoInt32));
+    event->fields.push_back(MakeField("old_prio", 3, kProtoUint32));
+    event->fields.push_back(MakeField("new_prio", 4, kProtoUint32));
+    event->fields.push_back(MakeField("desired_prio", 5, kProtoUint32));
   }
 
   {
@@ -46,13 +46,13 @@
     event->name = "binder_transaction";
     event->group = "binder";
     event->proto_field_id = 50;
-    event->fields.push_back(FieldFromNameIdType("debug_id", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("target_node", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("to_proc", 3, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("to_thread", 4, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("reply", 5, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("code", 6, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 7, kProtoUint32));
+    event->fields.push_back(MakeField("debug_id", 1, kProtoInt32));
+    event->fields.push_back(MakeField("target_node", 2, kProtoInt32));
+    event->fields.push_back(MakeField("to_proc", 3, kProtoInt32));
+    event->fields.push_back(MakeField("to_thread", 4, kProtoInt32));
+    event->fields.push_back(MakeField("reply", 5, kProtoInt32));
+    event->fields.push_back(MakeField("code", 6, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 7, kProtoUint32));
   }
 
   {
@@ -61,7 +61,7 @@
     event->name = "binder_transaction_received";
     event->group = "binder";
     event->proto_field_id = 51;
-    event->fields.push_back(FieldFromNameIdType("debug_id", 1, kProtoInt32));
+    event->fields.push_back(MakeField("debug_id", 1, kProtoInt32));
   }
 
   {
@@ -70,7 +70,7 @@
     event->name = "binder_unlock";
     event->group = "binder";
     event->proto_field_id = 55;
-    event->fields.push_back(FieldFromNameIdType("tag", 1, kProtoString));
+    event->fields.push_back(MakeField("tag", 1, kProtoString));
   }
 
   {
@@ -79,13 +79,13 @@
     event->name = "block_rq_issue";
     event->group = "block";
     event->proto_field_id = 45;
-    event->fields.push_back(FieldFromNameIdType("dev", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("sector", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("nr_sector", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("bytes", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("rwbs", 5, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("comm", 6, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("cmd", 7, kProtoString));
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("sector", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_sector", 3, kProtoUint32));
+    event->fields.push_back(MakeField("bytes", 4, kProtoUint32));
+    event->fields.push_back(MakeField("rwbs", 5, kProtoString));
+    event->fields.push_back(MakeField("comm", 6, kProtoString));
+    event->fields.push_back(MakeField("cmd", 7, kProtoString));
   }
 
   {
@@ -94,11 +94,11 @@
     event->name = "cgroup_attach_task";
     event->group = "cgroup";
     event->proto_field_id = 67;
-    event->fields.push_back(FieldFromNameIdType("dst_root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("dst_id", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("pid", 3, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("comm", 4, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("cname", 5, kProtoString));
+    event->fields.push_back(MakeField("dst_root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("dst_id", 2, kProtoInt32));
+    event->fields.push_back(MakeField("pid", 3, kProtoInt32));
+    event->fields.push_back(MakeField("comm", 4, kProtoString));
+    event->fields.push_back(MakeField("cname", 5, kProtoString));
   }
 
   {
@@ -107,9 +107,9 @@
     event->name = "cgroup_destroy_root";
     event->group = "cgroup";
     event->proto_field_id = 72;
-    event->fields.push_back(FieldFromNameIdType("root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("ss_mask", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("name", 3, kProtoString));
+    event->fields.push_back(MakeField("root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("ss_mask", 2, kProtoUint32));
+    event->fields.push_back(MakeField("name", 3, kProtoString));
   }
 
   {
@@ -118,9 +118,9 @@
     event->name = "cgroup_mkdir";
     event->group = "cgroup";
     event->proto_field_id = 68;
-    event->fields.push_back(FieldFromNameIdType("root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("id", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("cname", 3, kProtoString));
+    event->fields.push_back(MakeField("root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("id", 2, kProtoInt32));
+    event->fields.push_back(MakeField("cname", 3, kProtoString));
   }
 
   {
@@ -129,9 +129,9 @@
     event->name = "cgroup_release";
     event->group = "cgroup";
     event->proto_field_id = 73;
-    event->fields.push_back(FieldFromNameIdType("root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("id", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("cname", 3, kProtoString));
+    event->fields.push_back(MakeField("root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("id", 2, kProtoInt32));
+    event->fields.push_back(MakeField("cname", 3, kProtoString));
   }
 
   {
@@ -140,9 +140,9 @@
     event->name = "cgroup_remount";
     event->group = "cgroup";
     event->proto_field_id = 69;
-    event->fields.push_back(FieldFromNameIdType("root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("ss_mask", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("name", 3, kProtoString));
+    event->fields.push_back(MakeField("root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("ss_mask", 2, kProtoUint32));
+    event->fields.push_back(MakeField("name", 3, kProtoString));
   }
 
   {
@@ -151,9 +151,9 @@
     event->name = "cgroup_rename";
     event->group = "cgroup";
     event->proto_field_id = 74;
-    event->fields.push_back(FieldFromNameIdType("root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("id", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("cname", 3, kProtoString));
+    event->fields.push_back(MakeField("root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("id", 2, kProtoInt32));
+    event->fields.push_back(MakeField("cname", 3, kProtoString));
   }
 
   {
@@ -162,9 +162,9 @@
     event->name = "cgroup_rmdir";
     event->group = "cgroup";
     event->proto_field_id = 70;
-    event->fields.push_back(FieldFromNameIdType("root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("id", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("cname", 3, kProtoString));
+    event->fields.push_back(MakeField("root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("id", 2, kProtoInt32));
+    event->fields.push_back(MakeField("cname", 3, kProtoString));
   }
 
   {
@@ -173,9 +173,9 @@
     event->name = "cgroup_setup_root";
     event->group = "cgroup";
     event->proto_field_id = 75;
-    event->fields.push_back(FieldFromNameIdType("root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("ss_mask", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("name", 3, kProtoString));
+    event->fields.push_back(MakeField("root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("ss_mask", 2, kProtoUint32));
+    event->fields.push_back(MakeField("name", 3, kProtoString));
   }
 
   {
@@ -184,11 +184,180 @@
     event->name = "cgroup_transfer_tasks";
     event->group = "cgroup";
     event->proto_field_id = 71;
-    event->fields.push_back(FieldFromNameIdType("dst_root", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("dst_id", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("pid", 3, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("comm", 4, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("cname", 5, kProtoString));
+    event->fields.push_back(MakeField("dst_root", 1, kProtoInt32));
+    event->fields.push_back(MakeField("dst_id", 2, kProtoInt32));
+    event->fields.push_back(MakeField("pid", 3, kProtoInt32));
+    event->fields.push_back(MakeField("comm", 4, kProtoString));
+    event->fields.push_back(MakeField("cname", 5, kProtoString));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_begin";
+    event->group = "compaction";
+    event->proto_field_id = 99;
+    event->fields.push_back(MakeField("zone_start", 1, kProtoUint64));
+    event->fields.push_back(MakeField("migrate_pfn", 2, kProtoUint64));
+    event->fields.push_back(MakeField("free_pfn", 3, kProtoUint64));
+    event->fields.push_back(MakeField("zone_end", 4, kProtoUint64));
+    event->fields.push_back(MakeField("sync", 5, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_defer_compaction";
+    event->group = "compaction";
+    event->proto_field_id = 100;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("idx", 2, kProtoUint32));
+    event->fields.push_back(MakeField("order", 3, kProtoInt32));
+    event->fields.push_back(MakeField("considered", 4, kProtoUint32));
+    event->fields.push_back(MakeField("defer_shift", 5, kProtoUint32));
+    event->fields.push_back(MakeField("order_failed", 6, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_defer_reset";
+    event->group = "compaction";
+    event->proto_field_id = 102;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("idx", 2, kProtoUint32));
+    event->fields.push_back(MakeField("order", 3, kProtoInt32));
+    event->fields.push_back(MakeField("considered", 4, kProtoUint32));
+    event->fields.push_back(MakeField("defer_shift", 5, kProtoUint32));
+    event->fields.push_back(MakeField("order_failed", 6, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_deferred";
+    event->group = "compaction";
+    event->proto_field_id = 101;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("idx", 2, kProtoUint32));
+    event->fields.push_back(MakeField("order", 3, kProtoInt32));
+    event->fields.push_back(MakeField("considered", 4, kProtoUint32));
+    event->fields.push_back(MakeField("defer_shift", 5, kProtoUint32));
+    event->fields.push_back(MakeField("order_failed", 6, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_end";
+    event->group = "compaction";
+    event->proto_field_id = 103;
+    event->fields.push_back(MakeField("zone_start", 1, kProtoUint64));
+    event->fields.push_back(MakeField("migrate_pfn", 2, kProtoUint64));
+    event->fields.push_back(MakeField("free_pfn", 3, kProtoUint64));
+    event->fields.push_back(MakeField("zone_end", 4, kProtoUint64));
+    event->fields.push_back(MakeField("sync", 5, kProtoUint32));
+    event->fields.push_back(MakeField("status", 6, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_finished";
+    event->group = "compaction";
+    event->proto_field_id = 104;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("idx", 2, kProtoUint32));
+    event->fields.push_back(MakeField("order", 3, kProtoInt32));
+    event->fields.push_back(MakeField("ret", 4, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_isolate_freepages";
+    event->group = "compaction";
+    event->proto_field_id = 105;
+    event->fields.push_back(MakeField("start_pfn", 1, kProtoUint64));
+    event->fields.push_back(MakeField("end_pfn", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_scanned", 3, kProtoUint64));
+    event->fields.push_back(MakeField("nr_taken", 4, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_isolate_migratepages";
+    event->group = "compaction";
+    event->proto_field_id = 106;
+    event->fields.push_back(MakeField("start_pfn", 1, kProtoUint64));
+    event->fields.push_back(MakeField("end_pfn", 2, kProtoUint64));
+    event->fields.push_back(MakeField("nr_scanned", 3, kProtoUint64));
+    event->fields.push_back(MakeField("nr_taken", 4, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_kcompactd_sleep";
+    event->group = "compaction";
+    event->proto_field_id = 107;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_kcompactd_wake";
+    event->group = "compaction";
+    event->proto_field_id = 108;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("order", 2, kProtoInt32));
+    event->fields.push_back(MakeField("classzone_idx", 3, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_migratepages";
+    event->group = "compaction";
+    event->proto_field_id = 109;
+    event->fields.push_back(MakeField("nr_migrated", 1, kProtoUint64));
+    event->fields.push_back(MakeField("nr_failed", 2, kProtoUint64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_suitable";
+    event->group = "compaction";
+    event->proto_field_id = 110;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("idx", 2, kProtoUint32));
+    event->fields.push_back(MakeField("order", 3, kProtoInt32));
+    event->fields.push_back(MakeField("ret", 4, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_try_to_compact_pages";
+    event->group = "compaction";
+    event->proto_field_id = 111;
+    event->fields.push_back(MakeField("order", 1, kProtoInt32));
+    event->fields.push_back(MakeField("gfp_mask", 2, kProtoUint32));
+    event->fields.push_back(MakeField("mode", 3, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "mm_compaction_wakeup_kcompactd";
+    event->group = "compaction";
+    event->proto_field_id = 112;
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("order", 2, kProtoInt32));
+    event->fields.push_back(MakeField("classzone_idx", 3, kProtoUint32));
   }
 
   {
@@ -197,11 +366,11 @@
     event->name = "cpufreq_interactive_already";
     event->group = "cpufreq_interactive";
     event->proto_field_id = 5;
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("load", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("curtarg", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("curactual", 4, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("newtarg", 5, kProtoUint64));
+    event->fields.push_back(MakeField("cpu_id", 1, kProtoUint64));
+    event->fields.push_back(MakeField("load", 2, kProtoUint64));
+    event->fields.push_back(MakeField("curtarg", 3, kProtoUint64));
+    event->fields.push_back(MakeField("curactual", 4, kProtoUint64));
+    event->fields.push_back(MakeField("newtarg", 5, kProtoUint64));
   }
 
   {
@@ -210,7 +379,7 @@
     event->name = "cpufreq_interactive_boost";
     event->group = "cpufreq_interactive";
     event->proto_field_id = 6;
-    event->fields.push_back(FieldFromNameIdType("s", 1, kProtoString));
+    event->fields.push_back(MakeField("s", 1, kProtoString));
   }
 
   {
@@ -219,11 +388,11 @@
     event->name = "cpufreq_interactive_notyet";
     event->group = "cpufreq_interactive";
     event->proto_field_id = 7;
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("load", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("curtarg", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("curactual", 4, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("newtarg", 5, kProtoUint64));
+    event->fields.push_back(MakeField("cpu_id", 1, kProtoUint64));
+    event->fields.push_back(MakeField("load", 2, kProtoUint64));
+    event->fields.push_back(MakeField("curtarg", 3, kProtoUint64));
+    event->fields.push_back(MakeField("curactual", 4, kProtoUint64));
+    event->fields.push_back(MakeField("newtarg", 5, kProtoUint64));
   }
 
   {
@@ -232,9 +401,9 @@
     event->name = "cpufreq_interactive_setspeed";
     event->group = "cpufreq_interactive";
     event->proto_field_id = 8;
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("targfreq", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("actualfreq", 3, kProtoUint64));
+    event->fields.push_back(MakeField("cpu_id", 1, kProtoUint32));
+    event->fields.push_back(MakeField("targfreq", 2, kProtoUint64));
+    event->fields.push_back(MakeField("actualfreq", 3, kProtoUint64));
   }
 
   {
@@ -243,11 +412,11 @@
     event->name = "cpufreq_interactive_target";
     event->group = "cpufreq_interactive";
     event->proto_field_id = 9;
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("load", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("curtarg", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("curactual", 4, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("newtarg", 5, kProtoUint64));
+    event->fields.push_back(MakeField("cpu_id", 1, kProtoUint64));
+    event->fields.push_back(MakeField("load", 2, kProtoUint64));
+    event->fields.push_back(MakeField("curtarg", 3, kProtoUint64));
+    event->fields.push_back(MakeField("curactual", 4, kProtoUint64));
+    event->fields.push_back(MakeField("newtarg", 5, kProtoUint64));
   }
 
   {
@@ -256,7 +425,7 @@
     event->name = "cpufreq_interactive_unboost";
     event->group = "cpufreq_interactive";
     event->proto_field_id = 10;
-    event->fields.push_back(FieldFromNameIdType("s", 1, kProtoString));
+    event->fields.push_back(MakeField("s", 1, kProtoString));
   }
 
   {
@@ -265,11 +434,11 @@
     event->name = "ext4_da_write_begin";
     event->group = "ext4";
     event->proto_field_id = 41;
-    event->fields.push_back(FieldFromNameIdType("dev", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("ino", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("pos", 3, kProtoInt64));
-    event->fields.push_back(FieldFromNameIdType("len", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 5, kProtoUint32));
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 5, kProtoUint32));
   }
 
   {
@@ -278,11 +447,11 @@
     event->name = "ext4_da_write_end";
     event->group = "ext4";
     event->proto_field_id = 42;
-    event->fields.push_back(FieldFromNameIdType("dev", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("ino", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("pos", 3, kProtoInt64));
-    event->fields.push_back(FieldFromNameIdType("len", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("copied", 5, kProtoUint32));
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("pos", 3, kProtoInt64));
+    event->fields.push_back(MakeField("len", 4, kProtoUint32));
+    event->fields.push_back(MakeField("copied", 5, kProtoUint32));
   }
 
   {
@@ -291,10 +460,10 @@
     event->name = "ext4_sync_file_enter";
     event->group = "ext4";
     event->proto_field_id = 43;
-    event->fields.push_back(FieldFromNameIdType("dev", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("ino", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("parent", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("datasync", 4, kProtoInt32));
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("parent", 3, kProtoUint64));
+    event->fields.push_back(MakeField("datasync", 4, kProtoInt32));
   }
 
   {
@@ -303,9 +472,9 @@
     event->name = "ext4_sync_file_exit";
     event->group = "ext4";
     event->proto_field_id = 44;
-    event->fields.push_back(FieldFromNameIdType("dev", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("ino", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("ret", 3, kProtoInt32));
+    event->fields.push_back(MakeField("dev", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("ret", 3, kProtoInt32));
   }
 
   {
@@ -314,10 +483,10 @@
     event->name = "mm_filemap_add_to_page_cache";
     event->group = "filemap";
     event->proto_field_id = 97;
-    event->fields.push_back(FieldFromNameIdType("pfn", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("i_ino", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("index", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("s_dev", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pfn", 1, kProtoUint64));
+    event->fields.push_back(MakeField("i_ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("index", 3, kProtoUint64));
+    event->fields.push_back(MakeField("s_dev", 4, kProtoUint32));
   }
 
   {
@@ -326,10 +495,10 @@
     event->name = "mm_filemap_delete_from_page_cache";
     event->group = "filemap";
     event->proto_field_id = 98;
-    event->fields.push_back(FieldFromNameIdType("pfn", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("i_ino", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("index", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("s_dev", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pfn", 1, kProtoUint64));
+    event->fields.push_back(MakeField("i_ino", 2, kProtoUint64));
+    event->fields.push_back(MakeField("index", 3, kProtoUint64));
+    event->fields.push_back(MakeField("s_dev", 4, kProtoUint32));
   }
 
   {
@@ -338,8 +507,8 @@
     event->name = "print";
     event->group = "ftrace";
     event->proto_field_id = 3;
-    event->fields.push_back(FieldFromNameIdType("ip", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("buf", 2, kProtoString));
+    event->fields.push_back(MakeField("ip", 1, kProtoUint64));
+    event->fields.push_back(MakeField("buf", 2, kProtoString));
   }
 
   {
@@ -348,11 +517,11 @@
     event->name = "i2c_read";
     event->group = "i2c";
     event->proto_field_id = 27;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("msg_nr", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("addr", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("len", 5, kProtoUint32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("msg_nr", 2, kProtoUint32));
+    event->fields.push_back(MakeField("addr", 3, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 4, kProtoUint32));
+    event->fields.push_back(MakeField("len", 5, kProtoUint32));
   }
 
   {
@@ -361,12 +530,12 @@
     event->name = "i2c_reply";
     event->group = "i2c";
     event->proto_field_id = 30;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("msg_nr", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("addr", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("len", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("buf", 6, kProtoUint32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("msg_nr", 2, kProtoUint32));
+    event->fields.push_back(MakeField("addr", 3, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 4, kProtoUint32));
+    event->fields.push_back(MakeField("len", 5, kProtoUint32));
+    event->fields.push_back(MakeField("buf", 6, kProtoUint32));
   }
 
   {
@@ -375,9 +544,9 @@
     event->name = "i2c_result";
     event->group = "i2c";
     event->proto_field_id = 29;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("nr_msgs", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("ret", 3, kProtoInt32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("nr_msgs", 2, kProtoUint32));
+    event->fields.push_back(MakeField("ret", 3, kProtoInt32));
   }
 
   {
@@ -386,12 +555,12 @@
     event->name = "i2c_write";
     event->group = "i2c";
     event->proto_field_id = 28;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("msg_nr", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("addr", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("len", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("buf", 6, kProtoUint32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("msg_nr", 2, kProtoUint32));
+    event->fields.push_back(MakeField("addr", 3, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 4, kProtoUint32));
+    event->fields.push_back(MakeField("len", 5, kProtoUint32));
+    event->fields.push_back(MakeField("buf", 6, kProtoUint32));
   }
 
   {
@@ -400,11 +569,11 @@
     event->name = "smbus_read";
     event->group = "i2c";
     event->proto_field_id = 31;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("flags", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("addr", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("command", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("protocol", 5, kProtoUint32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("flags", 2, kProtoUint32));
+    event->fields.push_back(MakeField("addr", 3, kProtoUint32));
+    event->fields.push_back(MakeField("command", 4, kProtoUint32));
+    event->fields.push_back(MakeField("protocol", 5, kProtoUint32));
   }
 
   {
@@ -413,12 +582,12 @@
     event->name = "smbus_reply";
     event->group = "i2c";
     event->proto_field_id = 34;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("addr", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("command", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("len", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("protocol", 6, kProtoUint32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("addr", 2, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 3, kProtoUint32));
+    event->fields.push_back(MakeField("command", 4, kProtoUint32));
+    event->fields.push_back(MakeField("len", 5, kProtoUint32));
+    event->fields.push_back(MakeField("protocol", 6, kProtoUint32));
   }
 
   {
@@ -427,13 +596,13 @@
     event->name = "smbus_result";
     event->group = "i2c";
     event->proto_field_id = 33;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("addr", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("read_write", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("command", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("res", 6, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("protocol", 7, kProtoUint32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("addr", 2, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 3, kProtoUint32));
+    event->fields.push_back(MakeField("read_write", 4, kProtoUint32));
+    event->fields.push_back(MakeField("command", 5, kProtoUint32));
+    event->fields.push_back(MakeField("res", 6, kProtoInt32));
+    event->fields.push_back(MakeField("protocol", 7, kProtoUint32));
   }
 
   {
@@ -442,12 +611,12 @@
     event->name = "smbus_write";
     event->group = "i2c";
     event->proto_field_id = 32;
-    event->fields.push_back(FieldFromNameIdType("adapter_nr", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("addr", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("command", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("len", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("protocol", 6, kProtoUint32));
+    event->fields.push_back(MakeField("adapter_nr", 1, kProtoInt32));
+    event->fields.push_back(MakeField("addr", 2, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 3, kProtoUint32));
+    event->fields.push_back(MakeField("command", 4, kProtoUint32));
+    event->fields.push_back(MakeField("len", 5, kProtoUint32));
+    event->fields.push_back(MakeField("protocol", 6, kProtoUint32));
   }
 
   {
@@ -456,7 +625,7 @@
     event->name = "ipi_entry";
     event->group = "ipi";
     event->proto_field_id = 21;
-    event->fields.push_back(FieldFromNameIdType("reason", 1, kProtoString));
+    event->fields.push_back(MakeField("reason", 1, kProtoString));
   }
 
   {
@@ -465,7 +634,7 @@
     event->name = "ipi_exit";
     event->group = "ipi";
     event->proto_field_id = 22;
-    event->fields.push_back(FieldFromNameIdType("reason", 1, kProtoString));
+    event->fields.push_back(MakeField("reason", 1, kProtoString));
   }
 
   {
@@ -474,9 +643,8 @@
     event->name = "ipi_raise";
     event->group = "ipi";
     event->proto_field_id = 23;
-    event->fields.push_back(
-        FieldFromNameIdType("target_cpus", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("reason", 2, kProtoString));
+    event->fields.push_back(MakeField("target_cpus", 1, kProtoUint32));
+    event->fields.push_back(MakeField("reason", 2, kProtoString));
   }
 
   {
@@ -485,8 +653,8 @@
     event->name = "irq_handler_entry";
     event->group = "irq";
     event->proto_field_id = 36;
-    event->fields.push_back(FieldFromNameIdType("irq", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("name", 2, kProtoString));
+    event->fields.push_back(MakeField("irq", 1, kProtoInt32));
+    event->fields.push_back(MakeField("name", 2, kProtoString));
   }
 
   {
@@ -495,8 +663,8 @@
     event->name = "irq_handler_exit";
     event->group = "irq";
     event->proto_field_id = 37;
-    event->fields.push_back(FieldFromNameIdType("irq", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("ret", 2, kProtoInt32));
+    event->fields.push_back(MakeField("irq", 1, kProtoInt32));
+    event->fields.push_back(MakeField("ret", 2, kProtoInt32));
   }
 
   {
@@ -505,7 +673,7 @@
     event->name = "softirq_entry";
     event->group = "irq";
     event->proto_field_id = 24;
-    event->fields.push_back(FieldFromNameIdType("vec", 1, kProtoUint32));
+    event->fields.push_back(MakeField("vec", 1, kProtoUint32));
   }
 
   {
@@ -514,7 +682,7 @@
     event->name = "softirq_exit";
     event->group = "irq";
     event->proto_field_id = 25;
-    event->fields.push_back(FieldFromNameIdType("vec", 1, kProtoUint32));
+    event->fields.push_back(MakeField("vec", 1, kProtoUint32));
   }
 
   {
@@ -523,7 +691,7 @@
     event->name = "softirq_raise";
     event->group = "irq";
     event->proto_field_id = 26;
-    event->fields.push_back(FieldFromNameIdType("vec", 1, kProtoUint32));
+    event->fields.push_back(MakeField("vec", 1, kProtoUint32));
   }
 
   {
@@ -532,13 +700,11 @@
     event->name = "lowmemory_kill";
     event->group = "lowmemorykiller";
     event->proto_field_id = 35;
-    event->fields.push_back(FieldFromNameIdType("comm", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("pid", 2, kProtoInt32));
-    event->fields.push_back(
-        FieldFromNameIdType("pagecache_size", 3, kProtoInt64));
-    event->fields.push_back(
-        FieldFromNameIdType("pagecache_limit", 4, kProtoInt64));
-    event->fields.push_back(FieldFromNameIdType("free", 5, kProtoInt64));
+    event->fields.push_back(MakeField("comm", 1, kProtoString));
+    event->fields.push_back(MakeField("pid", 2, kProtoInt32));
+    event->fields.push_back(MakeField("pagecache_size", 3, kProtoInt64));
+    event->fields.push_back(MakeField("pagecache_limit", 4, kProtoInt64));
+    event->fields.push_back(MakeField("free", 5, kProtoInt64));
   }
 
   {
@@ -547,8 +713,8 @@
     event->name = "mdp_cmd_kickoff";
     event->group = "mdss";
     event->proto_field_id = 76;
-    event->fields.push_back(FieldFromNameIdType("ctl_num", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("kickoff_cnt", 2, kProtoInt32));
+    event->fields.push_back(MakeField("ctl_num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("kickoff_cnt", 2, kProtoInt32));
   }
 
   {
@@ -557,10 +723,10 @@
     event->name = "mdp_cmd_pingpong_done";
     event->group = "mdss";
     event->proto_field_id = 81;
-    event->fields.push_back(FieldFromNameIdType("ctl_num", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("intf_num", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("pp_num", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("koff_cnt", 4, kProtoInt32));
+    event->fields.push_back(MakeField("ctl_num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("intf_num", 2, kProtoUint32));
+    event->fields.push_back(MakeField("pp_num", 3, kProtoUint32));
+    event->fields.push_back(MakeField("koff_cnt", 4, kProtoInt32));
   }
 
   {
@@ -569,8 +735,8 @@
     event->name = "mdp_cmd_readptr_done";
     event->group = "mdss";
     event->proto_field_id = 85;
-    event->fields.push_back(FieldFromNameIdType("ctl_num", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("koff_cnt", 2, kProtoInt32));
+    event->fields.push_back(MakeField("ctl_num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("koff_cnt", 2, kProtoInt32));
   }
 
   {
@@ -579,7 +745,7 @@
     event->name = "mdp_cmd_release_bw";
     event->group = "mdss";
     event->proto_field_id = 89;
-    event->fields.push_back(FieldFromNameIdType("ctl_num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("ctl_num", 1, kProtoUint32));
   }
 
   {
@@ -588,8 +754,8 @@
     event->name = "mdp_cmd_wait_pingpong";
     event->group = "mdss";
     event->proto_field_id = 93;
-    event->fields.push_back(FieldFromNameIdType("ctl_num", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("kickoff_cnt", 2, kProtoInt32));
+    event->fields.push_back(MakeField("ctl_num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("kickoff_cnt", 2, kProtoInt32));
   }
 
   {
@@ -598,10 +764,10 @@
     event->name = "mdp_commit";
     event->group = "mdss";
     event->proto_field_id = 77;
-    event->fields.push_back(FieldFromNameIdType("num", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("play_cnt", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("clk_rate", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("bandwidth", 4, kProtoUint64));
+    event->fields.push_back(MakeField("num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("play_cnt", 2, kProtoUint32));
+    event->fields.push_back(MakeField("clk_rate", 3, kProtoUint32));
+    event->fields.push_back(MakeField("bandwidth", 4, kProtoUint64));
   }
 
   {
@@ -610,15 +776,14 @@
     event->name = "mdp_compare_bw";
     event->group = "mdss";
     event->proto_field_id = 82;
-    event->fields.push_back(FieldFromNameIdType("new_ab", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("new_ib", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("new_wb", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("old_ab", 4, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("old_ib", 5, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("old_wb", 6, kProtoUint64));
-    event->fields.push_back(
-        FieldFromNameIdType("params_changed", 7, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("update_bw", 8, kProtoUint32));
+    event->fields.push_back(MakeField("new_ab", 1, kProtoUint64));
+    event->fields.push_back(MakeField("new_ib", 2, kProtoUint64));
+    event->fields.push_back(MakeField("new_wb", 3, kProtoUint64));
+    event->fields.push_back(MakeField("old_ab", 4, kProtoUint64));
+    event->fields.push_back(MakeField("old_ib", 5, kProtoUint64));
+    event->fields.push_back(MakeField("old_wb", 6, kProtoUint64));
+    event->fields.push_back(MakeField("params_changed", 7, kProtoUint32));
+    event->fields.push_back(MakeField("update_bw", 8, kProtoUint32));
   }
 
   {
@@ -627,9 +792,9 @@
     event->name = "mdp_misr_crc";
     event->group = "mdss";
     event->proto_field_id = 86;
-    event->fields.push_back(FieldFromNameIdType("block_id", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("vsync_cnt", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("crc", 3, kProtoUint32));
+    event->fields.push_back(MakeField("block_id", 1, kProtoUint32));
+    event->fields.push_back(MakeField("vsync_cnt", 2, kProtoUint32));
+    event->fields.push_back(MakeField("crc", 3, kProtoUint32));
   }
 
   {
@@ -638,7 +803,7 @@
     event->name = "mdp_mixer_update";
     event->group = "mdss";
     event->proto_field_id = 90;
-    event->fields.push_back(FieldFromNameIdType("mixer_num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("mixer_num", 1, kProtoUint32));
   }
 
   {
@@ -647,18 +812,16 @@
     event->name = "mdp_perf_prefill_calc";
     event->group = "mdss";
     event->proto_field_id = 94;
-    event->fields.push_back(FieldFromNameIdType("pnum", 1, kProtoUint32));
-    event->fields.push_back(
-        FieldFromNameIdType("latency_buf", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("ot", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("y_buf", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("y_scaler", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("pp_lines", 6, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("pp_bytes", 7, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("post_sc", 8, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("fbc_bytes", 9, kProtoUint32));
-    event->fields.push_back(
-        FieldFromNameIdType("prefill_bytes", 10, kProtoUint32));
+    event->fields.push_back(MakeField("pnum", 1, kProtoUint32));
+    event->fields.push_back(MakeField("latency_buf", 2, kProtoUint32));
+    event->fields.push_back(MakeField("ot", 3, kProtoUint32));
+    event->fields.push_back(MakeField("y_buf", 4, kProtoUint32));
+    event->fields.push_back(MakeField("y_scaler", 5, kProtoUint32));
+    event->fields.push_back(MakeField("pp_lines", 6, kProtoUint32));
+    event->fields.push_back(MakeField("pp_bytes", 7, kProtoUint32));
+    event->fields.push_back(MakeField("post_sc", 8, kProtoUint32));
+    event->fields.push_back(MakeField("fbc_bytes", 9, kProtoUint32));
+    event->fields.push_back(MakeField("prefill_bytes", 10, kProtoUint32));
   }
 
   {
@@ -667,10 +830,10 @@
     event->name = "mdp_perf_set_ot";
     event->group = "mdss";
     event->proto_field_id = 78;
-    event->fields.push_back(FieldFromNameIdType("pnum", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("xin_id", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("rd_lim", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("is_vbif_rt", 4, kProtoUint32));
+    event->fields.push_back(MakeField("pnum", 1, kProtoUint32));
+    event->fields.push_back(MakeField("xin_id", 2, kProtoUint32));
+    event->fields.push_back(MakeField("rd_lim", 3, kProtoUint32));
+    event->fields.push_back(MakeField("is_vbif_rt", 4, kProtoUint32));
   }
 
   {
@@ -679,11 +842,11 @@
     event->name = "mdp_perf_set_panic_luts";
     event->group = "mdss";
     event->proto_field_id = 83;
-    event->fields.push_back(FieldFromNameIdType("pnum", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("fmt", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("mode", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("panic_lut", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("robust_lut", 5, kProtoUint32));
+    event->fields.push_back(MakeField("pnum", 1, kProtoUint32));
+    event->fields.push_back(MakeField("fmt", 2, kProtoUint32));
+    event->fields.push_back(MakeField("mode", 3, kProtoUint32));
+    event->fields.push_back(MakeField("panic_lut", 4, kProtoUint32));
+    event->fields.push_back(MakeField("robust_lut", 5, kProtoUint32));
   }
 
   {
@@ -692,13 +855,13 @@
     event->name = "mdp_perf_set_qos_luts";
     event->group = "mdss";
     event->proto_field_id = 87;
-    event->fields.push_back(FieldFromNameIdType("pnum", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("fmt", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("intf", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("rot", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("fl", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("lut", 6, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("linear", 7, kProtoUint32));
+    event->fields.push_back(MakeField("pnum", 1, kProtoUint32));
+    event->fields.push_back(MakeField("fmt", 2, kProtoUint32));
+    event->fields.push_back(MakeField("intf", 3, kProtoUint32));
+    event->fields.push_back(MakeField("rot", 4, kProtoUint32));
+    event->fields.push_back(MakeField("fl", 5, kProtoUint32));
+    event->fields.push_back(MakeField("lut", 6, kProtoUint32));
+    event->fields.push_back(MakeField("linear", 7, kProtoUint32));
   }
 
   {
@@ -707,15 +870,14 @@
     event->name = "mdp_perf_set_wm_levels";
     event->group = "mdss";
     event->proto_field_id = 91;
-    event->fields.push_back(FieldFromNameIdType("pnum", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("use_space", 2, kProtoUint32));
-    event->fields.push_back(
-        FieldFromNameIdType("priority_bytes", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("wm0", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("wm1", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("wm2", 6, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("mb_cnt", 7, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("mb_size", 8, kProtoUint32));
+    event->fields.push_back(MakeField("pnum", 1, kProtoUint32));
+    event->fields.push_back(MakeField("use_space", 2, kProtoUint32));
+    event->fields.push_back(MakeField("priority_bytes", 3, kProtoUint32));
+    event->fields.push_back(MakeField("wm0", 4, kProtoUint32));
+    event->fields.push_back(MakeField("wm1", 5, kProtoUint32));
+    event->fields.push_back(MakeField("wm2", 6, kProtoUint32));
+    event->fields.push_back(MakeField("mb_cnt", 7, kProtoUint32));
+    event->fields.push_back(MakeField("mb_size", 8, kProtoUint32));
   }
 
   {
@@ -724,9 +886,9 @@
     event->name = "mdp_perf_update_bus";
     event->group = "mdss";
     event->proto_field_id = 95;
-    event->fields.push_back(FieldFromNameIdType("client", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("ab_quota", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("ib_quota", 3, kProtoUint64));
+    event->fields.push_back(MakeField("client", 1, kProtoInt32));
+    event->fields.push_back(MakeField("ab_quota", 2, kProtoUint64));
+    event->fields.push_back(MakeField("ib_quota", 3, kProtoUint64));
   }
 
   {
@@ -735,22 +897,22 @@
     event->name = "mdp_sspp_change";
     event->group = "mdss";
     event->proto_field_id = 79;
-    event->fields.push_back(FieldFromNameIdType("num", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("play_cnt", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("mixer", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("stage", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("format", 6, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("img_w", 7, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("img_h", 8, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_x", 9, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_y", 10, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_w", 11, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_h", 12, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_x", 13, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_y", 14, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_w", 15, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_h", 16, kProtoUint32));
+    event->fields.push_back(MakeField("num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("play_cnt", 2, kProtoUint32));
+    event->fields.push_back(MakeField("mixer", 3, kProtoUint32));
+    event->fields.push_back(MakeField("stage", 4, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 5, kProtoUint32));
+    event->fields.push_back(MakeField("format", 6, kProtoUint32));
+    event->fields.push_back(MakeField("img_w", 7, kProtoUint32));
+    event->fields.push_back(MakeField("img_h", 8, kProtoUint32));
+    event->fields.push_back(MakeField("src_x", 9, kProtoUint32));
+    event->fields.push_back(MakeField("src_y", 10, kProtoUint32));
+    event->fields.push_back(MakeField("src_w", 11, kProtoUint32));
+    event->fields.push_back(MakeField("src_h", 12, kProtoUint32));
+    event->fields.push_back(MakeField("dst_x", 13, kProtoUint32));
+    event->fields.push_back(MakeField("dst_y", 14, kProtoUint32));
+    event->fields.push_back(MakeField("dst_w", 15, kProtoUint32));
+    event->fields.push_back(MakeField("dst_h", 16, kProtoUint32));
   }
 
   {
@@ -759,22 +921,22 @@
     event->name = "mdp_sspp_set";
     event->group = "mdss";
     event->proto_field_id = 84;
-    event->fields.push_back(FieldFromNameIdType("num", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("play_cnt", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("mixer", 3, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("stage", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("flags", 5, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("format", 6, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("img_w", 7, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("img_h", 8, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_x", 9, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_y", 10, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_w", 11, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("src_h", 12, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_x", 13, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_y", 14, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_w", 15, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("dst_h", 16, kProtoUint32));
+    event->fields.push_back(MakeField("num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("play_cnt", 2, kProtoUint32));
+    event->fields.push_back(MakeField("mixer", 3, kProtoUint32));
+    event->fields.push_back(MakeField("stage", 4, kProtoUint32));
+    event->fields.push_back(MakeField("flags", 5, kProtoUint32));
+    event->fields.push_back(MakeField("format", 6, kProtoUint32));
+    event->fields.push_back(MakeField("img_w", 7, kProtoUint32));
+    event->fields.push_back(MakeField("img_h", 8, kProtoUint32));
+    event->fields.push_back(MakeField("src_x", 9, kProtoUint32));
+    event->fields.push_back(MakeField("src_y", 10, kProtoUint32));
+    event->fields.push_back(MakeField("src_w", 11, kProtoUint32));
+    event->fields.push_back(MakeField("src_h", 12, kProtoUint32));
+    event->fields.push_back(MakeField("dst_x", 13, kProtoUint32));
+    event->fields.push_back(MakeField("dst_y", 14, kProtoUint32));
+    event->fields.push_back(MakeField("dst_w", 15, kProtoUint32));
+    event->fields.push_back(MakeField("dst_h", 16, kProtoUint32));
   }
 
   {
@@ -783,10 +945,9 @@
     event->name = "mdp_trace_counter";
     event->group = "mdss";
     event->proto_field_id = 88;
-    event->fields.push_back(FieldFromNameIdType("pid", 1, kProtoInt32));
-    event->fields.push_back(
-        FieldFromNameIdType("counter_name", 2, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("value", 3, kProtoInt32));
+    event->fields.push_back(MakeField("pid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("counter_name", 2, kProtoString));
+    event->fields.push_back(MakeField("value", 3, kProtoInt32));
   }
 
   {
@@ -795,9 +956,8 @@
     event->name = "mdp_video_underrun_done";
     event->group = "mdss";
     event->proto_field_id = 92;
-    event->fields.push_back(FieldFromNameIdType("ctl_num", 1, kProtoUint32));
-    event->fields.push_back(
-        FieldFromNameIdType("underrun_cnt", 2, kProtoUint32));
+    event->fields.push_back(MakeField("ctl_num", 1, kProtoUint32));
+    event->fields.push_back(MakeField("underrun_cnt", 2, kProtoUint32));
   }
 
   {
@@ -806,7 +966,7 @@
     event->name = "rotator_bw_ao_as_context";
     event->group = "mdss";
     event->proto_field_id = 96;
-    event->fields.push_back(FieldFromNameIdType("state", 1, kProtoUint32));
+    event->fields.push_back(MakeField("state", 1, kProtoUint32));
   }
 
   {
@@ -815,10 +975,9 @@
     event->name = "tracing_mark_write";
     event->group = "mdss";
     event->proto_field_id = 80;
-    event->fields.push_back(FieldFromNameIdType("pid", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("trace_name", 2, kProtoString));
-    event->fields.push_back(
-        FieldFromNameIdType("trace_begin", 3, kProtoUint32));
+    event->fields.push_back(MakeField("pid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("trace_name", 2, kProtoString));
+    event->fields.push_back(MakeField("trace_begin", 3, kProtoUint32));
   }
 
   {
@@ -827,9 +986,9 @@
     event->name = "clock_disable";
     event->group = "power";
     event->proto_field_id = 15;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("state", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 3, kProtoUint64));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
+    event->fields.push_back(MakeField("state", 2, kProtoUint64));
+    event->fields.push_back(MakeField("cpu_id", 3, kProtoUint64));
   }
 
   {
@@ -838,9 +997,9 @@
     event->name = "clock_enable";
     event->group = "power";
     event->proto_field_id = 14;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("state", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 3, kProtoUint64));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
+    event->fields.push_back(MakeField("state", 2, kProtoUint64));
+    event->fields.push_back(MakeField("cpu_id", 3, kProtoUint64));
   }
 
   {
@@ -849,9 +1008,9 @@
     event->name = "clock_set_rate";
     event->group = "power";
     event->proto_field_id = 16;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("state", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 3, kProtoUint64));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
+    event->fields.push_back(MakeField("state", 2, kProtoUint64));
+    event->fields.push_back(MakeField("cpu_id", 3, kProtoUint64));
   }
 
   {
@@ -860,8 +1019,8 @@
     event->name = "cpu_frequency";
     event->group = "power";
     event->proto_field_id = 11;
-    event->fields.push_back(FieldFromNameIdType("state", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 2, kProtoUint32));
+    event->fields.push_back(MakeField("state", 1, kProtoUint32));
+    event->fields.push_back(MakeField("cpu_id", 2, kProtoUint32));
   }
 
   {
@@ -870,9 +1029,9 @@
     event->name = "cpu_frequency_limits";
     event->group = "power";
     event->proto_field_id = 12;
-    event->fields.push_back(FieldFromNameIdType("min_freq", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("max_freq", 2, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 3, kProtoUint32));
+    event->fields.push_back(MakeField("min_freq", 1, kProtoUint32));
+    event->fields.push_back(MakeField("max_freq", 2, kProtoUint32));
+    event->fields.push_back(MakeField("cpu_id", 3, kProtoUint32));
   }
 
   {
@@ -881,8 +1040,19 @@
     event->name = "cpu_idle";
     event->group = "power";
     event->proto_field_id = 13;
-    event->fields.push_back(FieldFromNameIdType("state", 1, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("cpu_id", 2, kProtoUint32));
+    event->fields.push_back(MakeField("state", 1, kProtoUint32));
+    event->fields.push_back(MakeField("cpu_id", 2, kProtoUint32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "suspend_resume";
+    event->group = "power";
+    event->proto_field_id = 113;
+    event->fields.push_back(MakeField("action", 1, kProtoString));
+    event->fields.push_back(MakeField("val", 2, kProtoInt32));
+    event->fields.push_back(MakeField("start", 3, kProtoUint32));
   }
 
   {
@@ -891,7 +1061,7 @@
     event->name = "regulator_disable";
     event->group = "regulator";
     event->proto_field_id = 60;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
   }
 
   {
@@ -900,7 +1070,7 @@
     event->name = "regulator_disable_complete";
     event->group = "regulator";
     event->proto_field_id = 61;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
   }
 
   {
@@ -909,7 +1079,7 @@
     event->name = "regulator_enable";
     event->group = "regulator";
     event->proto_field_id = 62;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
   }
 
   {
@@ -918,7 +1088,7 @@
     event->name = "regulator_enable_complete";
     event->group = "regulator";
     event->proto_field_id = 63;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
   }
 
   {
@@ -927,7 +1097,7 @@
     event->name = "regulator_enable_delay";
     event->group = "regulator";
     event->proto_field_id = 64;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
   }
 
   {
@@ -936,9 +1106,9 @@
     event->name = "regulator_set_voltage";
     event->group = "regulator";
     event->proto_field_id = 65;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("min", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("max", 3, kProtoInt32));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
+    event->fields.push_back(MakeField("min", 2, kProtoInt32));
+    event->fields.push_back(MakeField("max", 3, kProtoInt32));
   }
 
   {
@@ -947,8 +1117,8 @@
     event->name = "regulator_set_voltage_complete";
     event->group = "regulator";
     event->proto_field_id = 66;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("val", 2, kProtoUint32));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
+    event->fields.push_back(MakeField("val", 2, kProtoUint32));
   }
 
   {
@@ -957,9 +1127,9 @@
     event->name = "sched_blocked_reason";
     event->group = "sched";
     event->proto_field_id = 18;
-    event->fields.push_back(FieldFromNameIdType("pid", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("caller", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("io_wait", 3, kProtoUint32));
+    event->fields.push_back(MakeField("pid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("caller", 2, kProtoUint64));
+    event->fields.push_back(MakeField("io_wait", 3, kProtoUint32));
   }
 
   {
@@ -968,10 +1138,9 @@
     event->name = "sched_cpu_hotplug";
     event->group = "sched";
     event->proto_field_id = 19;
-    event->fields.push_back(
-        FieldFromNameIdType("affected_cpu", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("error", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("status", 3, kProtoInt32));
+    event->fields.push_back(MakeField("affected_cpu", 1, kProtoInt32));
+    event->fields.push_back(MakeField("error", 2, kProtoInt32));
+    event->fields.push_back(MakeField("status", 3, kProtoInt32));
   }
 
   {
@@ -980,13 +1149,13 @@
     event->name = "sched_switch";
     event->group = "sched";
     event->proto_field_id = 4;
-    event->fields.push_back(FieldFromNameIdType("prev_comm", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("prev_pid", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("prev_prio", 3, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("prev_state", 4, kProtoInt64));
-    event->fields.push_back(FieldFromNameIdType("next_comm", 5, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("next_pid", 6, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("next_prio", 7, kProtoInt32));
+    event->fields.push_back(MakeField("prev_comm", 1, kProtoString));
+    event->fields.push_back(MakeField("prev_pid", 2, kProtoInt32));
+    event->fields.push_back(MakeField("prev_prio", 3, kProtoInt32));
+    event->fields.push_back(MakeField("prev_state", 4, kProtoInt64));
+    event->fields.push_back(MakeField("next_comm", 5, kProtoString));
+    event->fields.push_back(MakeField("next_pid", 6, kProtoInt32));
+    event->fields.push_back(MakeField("next_prio", 7, kProtoInt32));
   }
 
   {
@@ -995,11 +1164,24 @@
     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));
+    event->fields.push_back(MakeField("comm", 1, kProtoString));
+    event->fields.push_back(MakeField("pid", 2, kProtoInt32));
+    event->fields.push_back(MakeField("prio", 3, kProtoInt32));
+    event->fields.push_back(MakeField("success", 4, kProtoInt32));
+    event->fields.push_back(MakeField("target_cpu", 5, kProtoInt32));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "sched_wakeup_new";
+    event->group = "sched";
+    event->proto_field_id = 114;
+    event->fields.push_back(MakeField("comm", 1, kProtoString));
+    event->fields.push_back(MakeField("pid", 2, kProtoInt32));
+    event->fields.push_back(MakeField("prio", 3, kProtoInt32));
+    event->fields.push_back(MakeField("success", 4, kProtoInt32));
+    event->fields.push_back(MakeField("target_cpu", 5, kProtoInt32));
   }
 
   {
@@ -1008,11 +1190,11 @@
     event->name = "sched_waking";
     event->group = "sched";
     event->proto_field_id = 20;
-    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));
+    event->fields.push_back(MakeField("comm", 1, kProtoString));
+    event->fields.push_back(MakeField("pid", 2, kProtoInt32));
+    event->fields.push_back(MakeField("prio", 3, kProtoInt32));
+    event->fields.push_back(MakeField("success", 4, kProtoInt32));
+    event->fields.push_back(MakeField("target_cpu", 5, kProtoInt32));
   }
 
   {
@@ -1021,8 +1203,8 @@
     event->name = "sync_pt";
     event->group = "sync";
     event->proto_field_id = 38;
-    event->fields.push_back(FieldFromNameIdType("timeline", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("value", 2, kProtoString));
+    event->fields.push_back(MakeField("timeline", 1, kProtoString));
+    event->fields.push_back(MakeField("value", 2, kProtoString));
   }
 
   {
@@ -1031,8 +1213,8 @@
     event->name = "sync_timeline";
     event->group = "sync";
     event->proto_field_id = 39;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("value", 2, kProtoString));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
+    event->fields.push_back(MakeField("value", 2, kProtoString));
   }
 
   {
@@ -1041,9 +1223,9 @@
     event->name = "sync_wait";
     event->group = "sync";
     event->proto_field_id = 40;
-    event->fields.push_back(FieldFromNameIdType("name", 1, kProtoString));
-    event->fields.push_back(FieldFromNameIdType("status", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("begin", 3, kProtoUint32));
+    event->fields.push_back(MakeField("name", 1, kProtoString));
+    event->fields.push_back(MakeField("status", 2, kProtoInt32));
+    event->fields.push_back(MakeField("begin", 3, kProtoUint32));
   }
 
   {
@@ -1052,10 +1234,9 @@
     event->name = "mm_vmscan_direct_reclaim_begin";
     event->group = "vmscan";
     event->proto_field_id = 46;
-    event->fields.push_back(FieldFromNameIdType("order", 1, kProtoInt32));
-    event->fields.push_back(
-        FieldFromNameIdType("may_writepage", 2, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("gfp_flags", 3, kProtoUint32));
+    event->fields.push_back(MakeField("order", 1, kProtoInt32));
+    event->fields.push_back(MakeField("may_writepage", 2, kProtoInt32));
+    event->fields.push_back(MakeField("gfp_flags", 3, kProtoUint32));
   }
 
   {
@@ -1064,8 +1245,7 @@
     event->name = "mm_vmscan_direct_reclaim_end";
     event->group = "vmscan";
     event->proto_field_id = 47;
-    event->fields.push_back(
-        FieldFromNameIdType("nr_reclaimed", 1, kProtoUint64));
+    event->fields.push_back(MakeField("nr_reclaimed", 1, kProtoUint64));
   }
 
   {
@@ -1074,7 +1254,7 @@
     event->name = "mm_vmscan_kswapd_sleep";
     event->group = "vmscan";
     event->proto_field_id = 49;
-    event->fields.push_back(FieldFromNameIdType("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
   }
 
   {
@@ -1083,8 +1263,8 @@
     event->name = "mm_vmscan_kswapd_wake";
     event->group = "vmscan";
     event->proto_field_id = 48;
-    event->fields.push_back(FieldFromNameIdType("nid", 1, kProtoInt32));
-    event->fields.push_back(FieldFromNameIdType("order", 2, kProtoInt32));
+    event->fields.push_back(MakeField("nid", 1, kProtoInt32));
+    event->fields.push_back(MakeField("order", 2, kProtoInt32));
   }
 
   {
@@ -1093,7 +1273,7 @@
     event->name = "workqueue_activate_work";
     event->group = "workqueue";
     event->proto_field_id = 56;
-    event->fields.push_back(FieldFromNameIdType("work", 1, kProtoUint64));
+    event->fields.push_back(MakeField("work", 1, kProtoUint64));
   }
 
   {
@@ -1102,7 +1282,7 @@
     event->name = "workqueue_execute_end";
     event->group = "workqueue";
     event->proto_field_id = 57;
-    event->fields.push_back(FieldFromNameIdType("work", 1, kProtoUint64));
+    event->fields.push_back(MakeField("work", 1, kProtoUint64));
   }
 
   {
@@ -1111,8 +1291,8 @@
     event->name = "workqueue_execute_start";
     event->group = "workqueue";
     event->proto_field_id = 58;
-    event->fields.push_back(FieldFromNameIdType("work", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("function", 2, kProtoUint64));
+    event->fields.push_back(MakeField("work", 1, kProtoUint64));
+    event->fields.push_back(MakeField("function", 2, kProtoUint64));
   }
 
   {
@@ -1121,11 +1301,11 @@
     event->name = "workqueue_queue_work";
     event->group = "workqueue";
     event->proto_field_id = 59;
-    event->fields.push_back(FieldFromNameIdType("work", 1, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("function", 2, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("workqueue", 3, kProtoUint64));
-    event->fields.push_back(FieldFromNameIdType("req_cpu", 4, kProtoUint32));
-    event->fields.push_back(FieldFromNameIdType("cpu", 5, kProtoUint32));
+    event->fields.push_back(MakeField("work", 1, kProtoUint64));
+    event->fields.push_back(MakeField("function", 2, kProtoUint64));
+    event->fields.push_back(MakeField("workqueue", 3, kProtoUint64));
+    event->fields.push_back(MakeField("req_cpu", 4, kProtoUint32));
+    event->fields.push_back(MakeField("cpu", 5, kProtoUint32));
   }
 
   return events;
diff --git a/src/ftrace_reader/event_info_constants.cc b/src/ftrace_reader/event_info_constants.cc
index 0eba14e..b35de17 100644
--- a/src/ftrace_reader/event_info_constants.cc
+++ b/src/ftrace_reader/event_info_constants.cc
@@ -18,7 +18,7 @@
 
 namespace perfetto {
 
-Field FieldFromNameIdType(const char* name, size_t id, ProtoFieldType type) {
+Field MakeField(const char* name, size_t id, ProtoFieldType type) {
   Field field{};
   field.ftrace_name = name;
   field.proto_field_id = id;
@@ -29,7 +29,7 @@
 std::vector<Field> GetStaticCommonFieldsInfo() {
   std::vector<Field> fields;
 
-  fields.push_back(FieldFromNameIdType("common_pid", 2, kProtoInt32));
+  fields.push_back(MakeField("common_pid", 2, kProtoInt32));
 
   return fields;
 }
@@ -37,7 +37,9 @@
 bool SetTranslationStrategy(FtraceFieldType ftrace,
                             ProtoFieldType proto,
                             TranslationStrategy* out) {
-  if (ftrace == kFtraceUint16 && proto == kProtoUint32) {
+  if (ftrace == kFtraceUint8 && proto == kProtoUint32) {
+    *out = kUint8ToUint32;
+  } else if (ftrace == kFtraceUint16 && proto == kProtoUint32) {
     *out = kUint16ToUint32;
   } else if (ftrace == kFtraceUint32 && proto == kProtoUint32) {
     *out = kUint32ToUint32;
diff --git a/src/ftrace_reader/event_info_constants.h b/src/ftrace_reader/event_info_constants.h
index ee68bbb..4b5ce81 100644
--- a/src/ftrace_reader/event_info_constants.h
+++ b/src/ftrace_reader/event_info_constants.h
@@ -45,7 +45,8 @@
 };
 
 enum FtraceFieldType {
-  kFtraceUint16 = 1,
+  kFtraceUint8 = 1,
+  kFtraceUint16,
   kFtraceUint32,
   kFtraceUint64,
   kFtraceInt16,
@@ -61,7 +62,8 @@
 // where there exists a way to convert from the FtraceFieldType
 // into the ProtoFieldType.
 enum TranslationStrategy {
-  kUint16ToUint32 = 1,
+  kUint8ToUint32 = 1,
+  kUint16ToUint32,
   kUint32ToUint32,
   kUint32ToUint64,
   kUint64ToUint64,
@@ -115,6 +117,8 @@
 
 inline const char* ToString(FtraceFieldType v) {
   switch (v) {
+    case kFtraceUint8:
+      return "uint8";
     case kFtraceUint16:
       return "uint16";
     case kFtraceUint32:
@@ -198,7 +202,7 @@
                             ProtoFieldType proto,
                             TranslationStrategy* out);
 
-Field FieldFromNameIdType(const char* name, size_t id, ProtoFieldType type);
+Field MakeField(const char* name, size_t id, ProtoFieldType type);
 
 }  // namespace perfetto
 
diff --git a/src/ftrace_reader/proto_translation_table.cc b/src/ftrace_reader/proto_translation_table.cc
index 1795480..afc5a29 100644
--- a/src/ftrace_reader/proto_translation_table.cc
+++ b/src/ftrace_reader/proto_translation_table.cc
@@ -169,7 +169,10 @@
   }
 
   // Ints of various sizes:
-  if (size == 2 && is_signed) {
+  if (size == 1 && !is_signed) {
+    *out = kFtraceUint8;
+    return true;
+  } else if (size == 2 && is_signed) {
     *out = kFtraceInt16;
     return true;
   } else if (size == 2 && !is_signed) {
diff --git a/test/configs/ftrace.cfg b/test/configs/ftrace.cfg
index df3082e..66d2f44 100644
--- a/test/configs/ftrace.cfg
+++ b/test/configs/ftrace.cfg
@@ -11,62 +11,88 @@
     ftrace_config {
       buffer_size_kb: 40 # 4 (page size) * 10
       drain_period_ms: 200
-      event_names: "cpufreq_interactive_setspeed"
-      event_names: "cpufreq_interactive_target"
-      event_names: "cpufreq_interactive_already"
-      event_names: "cpufreq_interactive_notyet"
-      event_names: "cpufreq_interactive_boost"
-      event_names: "cpufreq_interactive_unboost"
+      event_names: "binder_lock"
+      event_names: "binder_locked"
+      event_names: "binder_set_priority"
+      event_names: "binder_transaction"
+      event_names: "binder_transaction_received"
+      event_names: "binder_unlock"
+      event_names: "block_rq_issue"
+      event_names: "cgroup_attach_task"
+      event_names: "cgroup_destroy_root"
+      event_names: "cgroup_mkdir"
+      event_names: "cgroup_release"
+      event_names: "cgroup_remount"
+      event_names: "cgroup_rename"
+      event_names: "cgroup_rmdir"
+      event_names: "cgroup_setup_root"
+      event_names: "cgroup_transfer_tasks"
       event_names: "clock_disable"
       event_names: "clock_enable"
       event_names: "clock_set_rate"
       event_names: "cpu_frequency"
-      event_names: "cpu_idle"
       event_names: "cpu_frequency_limits"
-      event_names: "sched_switch"
-      event_names: "sched_wakeup"
-      event_names: "sched_blocked_reason"
-      event_names: "sched_cpu_hotplug"
-      event_names: "sched_waking"
-      event_names: "i2c_read"
-      event_names: "i2c_write"
-      event_names: "i2c_result"
-      event_names: "i2c_reply"
-      event_names: "smbus_read"
-      event_names: "smbus_write"
-      event_names: "smbus_result"
-      event_names: "smbus_reply"
+      event_names: "cpu_idle"
+      event_names: "cpufreq_interactive_already"
+      event_names: "cpufreq_interactive_boost"
+      event_names: "cpufreq_interactive_notyet"
+      event_names: "cpufreq_interactive_setspeed"
+      event_names: "cpufreq_interactive_target"
+      event_names: "cpufreq_interactive_unboost"
       event_names: "ext4_da_write_begin"
       event_names: "ext4_da_write_end"
       event_names: "ext4_sync_file_enter"
       event_names: "ext4_sync_file_exit"
-      event_names: "block_rq_issue"
-      event_names: "mm_vmscan_direct_reclaim_begin"
-      event_names: "mm_vmscan_direct_reclaim_end"
-      event_names: "mm_vmscan_kswapd_wake"
-      event_names: "mm_vmscan_kswapd_sleep"
-      event_names: "binder_transaction"
-      event_names: "binder_transaction_received"
-      event_names: "binder_set_priority"
-      event_names: "binder_lock"
-      event_names: "binder_locked"
-      event_names: "binder_unlock"
-      event_names: "lowmemory_kill"
+      event_names: "i2c_read"
+      event_names: "i2c_reply"
+      event_names: "i2c_result"
+      event_names: "i2c_write"
       event_names: "ipi_entry"
       event_names: "ipi_exit"
       event_names: "ipi_raise"
-      event_names: "softirq_entry"
-      event_names: "softirq_exit"
-      event_names: "softirq_raise"
       event_names: "irq_handler_entry"
       event_names: "irq_handler_exit"
-      event_names: "sync_pt"
-      event_names: "sync_timeline"
-      event_names: "sync_wait"
-      event_names: "workqueue_activate_work"
-      event_names: "workqueue_execute_end"
-      event_names: "workqueue_execute_start"
-      event_names: "workqueue_queue_work"
+      event_names: "lowmemory_kill"
+      event_names: "mdp_cmd_kickoff"
+      event_names: "mdp_cmd_pingpong_done"
+      event_names: "mdp_cmd_readptr_done"
+      event_names: "mdp_cmd_release_bw"
+      event_names: "mdp_cmd_wait_pingpong"
+      event_names: "mdp_commit"
+      event_names: "mdp_compare_bw"
+      event_names: "mdp_misr_crc"
+      event_names: "mdp_mixer_update"
+      event_names: "mdp_perf_prefill_calc"
+      event_names: "mdp_perf_set_ot"
+      event_names: "mdp_perf_set_panic_luts"
+      event_names: "mdp_perf_set_qos_luts"
+      event_names: "mdp_perf_set_wm_levels"
+      event_names: "mdp_perf_update_bus"
+      event_names: "mdp_sspp_change"
+      event_names: "mdp_sspp_set"
+      event_names: "mdp_trace_counter"
+      event_names: "mdp_video_underrun_done"
+      event_names: "mm_compaction_begin"
+      event_names: "mm_compaction_defer_compaction"
+      event_names: "mm_compaction_defer_reset"
+      event_names: "mm_compaction_deferred"
+      event_names: "mm_compaction_end"
+      event_names: "mm_compaction_finished"
+      event_names: "mm_compaction_isolate_freepages"
+      event_names: "mm_compaction_isolate_migratepages"
+      event_names: "mm_compaction_kcompactd_sleep"
+      event_names: "mm_compaction_kcompactd_wake"
+      event_names: "mm_compaction_migratepages"
+      event_names: "mm_compaction_suitable"
+      event_names: "mm_compaction_try_to_compact_pages"
+      event_names: "mm_compaction_wakeup_kcompactd"
+      event_names: "mm_filemap_add_to_page_cache"
+      event_names: "mm_filemap_delete_from_page_cache"
+      event_names: "mm_vmscan_direct_reclaim_begin"
+      event_names: "mm_vmscan_direct_reclaim_end"
+      event_names: "mm_vmscan_kswapd_sleep"
+      event_names: "mm_vmscan_kswapd_wake"
+      event_names: "print"
       event_names: "regulator_disable"
       event_names: "regulator_disable_complete"
       event_names: "regulator_enable"
@@ -74,38 +100,29 @@
       event_names: "regulator_enable_delay"
       event_names: "regulator_set_voltage"
       event_names: "regulator_set_voltage_complete"
-      event_names: "cgroup_attach_task"
-      event_names: "cgroup_mkdir"
-      event_names: "cgroup_remount"
-      event_names: "cgroup_rmdir"
-      event_names: "cgroup_transfer_tasks"
-      event_names: "cgroup_destroy_root"
-      event_names: "cgroup_release"
-      event_names: "cgroup_rename"
-      event_names: "cgroup_setup_root"
-      event_names: "mdp_cmd_kickoff"
-      event_names: "mdp_commit"
-      event_names: "mdp_perf_set_ot"
-      event_names: "mdp_sspp_change"
-      event_names: "tracing_mark_write"
-      event_names: "mdp_cmd_pingpong_done"
-      event_names: "mdp_compare_bw"
-      event_names: "mdp_perf_set_panic_luts"
-      event_names: "mdp_sspp_set"
-      event_names: "mdp_cmd_readptr_done"
-      event_names: "mdp_misr_crc"
-      event_names: "mdp_perf_set_qos_luts"
-      event_names: "mdp_trace_counter"
-      event_names: "mdp_cmd_release_bw"
-      event_names: "mdp_mixer_update"
-      event_names: "mdp_perf_set_wm_levels"
-      event_names: "mdp_video_underrun_done"
-      event_names: "mdp_cmd_wait_pingpong"
-      event_names: "mdp_perf_prefill_calc"
-      event_names: "mdp_perf_update_bus"
       event_names: "rotator_bw_ao_as_context"
-      event_names: "mm_filemap_add_to_page_cache"
-      event_names: "mm_filemap_delete_from_page_cache"
+      event_names: "sched_blocked_reason"
+      event_names: "sched_cpu_hotplug"
+      event_names: "sched_switch"
+      event_names: "sched_wakeup"
+      event_names: "sched_wakeup_new"
+      event_names: "sched_waking"
+      event_names: "smbus_read"
+      event_names: "smbus_reply"
+      event_names: "smbus_result"
+      event_names: "smbus_write"
+      event_names: "softirq_entry"
+      event_names: "softirq_exit"
+      event_names: "softirq_raise"
+      event_names: "suspend_resume"
+      event_names: "sync_pt"
+      event_names: "sync_timeline"
+      event_names: "sync_wait"
+      event_names: "tracing_mark_write"
+      event_names: "workqueue_activate_work"
+      event_names: "workqueue_execute_end"
+      event_names: "workqueue_execute_start"
+      event_names: "workqueue_queue_work"
     }
   }
 }
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist
index a5cdde3..0735e00 100644
--- a/tools/ftrace_proto_gen/event_whitelist
+++ b/tools/ftrace_proto_gen/event_whitelist
@@ -94,3 +94,19 @@
 mdss/rotator_bw_ao_as_context
 filemap/mm_filemap_add_to_page_cache
 filemap/mm_filemap_delete_from_page_cache
+compaction/mm_compaction_begin
+compaction/mm_compaction_defer_compaction
+compaction/mm_compaction_deferred
+compaction/mm_compaction_defer_reset
+compaction/mm_compaction_end
+compaction/mm_compaction_finished
+compaction/mm_compaction_isolate_freepages
+compaction/mm_compaction_isolate_migratepages
+compaction/mm_compaction_kcompactd_sleep
+compaction/mm_compaction_kcompactd_wake
+compaction/mm_compaction_migratepages
+compaction/mm_compaction_suitable
+compaction/mm_compaction_try_to_compact_pages
+compaction/mm_compaction_wakeup_kcompactd
+power/suspend_resume
+sched/sched_wakeup_new
diff --git a/tools/ftrace_proto_gen/ftrace_proto_gen.cc b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
index 8669dec..9ecdb4e 100644
--- a/tools/ftrace_proto_gen/ftrace_proto_gen.cc
+++ b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
@@ -131,13 +131,15 @@
                             perfetto::Proto proto,
                             const std::string& group,
                             const std::string& proto_field_id) {
-  std::string s = "event->name = \"" + format.name + "\";\nevent->group = \"" +
-                  group + "\";\nevent->proto_field_id = " + proto_field_id +
-                  ";\n";
+  std::string s = "";
+  s += "    event->name = \"" + format.name + "\";\n";
+  s += "    event->group = \"" + group + "\";\n";
+  s += "    event->proto_field_id = " + proto_field_id + ";\n";
+
   for (const auto& field : proto.fields) {
-    s += "event->fields.push_back(FieldFromNameIdType(\"" + field.name +
-         "\", " + std::to_string(field.number) + ", kProto" +
-         ToCamelCase(field.type) + "));\n";
+    s += "    event->fields.push_back(MakeField(\"" + field.name + "\", " +
+         std::to_string(field.number) + ", kProto" + ToCamelCase(field.type) +
+         "));\n";
   }
   return s;
 }
@@ -151,29 +153,50 @@
     return;
   }
 
-  std::string s = std::string("// Autogenerated by ") + __FILE__ +
-                  " do not edit.\n\n#include "
-                  "\"src/ftrace_reader/event_info.h\"\n\nnamespace perfetto "
-                  "{\n\nstd::vector<Event> GetStaticEventInfo() "
-                  "{\nstd::vector<Event> events;\n";
+  std::string s = "// Autogenerated by:\n";
+  s += std::string("// ") + __FILE__ + "\n";
+  s += "// Do not edit.\n";
+  s += R"(
+#include "src/ftrace_reader/event_info.h"
+
+namespace perfetto {
+
+std::vector<Event> GetStaticEventInfo() {
+  std::vector<Event> events;
+)";
+
   for (const auto& event : events_info) {
-    s +=
-        "\n{\nevents.emplace_back(Event{});\nEvent* event = &events.back();\n" +
-        event + "}\n";
+    s += "\n";
+    s += "  {\n";
+    s += "    events.emplace_back(Event{});\n";
+    s += "    Event* event = &events.back();\n";
+    s += event;
+    s += "  }\n";
   }
-  s += "\n  return events;\n}\n\n}  // namespace perfetto\n";
+
+  s += R"(
+  return events;
+}
+
+}  // namespace perfetto
+)";
 
   fout << s;
   fout.close();
 }
 
 std::string Proto::ToString() {
-  std::string s = "// Autogenerated by " __FILE__
-                  " do not edit.\n"
-                  "syntax = \"proto2\";\n"
-                  "option optimize_for = LITE_RUNTIME;\n"
-                  "package perfetto.protos;\n"
-                  "\n";
+  std::string s = "// Autogenerated by:\n";
+  s += std::string("// ") + __FILE__ + "\n";
+  s += "// Do not edit.\n";
+
+  s += R"(
+syntax = "proto2";
+option optimize_for = LITE_RUNTIME;
+package perfetto.protos;
+
+)";
+
   s += "message " + name + " {\n";
   for (const Proto::Field& field : fields) {
     s += "  optional " + field.type + " " + field.name + " = " +
diff --git a/tools/tmux b/tools/tmux
index 70aa6c8..1c5c371 100755
--- a/tools/tmux
+++ b/tools/tmux
@@ -14,6 +14,12 @@
 # limitations under the License.
 set -e
 
+function is_monolithic() {
+  local out=$1
+  gn args $out --list --short | grep 'monolithic_binaries = true' > /dev/null
+  return $?
+}
+
 # If not set guess the OUT dir using the latest directory.
 if [ ! -f "$OUT/args.gn" ]; then
   echo "OUT=$OUT doesn't look like an output directory."
@@ -33,6 +39,14 @@
 adb push $OUT/perfetto /data/local/tmp/
 set +x
 
+PREFIX=""
+if ! is_monolithic $OUT;  then
+  PREFIX="LD_LIBRARY_PATH=/data/local/tmp"
+  set -x
+  adb push $OUT/libtraced_shared.so /data/local/tmp/
+  set +x
+fi
+
 CONFIG_DEVICE_PATH=$CONFIG
 if [[ "$CONFIG" != ":test" ]]; then
   CONFIG_DEVICE_PATH=/data/local/tmp/$CONFIG.protobuf
@@ -80,13 +94,13 @@
 sleep 2
 
 tmux select-pane -t 1
-tmux send-keys "/data/local/tmp/traced" Enter
+tmux send-keys "$PREFIX /data/local/tmp/traced" Enter
 
 tmux select-pane -t 0
-tmux send-keys "/data/local/tmp/traced_probes" Enter
+tmux send-keys "$PREFIX /data/local/tmp/traced_probes" Enter
 
 tmux select-pane -t 2
-tmux send-keys "/data/local/tmp/perfetto -c $CONFIG_DEVICE_PATH -o /data/local/tmp/trace"
+tmux send-keys "$PREFIX /data/local/tmp/perfetto -c $CONFIG_DEVICE_PATH -o /data/local/tmp/trace"
 
 # Select consumer pane.
 tmux select-pane -t 2
diff --git a/tools/trace_to_text/main.cc b/tools/trace_to_text/main.cc
index 147ba4a..33f5deb 100644
--- a/tools/trace_to_text/main.cc
+++ b/tools/trace_to_text/main.cc
@@ -166,6 +166,22 @@
 using protos::WorkqueueExecuteStartFtraceEvent;
 using protos::WorkqueueActivateWorkFtraceEvent;
 using protos::WorkqueueQueueWorkFtraceEvent;
+using protos::MmCompactionBeginFtraceEvent;
+using protos::MmCompactionDeferCompactionFtraceEvent;
+using protos::MmCompactionDeferredFtraceEvent;
+using protos::MmCompactionDeferResetFtraceEvent;
+using protos::MmCompactionEndFtraceEvent;
+using protos::MmCompactionFinishedFtraceEvent;
+using protos::MmCompactionIsolateFreepagesFtraceEvent;
+using protos::MmCompactionIsolateMigratepagesFtraceEvent;
+using protos::MmCompactionKcompactdSleepFtraceEvent;
+using protos::MmCompactionKcompactdWakeFtraceEvent;
+using protos::MmCompactionMigratepagesFtraceEvent;
+using protos::MmCompactionSuitableFtraceEvent;
+using protos::MmCompactionTryToCompactPagesFtraceEvent;
+using protos::MmCompactionWakeupKcompactdFtraceEvent;
+using protos::SuspendResumeFtraceEvent;
+using protos::SchedWakeupNewFtraceEvent;
 using protos::Trace;
 using protos::TracePacket;
 
@@ -208,6 +224,16 @@
   return "R";
 }
 
+const char* MmCompactionRetArray[] = {
+    "deferred", "skipped",          "continue",          "partial",
+    "complete", "no_suitable_page", "not_suitable_zone", "contended"};
+
+const char* MmCompactionSuitableArray[] = {"DMA", "Normal", "Movable"};
+
+const char* SoftirqArray[] = {"HI",      "TIMER",        "NET_TX",  "NET_RX",
+                              "BLOCK",   "BLOCK_IOPOLL", "TASKLET", "SCHED",
+                              "HRTIMER", "RCU"};
+
 uint64_t TimestampToSeconds(uint64_t timestamp) {
   return timestamp / 1000000000ul;
 }
@@ -559,43 +585,39 @@
 std::string FormatSoftirqRaise(const SoftirqRaiseFtraceEvent& event) {
   char line[2048];
   sprintf(line, "softirq_raise: vec=%u [action=%s]\\n", event.vec(),
-          "({ 0, 'HI' }, {1, 'TIMER' }, { 2, 'NET_TX' }, { 3, 'NET_RX' }, { 4, "
-          "'BLOCK' }, { 5, 'BLOCK_IOPOLL' }, { 6, 'TASKLET' }, { 7, 'SCHED' }, "
-          "{ 8, 'HRTIMER' }, { 9, 'RCU' })");
+          SoftirqArray[event.vec()]);
   return std::string(line);
 }
 
 std::string FormatSoftirqEntry(const SoftirqEntryFtraceEvent& event) {
   char line[2048];
   sprintf(line, "softirq_entry: vec=%u [action=%s]\\n", event.vec(),
-          "({ 0, 'HI' }, {1, 'TIMER' }, { 2, 'NET_TX' }, { 3, 'NET_RX' }, { 4, "
-          "'BLOCK' }, { 5, 'BLOCK_IOPOLL' }, { 6, 'TASKLET' }, { 7, 'SCHED' }, "
-          "{ 8, 'HRTIMER' }, { 9, 'RCU' })");
+          SoftirqArray[event.vec()]);
   return std::string(line);
 }
 
 std::string FormatSoftirqExit(const SoftirqExitFtraceEvent& event) {
   char line[2048];
   sprintf(line, "softirq_exit: vec=%u [action=%s]\\n", event.vec(),
-          "({ 0, 'HI' }, {1, 'TIMER' }, { 2, 'NET_TX' }, { 3, 'NET_RX' }, { 4, "
-          "'BLOCK' }, { 5, 'BLOCK_IOPOLL' }, { 6, 'TASKLET' }, { 7, 'SCHED' }, "
-          "{ 8, 'HRTIMER' }, { 9, 'RCU' })");
+          SoftirqArray[event.vec()]);
   return std::string(line);
 }
 
 std::string FormatI2cWrite(const I2cWriteFtraceEvent& event) {
   char line[2048];
-  sprintf(line, "i2c_write: i2c-%d #%u a=%03x f=%04x l=%u [%*xhD]\\n",
+  // TODO(hjd): Check event.buf().
+  sprintf(line, "i2c_write: i2c-%d #%u a=%03x f=%04x l=%u\\n",
           event.adapter_nr(), event.msg_nr(), event.addr(), event.flags(),
-          event.len(), event.len(), event.buf());
+          event.len());
   return std::string(line);
 }
 
 std::string FormatI2cReply(const I2cReplyFtraceEvent& event) {
   char line[2048];
-  sprintf(line, "i2c_reply: i2c-%d #%u a=%03x f=%04x l=%u [%*xhD]\\n",
+  // TODO(hjd): Check event.buf().
+  sprintf(line, "i2c_reply: i2c-%d #%u a=%03x f=%04x l=%u\\n",
           event.adapter_nr(), event.msg_nr(), event.addr(), event.flags(),
-          event.len(), event.len(), event.buf());
+          event.len());
   return std::string(line);
 }
 
@@ -660,6 +682,162 @@
   return std::string(line);
 }
 
+std::string FormatMmCompactionBegin(const MmCompactionBeginFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_begin: zone_start=0x%llx migrate_pfn=0x%llx "
+          "free_pfn=0x%llx zone_end=0x%llx, mode=%s\\n",
+          event.zone_start(), event.migrate_pfn(), event.free_pfn(),
+          event.zone_end(), event.sync() ? "sync" : "async");
+  return std::string(line);
+}
+
+std::string FormatMmCompactionDeferCompaction(
+    const MmCompactionDeferCompactionFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_defer_compaction: node=%d zone=%-8s order=%d "
+          "order_failed=%d consider=%u limit=%lu\\n",
+          event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
+          event.order_failed(), event.considered(), 1UL << event.defer_shift());
+  return std::string(line);
+}
+
+std::string FormatMmCompactionDeferred(
+    const MmCompactionDeferredFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_deferred: node=%d zone=%-8s order=%d order_failed=%d "
+          "consider=%u limit=%lu\\n",
+          event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
+          event.order_failed(), event.considered(), 1UL << event.defer_shift());
+  return std::string(line);
+}
+
+std::string FormatMmCompactionDeferReset(
+    const MmCompactionDeferResetFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_defer_reset: node=%d zone=%-8s order=%d "
+          "order_failed=%d consider=%u limit=%lu\\n",
+          event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
+          event.order_failed(), event.considered(), 1UL << event.defer_shift());
+  return std::string(line);
+}
+
+std::string FormatMmCompactionEnd(const MmCompactionEndFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_end: zone_start=0x%llx migrate_pfn=0x%llx "
+          "free_pfn=0x%llx zone_end=0x%llx, mode=%s status=%s\\n",
+          event.zone_start(), event.migrate_pfn(), event.free_pfn(),
+          event.zone_end(), event.sync() ? "sync" : "aysnc",
+          MmCompactionRetArray[event.status()]);
+  return std::string(line);
+}
+
+std::string FormatMmCompactionFinished(
+    const MmCompactionFinishedFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "mm_compaction_finished: node=%d zone=%-8s order=%d ret=%s\\n",
+          event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
+          MmCompactionRetArray[event.ret()]);
+  return std::string(line);
+}
+
+std::string FormatMmCompactionIsolateFreepages(
+    const MmCompactionIsolateFreepagesFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_isolate_freepages: range=(0x%llx ~ 0x%llx) "
+          "nr_scanned=%llu nr_taken=%llu\\n",
+          event.start_pfn(), event.end_pfn(), event.nr_scanned(),
+          event.nr_taken());
+  return std::string(line);
+}
+
+std::string FormatMmCompactionIsolateMigratepages(
+    const MmCompactionIsolateMigratepagesFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_isolate_migratepages: range=(0x%llx ~ 0x%llx) "
+          "nr_scanned=%llu nr_taken=%llu\\n",
+          event.start_pfn(), event.end_pfn(), event.nr_scanned(),
+          event.nr_taken());
+  return std::string(line);
+}
+
+std::string FormatMmCompactionKcompactdSleep(
+    const MmCompactionKcompactdSleepFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "mm_compaction_kcompactd_sleep: nid=%d\\n", event.nid());
+  return std::string(line);
+}
+
+std::string FormatMmCompactionKcompactdWake(
+    const MmCompactionKcompactdWakeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_kcompactd_wake: nid=%d order=%d classzone_idx=%-8s\\n",
+          event.nid(), event.order(),
+          MmCompactionSuitableArray[event.classzone_idx()]);
+  return std::string(line);
+}
+
+std::string FormatMmCompactionMigratepages(
+    const MmCompactionMigratepagesFtraceEvent& event) {
+  char line[2048];
+  sprintf(line,
+          "mm_compaction_migratepages: nr_migrated=%llu nr_failed=%llu\\n",
+          event.nr_migrated(), event.nr_failed());
+  return std::string(line);
+}
+
+std::string FormatMmCompactionSuitable(
+    const MmCompactionSuitableFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "mm_compaction_suitable: node=%d zone=%-8s order=%d ret=%s\\n",
+          event.nid(), MmCompactionSuitableArray[event.idx()], event.order(),
+          MmCompactionRetArray[event.ret()]);
+  return std::string(line);
+}
+
+std::string FormatMmCompactionTryToCompactPages(
+    const MmCompactionTryToCompactPagesFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "mm_compaction_try_to_compact_pages: order=%d gfp_mask=0x%x mode=%d\\n",
+      event.order(), event.gfp_mask(),
+      event.mode());  // convert to int?
+  return std::string(line);
+}
+
+std::string FormatMmCompactionWakeupKcompactd(
+    const MmCompactionWakeupKcompactdFtraceEvent& event) {
+  char line[2048];
+  sprintf(
+      line,
+      "mm_compaction_wakeup_kcompactd: nid=%d order=%d classzone_idx=%-8s\\n",
+      event.nid(), event.order(),
+      MmCompactionSuitableArray[event.classzone_idx()]);
+  return std::string(line);
+}
+
+std::string FormatSuspendResume(const SuspendResumeFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "suspend_resume: %s[%u] %s\\n", event.action().c_str(),
+          event.val(), event.start() ? "begin" : "end");
+  return std::string(line);
+}
+
+std::string FormatSchedWakeupNew(const SchedWakeupNewFtraceEvent& event) {
+  char line[2048];
+  sprintf(line, "sched_wakeup_new: comm=%s pid=%d prio=%d target_cpu=%03d\\n",
+          event.comm().c_str(), event.pid(), event.prio(), event.target_cpu());
+  return std::string(line);
+}
+
 int TraceToSystrace(std::istream* input, std::ostream* output) {
   std::multimap<uint64_t, std::string> sorted;
 
@@ -829,6 +1007,51 @@
       } else if (event.has_workqueue_activate_work()) {
         const auto& inner = event.workqueue_activate_work();
         line = FormatWorkqueueActivateWork(inner);
+      } else if (event.has_mm_compaction_begin()) {
+        const auto& inner = event.mm_compaction_begin();
+        line = FormatMmCompactionBegin(inner);
+      } else if (event.has_mm_compaction_deferred()) {
+        const auto& inner = event.mm_compaction_deferred();
+        line = FormatMmCompactionDeferred(inner);
+      } else if (event.has_mm_compaction_defer_reset()) {
+        const auto& inner = event.mm_compaction_defer_reset();
+        line = FormatMmCompactionDeferReset(inner);
+      } else if (event.has_mm_compaction_end()) {
+        const auto& inner = event.mm_compaction_end();
+        line = FormatMmCompactionEnd(inner);
+      } else if (event.has_mm_compaction_finished()) {
+        const auto& inner = event.mm_compaction_finished();
+        line = FormatMmCompactionFinished(inner);
+      } else if (event.has_mm_compaction_isolate_freepages()) {
+        const auto& inner = event.mm_compaction_isolate_freepages();
+        line = FormatMmCompactionIsolateFreepages(inner);
+      } else if (event.has_mm_compaction_isolate_migratepages()) {
+        const auto& inner = event.mm_compaction_isolate_migratepages();
+        line = FormatMmCompactionIsolateMigratepages(inner);
+      } else if (event.has_mm_compaction_kcompactd_sleep()) {
+        const auto& inner = event.mm_compaction_kcompactd_sleep();
+        line = FormatMmCompactionKcompactdSleep(inner);
+      } else if (event.has_mm_compaction_kcompactd_wake()) {
+        const auto& inner = event.mm_compaction_kcompactd_wake();
+        line = FormatMmCompactionKcompactdWake(inner);
+      } else if (event.has_mm_compaction_migratepages()) {
+        const auto& inner = event.mm_compaction_migratepages();
+        line = FormatMmCompactionMigratepages(inner);
+      } else if (event.has_mm_compaction_suitable()) {
+        const auto& inner = event.mm_compaction_suitable();
+        line = FormatMmCompactionSuitable(inner);
+      } else if (event.has_mm_compaction_try_to_compact_pages()) {
+        const auto& inner = event.mm_compaction_try_to_compact_pages();
+        line = FormatMmCompactionTryToCompactPages(inner);
+      } else if (event.has_mm_compaction_wakeup_kcompactd()) {
+        const auto& inner = event.mm_compaction_wakeup_kcompactd();
+        line = FormatMmCompactionWakeupKcompactd(inner);
+      } else if (event.has_suspend_resume()) {
+        const auto& inner = event.suspend_resume();
+        line = FormatSuspendResume(inner);
+      } else if (event.has_sched_wakeup_new()) {
+        const auto& inner = event.sched_wakeup_new();
+        line = FormatSchedWakeupNew(inner);
       } else {
         continue;
       }