probes: add raw_syscall/sys_{enter,exit} format and generated protos

Change-Id: I396cf90a0efdea5f32ef6d905ae9c09609df8d31
diff --git a/Android.bp b/Android.bp
index f3df9e5..8395fec 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1220,6 +1220,7 @@
     "protos/perfetto/trace/ftrace/mm_event.proto",
     "protos/perfetto/trace/ftrace/oom.proto",
     "protos/perfetto/trace/ftrace/power.proto",
+    "protos/perfetto/trace/ftrace/raw_syscalls.proto",
     "protos/perfetto/trace/ftrace/regulator.proto",
     "protos/perfetto/trace/ftrace/sched.proto",
     "protos/perfetto/trace/ftrace/signal.proto",
@@ -1257,6 +1258,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_event.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/oom.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/power.pb.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/raw_syscalls.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sched.pb.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/signal.pb.cc",
@@ -1295,6 +1297,7 @@
     "protos/perfetto/trace/ftrace/mm_event.proto",
     "protos/perfetto/trace/ftrace/oom.proto",
     "protos/perfetto/trace/ftrace/power.proto",
+    "protos/perfetto/trace/ftrace/raw_syscalls.proto",
     "protos/perfetto/trace/ftrace/regulator.proto",
     "protos/perfetto/trace/ftrace/sched.proto",
     "protos/perfetto/trace/ftrace/signal.proto",
@@ -1332,6 +1335,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_event.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/oom.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/power.pb.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/raw_syscalls.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sched.pb.h",
     "external/perfetto/protos/perfetto/trace/ftrace/signal.pb.h",
@@ -1373,6 +1377,7 @@
     "protos/perfetto/trace/ftrace/mm_event.proto",
     "protos/perfetto/trace/ftrace/oom.proto",
     "protos/perfetto/trace/ftrace/power.proto",
+    "protos/perfetto/trace/ftrace/raw_syscalls.proto",
     "protos/perfetto/trace/ftrace/regulator.proto",
     "protos/perfetto/trace/ftrace/sched.proto",
     "protos/perfetto/trace/ftrace/signal.proto",
@@ -1411,6 +1416,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_event.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/oom.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/power.pbzero.cc",
+    "external/perfetto/protos/perfetto/trace/ftrace/raw_syscalls.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/sched.pbzero.cc",
     "external/perfetto/protos/perfetto/trace/ftrace/signal.pbzero.cc",
@@ -1449,6 +1455,7 @@
     "protos/perfetto/trace/ftrace/mm_event.proto",
     "protos/perfetto/trace/ftrace/oom.proto",
     "protos/perfetto/trace/ftrace/power.proto",
+    "protos/perfetto/trace/ftrace/raw_syscalls.proto",
     "protos/perfetto/trace/ftrace/regulator.proto",
     "protos/perfetto/trace/ftrace/sched.proto",
     "protos/perfetto/trace/ftrace/signal.proto",
@@ -1487,6 +1494,7 @@
     "external/perfetto/protos/perfetto/trace/ftrace/mm_event.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/oom.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/power.pbzero.h",
+    "external/perfetto/protos/perfetto/trace/ftrace/raw_syscalls.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/regulator.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/sched.pbzero.h",
     "external/perfetto/protos/perfetto/trace/ftrace/signal.pbzero.h",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index 23d9c1a..a5042a9 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -39,6 +39,7 @@
   "mm_event.proto",
   "oom.proto",
   "power.proto",
+  "raw_syscalls.proto",
   "regulator.proto",
   "sched.proto",
   "signal.proto",
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index 75b80e5..df4ec06 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -24,6 +24,7 @@
 import "perfetto/trace/ftrace/mm_event.proto";
 import "perfetto/trace/ftrace/oom.proto";
 import "perfetto/trace/ftrace/power.proto";
+import "perfetto/trace/ftrace/raw_syscalls.proto";
 import "perfetto/trace/ftrace/regulator.proto";
 import "perfetto/trace/ftrace/sched.proto";
 import "perfetto/trace/ftrace/signal.proto";
@@ -389,5 +390,7 @@
     OomScoreAdjUpdateFtraceEvent oom_score_adj_update = 326;
     GenericFtraceEvent generic = 327;
     MmEventRecordFtraceEvent mm_event_record = 328;
+    SysEnterFtraceEvent sys_enter = 329;
+    SysExitFtraceEvent sys_exit = 330;
   }
 }
diff --git a/protos/perfetto/trace/ftrace/raw_syscalls.proto b/protos/perfetto/trace/ftrace/raw_syscalls.proto
new file mode 100644
index 0000000..0dda679
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/raw_syscalls.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 SysEnterFtraceEvent {
+  optional int64 id = 1;
+}
+message SysExitFtraceEvent {
+  optional int64 id = 1;
+  optional int64 ret = 2;
+}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index a36d187..fc066e8 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -1774,6 +1774,8 @@
     // removed field with id 326
     GenericFtraceEvent generic = 327;
     MmEventRecordFtraceEvent mm_event_record = 328;
+    SysEnterFtraceEvent sys_enter = 329;
+    SysExitFtraceEvent sys_exit = 330;
   }
 }
 
@@ -2160,6 +2162,18 @@
 
 // End of protos/perfetto/trace/ftrace/power.proto
 
+// Begin of protos/perfetto/trace/ftrace/raw_syscalls.proto
+
+message SysEnterFtraceEvent {
+  optional int64 id = 1;
+}
+message SysExitFtraceEvent {
+  optional int64 id = 1;
+  optional int64 ret = 2;
+}
+
+// End of protos/perfetto/trace/ftrace/raw_syscalls.proto
+
 // Begin of protos/perfetto/trace/ftrace/sched.proto
 
 message SchedSwitchFtraceEvent {
diff --git a/src/trace_processor/ftrace_descriptors.cc b/src/trace_processor/ftrace_descriptors.cc
index 13d2176..96b0737 100644
--- a/src/trace_processor/ftrace_descriptors.cc
+++ b/src/trace_processor/ftrace_descriptors.cc
@@ -8,7 +8,7 @@
 namespace trace_processor {
 namespace {
 
-std::array<MessageDescriptor, 329> descriptors{{
+std::array<MessageDescriptor, 331> descriptors{{
     {},
     {},
     {},
@@ -3191,6 +3191,21 @@
             {"type", ProtoSchemaType::kUint32},
         },
     },
+    {
+        "sys_enter",
+        {
+            {},
+            {"id", ProtoSchemaType::kInt64},
+        },
+    },
+    {
+        "sys_exit",
+        {
+            {},
+            {"id", ProtoSchemaType::kInt64},
+            {"ret", ProtoSchemaType::kInt64},
+        },
+    },
 }};
 
 }  // namespace
diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc
index f5bbd9f..df587e5 100644
--- a/src/traced/probes/ftrace/event_info.cc
+++ b/src/traced/probes/ftrace/event_info.cc
@@ -3615,6 +3615,25 @@
   {
     events.emplace_back(Event{});
     Event* event = &events.back();
+    event->name = "sys_enter";
+    event->group = "raw_syscalls";
+    event->proto_field_id = 329;
+    event->fields.push_back(MakeField("id", 1, ProtoSchemaType::kInt64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
+    event->name = "sys_exit";
+    event->group = "raw_syscalls";
+    event->proto_field_id = 330;
+    event->fields.push_back(MakeField("id", 1, ProtoSchemaType::kInt64));
+    event->fields.push_back(MakeField("ret", 2, ProtoSchemaType::kInt64));
+  }
+
+  {
+    events.emplace_back(Event{});
+    Event* event = &events.back();
     event->name = "regulator_disable";
     event->group = "regulator";
     event->proto_field_id = 60;
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/raw_syscalls/sys_enter/format b/src/traced/probes/ftrace/test/data/synthetic/events/raw_syscalls/sys_enter/format
new file mode 100644
index 0000000..92983dd
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/raw_syscalls/sys_enter/format
@@ -0,0 +1,12 @@
+name: sys_enter
+ID: 17
+format:
+	field:unsigned short common_type;	offset:0;	size:2;	signed:0;
+	field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
+	field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
+	field:int common_pid;	offset:4;	size:4;	signed:1;
+
+	field:long id;	offset:8;	size:8;	signed:1;
+	field:unsigned long args[6];	offset:16;	size:48;	signed:0;
+
+print fmt: "NR %ld (%lx, %lx, %lx, %lx, %lx, %lx)", REC->id, REC->args[0], REC->args[1], REC->args[2], REC->args[3], REC->args[4], REC->args[5]
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/raw_syscalls/sys_exit/format b/src/traced/probes/ftrace/test/data/synthetic/events/raw_syscalls/sys_exit/format
new file mode 100644
index 0000000..f2f131b
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/raw_syscalls/sys_exit/format
@@ -0,0 +1,12 @@
+name: sys_exit
+ID: 18
+format:
+	field:unsigned short common_type;	offset:0;	size:2;	signed:0;
+	field:unsigned char common_flags;	offset:2;	size:1;	signed:0;
+	field:unsigned char common_preempt_count;	offset:3;	size:1;	signed:0;
+	field:int common_pid;	offset:4;	size:4;	signed:1;
+
+	field:long id;	offset:8;	size:8;	signed:1;
+	field:long ret;	offset:16;	size:8;	signed:1;
+
+print fmt: "NR %ld = %ld", REC->id, REC->ret
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist
index cfed0e8..e2ceeec 100644
--- a/tools/ftrace_proto_gen/event_whitelist
+++ b/tools/ftrace_proto_gen/event_whitelist
@@ -323,3 +323,5 @@
 signal/signal_generate
 oom/oom_score_adj_update
 mm_event/mm_event_record
+raw_syscalls/sys_enter
+raw_syscalls/sys_exit
diff --git a/tools/gen_merged_protos b/tools/gen_merged_protos
index d96ced8..05ac277 100755
--- a/tools/gen_merged_protos
+++ b/tools/gen_merged_protos
@@ -59,6 +59,7 @@
   'protos/perfetto/trace/ftrace/lowmemorykiller.proto',
   'protos/perfetto/trace/ftrace/mm_event.proto',
   'protos/perfetto/trace/ftrace/power.proto',
+  'protos/perfetto/trace/ftrace/raw_syscalls.proto',
   'protos/perfetto/trace/ftrace/sched.proto',
   'protos/perfetto/trace/ftrace/signal.proto',
   'protos/perfetto/trace/ftrace/task.proto',