Add ftrace per_cpu/stats to beginning/end of the trace

This is to detect ftrace event going missing because
the kernel buffer cannot keep up. Both the first and
last snapshot are dumped at the end of the trace, during
the flush.

Bug: 78765090
Bug: 73886018
Change-Id: I9a806274532f0007f63f5e729c8b4c032495edaa
diff --git a/Android.bp b/Android.bp
index 1deeabe..5ed3bff 100644
--- a/Android.bp
+++ b/Android.bp
@@ -32,6 +32,7 @@
     "src/base/file_utils.cc",
     "src/base/page_allocator.cc",
     "src/base/string_splitter.cc",
+    "src/base/string_utils.cc",
     "src/base/temp_file.cc",
     "src/base/thread_checker.cc",
     "src/base/unix_task_runner.cc",
@@ -39,6 +40,7 @@
     "src/base/watchdog_posix.cc",
     "src/ftrace_reader/atrace_wrapper.cc",
     "src/ftrace_reader/cpu_reader.cc",
+    "src/ftrace_reader/cpu_stats_parser.cc",
     "src/ftrace_reader/event_info.cc",
     "src/ftrace_reader/event_info_constants.cc",
     "src/ftrace_reader/format_parser.cc",
@@ -140,6 +142,7 @@
     "src/base/file_utils.cc",
     "src/base/page_allocator.cc",
     "src/base/string_splitter.cc",
+    "src/base/string_utils.cc",
     "src/base/temp_file.cc",
     "src/base/thread_checker.cc",
     "src/base/unix_task_runner.cc",
@@ -263,6 +266,7 @@
     "src/base/file_utils.cc",
     "src/base/page_allocator.cc",
     "src/base/string_splitter.cc",
+    "src/base/string_utils.cc",
     "src/base/temp_file.cc",
     "src/base/test/test_task_runner.cc",
     "src/base/test/vm_test_utils.cc",
@@ -272,6 +276,7 @@
     "src/base/watchdog_posix.cc",
     "src/ftrace_reader/atrace_wrapper.cc",
     "src/ftrace_reader/cpu_reader.cc",
+    "src/ftrace_reader/cpu_stats_parser.cc",
     "src/ftrace_reader/end_to_end_integrationtest.cc",
     "src/ftrace_reader/event_info.cc",
     "src/ftrace_reader/event_info_constants.cc",
@@ -886,6 +891,7 @@
     "protos/perfetto/trace/ftrace/f2fs_write_end.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
+    "protos/perfetto/trace/ftrace/ftrace_stats.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
     "protos/perfetto/trace/ftrace/i2c_reply.proto",
     "protos/perfetto/trace/ftrace/i2c_result.proto",
@@ -1155,6 +1161,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs_write_end.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ftrace_stats.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_reply.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_result.pb.cc",
@@ -1425,6 +1432,7 @@
     "protos/perfetto/trace/ftrace/f2fs_write_end.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
+    "protos/perfetto/trace/ftrace/ftrace_stats.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
     "protos/perfetto/trace/ftrace/i2c_reply.proto",
     "protos/perfetto/trace/ftrace/i2c_result.proto",
@@ -1694,6 +1702,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs_write_end.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ftrace_stats.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_reply.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_result.pb.h",
@@ -1967,6 +1976,7 @@
     "protos/perfetto/trace/ftrace/f2fs_write_end.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
+    "protos/perfetto/trace/ftrace/ftrace_stats.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
     "protos/perfetto/trace/ftrace/i2c_reply.proto",
     "protos/perfetto/trace/ftrace/i2c_result.proto",
@@ -2237,6 +2247,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs_write_end.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/ftrace_stats.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_reply.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_result.pbzero.cc",
@@ -2507,6 +2518,7 @@
     "protos/perfetto/trace/ftrace/f2fs_write_end.proto",
     "protos/perfetto/trace/ftrace/ftrace_event.proto",
     "protos/perfetto/trace/ftrace/ftrace_event_bundle.proto",
+    "protos/perfetto/trace/ftrace/ftrace_stats.proto",
     "protos/perfetto/trace/ftrace/i2c_read.proto",
     "protos/perfetto/trace/ftrace/i2c_reply.proto",
     "protos/perfetto/trace/ftrace/i2c_result.proto",
@@ -2777,6 +2789,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/f2fs_write_end.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/ftrace_event_bundle.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/ftrace_stats.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_read.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_reply.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/i2c_result.pbzero.h",
@@ -3400,6 +3413,7 @@
     "src/base/file_utils.cc",
     "src/base/page_allocator.cc",
     "src/base/string_splitter.cc",
+    "src/base/string_utils.cc",
     "src/base/temp_file.cc",
     "src/base/thread_checker.cc",
     "src/base/unix_task_runner.cc",
@@ -3570,6 +3584,8 @@
     "src/base/scoped_file_unittest.cc",
     "src/base/string_splitter.cc",
     "src/base/string_splitter_unittest.cc",
+    "src/base/string_utils.cc",
+    "src/base/string_utils_unittest.cc",
     "src/base/task_runner_unittest.cc",
     "src/base/temp_file.cc",
     "src/base/temp_file_unittest.cc",
@@ -3587,6 +3603,8 @@
     "src/ftrace_reader/atrace_wrapper.cc",
     "src/ftrace_reader/cpu_reader.cc",
     "src/ftrace_reader/cpu_reader_unittest.cc",
+    "src/ftrace_reader/cpu_stats_parser.cc",
+    "src/ftrace_reader/cpu_stats_parser_unittest.cc",
     "src/ftrace_reader/event_info.cc",
     "src/ftrace_reader/event_info_constants.cc",
     "src/ftrace_reader/event_info_unittest.cc",