traced_probes: add mm_event/mm_event_record ftrace format file and protos
Bug: 118897434
Change-Id: I26ad28b78b7338abbe5950b467ec686eccda380f
diff --git a/Android.bp b/Android.bp
index dbf51dd..77bcbbd 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1200,6 +1200,7 @@
"protos/perfetto/trace/ftrace/kmem.proto",
"protos/perfetto/trace/ftrace/lowmemorykiller.proto",
"protos/perfetto/trace/ftrace/mdss.proto",
+ "protos/perfetto/trace/ftrace/mm_event.proto",
"protos/perfetto/trace/ftrace/oom.proto",
"protos/perfetto/trace/ftrace/power.proto",
"protos/perfetto/trace/ftrace/regulator.proto",
@@ -1236,6 +1237,7 @@
"external/perfetto/protos/perfetto/trace/ftrace/kmem.pb.cc",
"external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pb.cc",
"external/perfetto/protos/perfetto/trace/ftrace/mdss.pb.cc",
+ "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/regulator.pb.cc",
@@ -1273,6 +1275,7 @@
"protos/perfetto/trace/ftrace/kmem.proto",
"protos/perfetto/trace/ftrace/lowmemorykiller.proto",
"protos/perfetto/trace/ftrace/mdss.proto",
+ "protos/perfetto/trace/ftrace/mm_event.proto",
"protos/perfetto/trace/ftrace/oom.proto",
"protos/perfetto/trace/ftrace/power.proto",
"protos/perfetto/trace/ftrace/regulator.proto",
@@ -1309,6 +1312,7 @@
"external/perfetto/protos/perfetto/trace/ftrace/kmem.pb.h",
"external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pb.h",
"external/perfetto/protos/perfetto/trace/ftrace/mdss.pb.h",
+ "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/regulator.pb.h",
@@ -1349,6 +1353,7 @@
"protos/perfetto/trace/ftrace/kmem.proto",
"protos/perfetto/trace/ftrace/lowmemorykiller.proto",
"protos/perfetto/trace/ftrace/mdss.proto",
+ "protos/perfetto/trace/ftrace/mm_event.proto",
"protos/perfetto/trace/ftrace/oom.proto",
"protos/perfetto/trace/ftrace/power.proto",
"protos/perfetto/trace/ftrace/regulator.proto",
@@ -1386,6 +1391,7 @@
"external/perfetto/protos/perfetto/trace/ftrace/kmem.pbzero.cc",
"external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pbzero.cc",
"external/perfetto/protos/perfetto/trace/ftrace/mdss.pbzero.cc",
+ "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/regulator.pbzero.cc",
@@ -1423,6 +1429,7 @@
"protos/perfetto/trace/ftrace/kmem.proto",
"protos/perfetto/trace/ftrace/lowmemorykiller.proto",
"protos/perfetto/trace/ftrace/mdss.proto",
+ "protos/perfetto/trace/ftrace/mm_event.proto",
"protos/perfetto/trace/ftrace/oom.proto",
"protos/perfetto/trace/ftrace/power.proto",
"protos/perfetto/trace/ftrace/regulator.proto",
@@ -1460,6 +1467,7 @@
"external/perfetto/protos/perfetto/trace/ftrace/kmem.pbzero.h",
"external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pbzero.h",
"external/perfetto/protos/perfetto/trace/ftrace/mdss.pbzero.h",
+ "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/regulator.pbzero.h",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index bb4b609..23d9c1a 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -36,6 +36,7 @@
"kmem.proto",
"lowmemorykiller.proto",
"mdss.proto",
+ "mm_event.proto",
"oom.proto",
"power.proto",
"regulator.proto",
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index 847105a..75b80e5 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -21,6 +21,7 @@
import "perfetto/trace/ftrace/kmem.proto";
import "perfetto/trace/ftrace/lowmemorykiller.proto";
import "perfetto/trace/ftrace/mdss.proto";
+import "perfetto/trace/ftrace/mm_event.proto";
import "perfetto/trace/ftrace/oom.proto";
import "perfetto/trace/ftrace/power.proto";
import "perfetto/trace/ftrace/regulator.proto";
@@ -387,5 +388,6 @@
SignalGenerateFtraceEvent signal_generate = 325;
OomScoreAdjUpdateFtraceEvent oom_score_adj_update = 326;
GenericFtraceEvent generic = 327;
+ MmEventRecordFtraceEvent mm_event_record = 328;
}
}
diff --git a/protos/perfetto/trace/ftrace/mm_event.proto b/protos/perfetto/trace/ftrace/mm_event.proto
new file mode 100644
index 0000000..063e214
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/mm_event.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 MmEventRecordFtraceEvent {
+ optional uint32 avg_lat = 1;
+ optional uint32 count = 2;
+ optional uint32 max_lat = 3;
+ optional uint32 type = 4;
+}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 64c2755..b5ef041 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -1773,6 +1773,7 @@
SignalGenerateFtraceEvent signal_generate = 325;
// removed field with id 326
GenericFtraceEvent generic = 327;
+ MmEventRecordFtraceEvent mm_event_record = 328;
}
}
@@ -2110,6 +2111,17 @@
// End of protos/perfetto/trace/ftrace/lowmemorykiller.proto
+// Begin of protos/perfetto/trace/ftrace/mm_event.proto
+
+message MmEventRecordFtraceEvent {
+ optional uint32 avg_lat = 1;
+ optional uint32 count = 2;
+ optional uint32 max_lat = 3;
+ optional uint32 type = 4;
+}
+
+// End of protos/perfetto/trace/ftrace/mm_event.proto
+
// Begin of protos/perfetto/trace/ftrace/power.proto
message CpuFrequencyFtraceEvent {
diff --git a/src/trace_processor/ftrace_descriptors.cc b/src/trace_processor/ftrace_descriptors.cc
index 5c445fb..13d2176 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, 328> descriptors{{
+std::array<MessageDescriptor, 329> descriptors{{
{},
{},
{},
@@ -3181,6 +3181,16 @@
{},
},
},
+ {
+ "mm_event_record",
+ {
+ {},
+ {"avg_lat", ProtoSchemaType::kUint32},
+ {"count", ProtoSchemaType::kUint32},
+ {"max_lat", ProtoSchemaType::kUint32},
+ {"type", ProtoSchemaType::kUint32},
+ },
+ },
}};
} // namespace
diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc
index f656bf4..f5bbd9f 100644
--- a/src/traced/probes/ftrace/event_info.cc
+++ b/src/traced/probes/ftrace/event_info.cc
@@ -3516,6 +3516,18 @@
{
events.emplace_back(Event{});
Event* event = &events.back();
+ event->name = "mm_event_record";
+ event->group = "mm_event";
+ event->proto_field_id = 328;
+ event->fields.push_back(MakeField("avg_lat", 1, ProtoSchemaType::kUint32));
+ event->fields.push_back(MakeField("count", 2, ProtoSchemaType::kUint32));
+ event->fields.push_back(MakeField("max_lat", 3, ProtoSchemaType::kUint32));
+ event->fields.push_back(MakeField("type", 4, ProtoSchemaType::kUint32));
+ }
+
+ {
+ events.emplace_back(Event{});
+ Event* event = &events.back();
event->name = "oom_score_adj_update";
event->group = "oom";
event->proto_field_id = 326;
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/mm_event/mm_event_record/format b/src/traced/probes/ftrace/test/data/synthetic/events/mm_event/mm_event_record/format
new file mode 100644
index 0000000..2e052c7
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/mm_event/mm_event_record/format
@@ -0,0 +1,14 @@
+name: mm_event_record
+ID: 258
+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:enum mm_event_type type; offset:8; size:4; signed:0;
+ field:unsigned int count; offset:12; size:4; signed:0;
+ field:unsigned int avg_lat; offset:16; size:4; signed:0;
+ field:unsigned int max_lat; offset:20; size:4; signed:0;
+
+print fmt: "%s count=%d avg_lat=%u max_lat=%u", __print_symbolic(REC->type, { MM_MIN_FAULT, "min_flt" }, { MM_MAJ_FAULT, "maj_flt" }, { MM_READ_IO, "read_io" }, { MM_COMPACTION, "compaction" }, { MM_RECLAIM, "reclaim" }, { MM_SWP_FAULT, "swp_flt" }, { MM_KERN_ALLOC, "kern_alloc" }), REC->count, REC->avg_lat, REC->max_lat
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist
index d2dd889..cfed0e8 100644
--- a/tools/ftrace_proto_gen/event_whitelist
+++ b/tools/ftrace_proto_gen/event_whitelist
@@ -322,3 +322,4 @@
signal/signal_deliver
signal/signal_generate
oom/oom_score_adj_update
+mm_event/mm_event_record
diff --git a/tools/ftrace_proto_gen/main.cc b/tools/ftrace_proto_gen/main.cc
index bc99c4d..de15591 100644
--- a/tools/ftrace_proto_gen/main.cc
+++ b/tools/ftrace_proto_gen/main.cc
@@ -205,9 +205,17 @@
uint32_t i = 0;
for (; it->second != &whitelist[i]; i++)
;
+
// The first id used for events in FtraceEvent proto is 3.
+ uint32_t proto_field = i + 3;
+
+ // The generic event has field id 327 so any event with a id higher
+ // than that has to be incremented by 1.
+ if (proto_field >= 327)
+ proto_field++;
+
events_info.push_back(
- perfetto::SingleEventInfo(proto, event.group(), i + 3));
+ perfetto::SingleEventInfo(proto, event.group(), proto_field));
*fout << proto.ToString();
PERFETTO_CHECK(!fout->fail());
diff --git a/tools/gen_merged_protos b/tools/gen_merged_protos
index 5f8a807..44544d5 100755
--- a/tools/gen_merged_protos
+++ b/tools/gen_merged_protos
@@ -57,6 +57,7 @@
'protos/perfetto/trace/ftrace/generic.proto',
'protos/perfetto/trace/ftrace/kmem.proto',
'protos/perfetto/trace/ftrace/lowmemorykiller.proto',
+ 'protos/perfetto/trace/ftrace/mm_event.proto',
'protos/perfetto/trace/ftrace/power.proto',
'protos/perfetto/trace/ftrace/sched.proto',
'protos/perfetto/trace/ftrace/signal.proto',