aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHector Dearman <hjd@google.com>2019-06-19 10:35:56 -0700
committerandroid-build-merger <android-build-merger@google.com>2019-06-19 10:35:56 -0700
commitddd0837e517386cf42c6b26e3db207bae4df670f (patch)
tree9ce630c5236e0e948d9246b61a13672780f5e64a
parent999df9f15c04dd3887169bd400c14ae77bdbf7d9 (diff)
parentcdf8510355e30e8145ec708bc767080423d0c77e (diff)
downloadperfetto-ddd0837e517386cf42c6b26e3db207bae4df670f.tar.gz
traced_probes: Add systrace/0 event
am: cdf8510355 Change-Id: I92ccb2bb97073e62fa6680f4927db6704152e420
-rw-r--r--Android.bp8
-rw-r--r--protos/BUILD2
-rw-r--r--protos/perfetto/trace/ftrace/all_protos.gni1
-rw-r--r--protos/perfetto/trace/ftrace/ftrace_event.proto2
-rw-r--r--protos/perfetto/trace/ftrace/systrace.proto14
-rw-r--r--protos/perfetto/trace/perfetto_trace.proto12
-rw-r--r--src/trace_processor/ftrace_descriptors.cc13
-rw-r--r--src/traced/probes/ftrace/event_info.cc12
-rw-r--r--src/traced/probes/ftrace/ftrace_config_muxer.cc1
-rw-r--r--src/traced/probes/ftrace/test/data/synthetic/events/systrace/0/format14
-rw-r--r--tools/ftrace_proto_gen/event_whitelist1
-rw-r--r--tools/ftrace_proto_gen/ftrace_proto_gen.cc23
-rw-r--r--tools/ftrace_proto_gen/ftrace_proto_gen.h3
-rw-r--r--tools/ftrace_proto_gen/main.cc3
-rwxr-xr-xtools/gen_merged_protos1
15 files changed, 100 insertions, 10 deletions
diff --git a/Android.bp b/Android.bp
index 90d910fbc..b7f12d294 100644
--- a/Android.bp
+++ b/Android.bp
@@ -1397,6 +1397,7 @@ genrule {
"protos/perfetto/trace/ftrace/sched.proto",
"protos/perfetto/trace/ftrace/signal.proto",
"protos/perfetto/trace/ftrace/sync.proto",
+ "protos/perfetto/trace/ftrace/systrace.proto",
"protos/perfetto/trace/ftrace/task.proto",
"protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
"protos/perfetto/trace/ftrace/vmscan.proto",
@@ -1435,6 +1436,7 @@ genrule {
"external/perfetto/protos/perfetto/trace/ftrace/sched.pb.cc",
"external/perfetto/protos/perfetto/trace/ftrace/signal.pb.cc",
"external/perfetto/protos/perfetto/trace/ftrace/sync.pb.cc",
+ "external/perfetto/protos/perfetto/trace/ftrace/systrace.pb.cc",
"external/perfetto/protos/perfetto/trace/ftrace/task.pb.cc",
"external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pb.cc",
"external/perfetto/protos/perfetto/trace/ftrace/vmscan.pb.cc",
@@ -1474,6 +1476,7 @@ genrule {
"protos/perfetto/trace/ftrace/sched.proto",
"protos/perfetto/trace/ftrace/signal.proto",
"protos/perfetto/trace/ftrace/sync.proto",
+ "protos/perfetto/trace/ftrace/systrace.proto",
"protos/perfetto/trace/ftrace/task.proto",
"protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
"protos/perfetto/trace/ftrace/vmscan.proto",
@@ -1512,6 +1515,7 @@ genrule {
"external/perfetto/protos/perfetto/trace/ftrace/sched.pb.h",
"external/perfetto/protos/perfetto/trace/ftrace/signal.pb.h",
"external/perfetto/protos/perfetto/trace/ftrace/sync.pb.h",
+ "external/perfetto/protos/perfetto/trace/ftrace/systrace.pb.h",
"external/perfetto/protos/perfetto/trace/ftrace/task.pb.h",
"external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pb.h",
"external/perfetto/protos/perfetto/trace/ftrace/vmscan.pb.h",
@@ -1554,6 +1558,7 @@ genrule {
"protos/perfetto/trace/ftrace/sched.proto",
"protos/perfetto/trace/ftrace/signal.proto",
"protos/perfetto/trace/ftrace/sync.proto",
+ "protos/perfetto/trace/ftrace/systrace.proto",
"protos/perfetto/trace/ftrace/task.proto",
"protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
"protos/perfetto/trace/ftrace/vmscan.proto",
@@ -1593,6 +1598,7 @@ genrule {
"external/perfetto/protos/perfetto/trace/ftrace/sched.pbzero.cc",
"external/perfetto/protos/perfetto/trace/ftrace/signal.pbzero.cc",
"external/perfetto/protos/perfetto/trace/ftrace/sync.pbzero.cc",
+ "external/perfetto/protos/perfetto/trace/ftrace/systrace.pbzero.cc",
"external/perfetto/protos/perfetto/trace/ftrace/task.pbzero.cc",
"external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pbzero.cc",
"external/perfetto/protos/perfetto/trace/ftrace/vmscan.pbzero.cc",
@@ -1632,6 +1638,7 @@ genrule {
"protos/perfetto/trace/ftrace/sched.proto",
"protos/perfetto/trace/ftrace/signal.proto",
"protos/perfetto/trace/ftrace/sync.proto",
+ "protos/perfetto/trace/ftrace/systrace.proto",
"protos/perfetto/trace/ftrace/task.proto",
"protos/perfetto/trace/ftrace/test_bundle_wrapper.proto",
"protos/perfetto/trace/ftrace/vmscan.proto",
@@ -1671,6 +1678,7 @@ genrule {
"external/perfetto/protos/perfetto/trace/ftrace/sched.pbzero.h",
"external/perfetto/protos/perfetto/trace/ftrace/signal.pbzero.h",
"external/perfetto/protos/perfetto/trace/ftrace/sync.pbzero.h",
+ "external/perfetto/protos/perfetto/trace/ftrace/systrace.pbzero.h",
"external/perfetto/protos/perfetto/trace/ftrace/task.pbzero.h",
"external/perfetto/protos/perfetto/trace/ftrace/test_bundle_wrapper.pbzero.h",
"external/perfetto/protos/perfetto/trace/ftrace/vmscan.pbzero.h",
diff --git a/protos/BUILD b/protos/BUILD
index 928391db0..833822b6e 100644
--- a/protos/BUILD
+++ b/protos/BUILD
@@ -453,6 +453,7 @@ proto_library(
"perfetto/trace/ftrace/sched.proto",
"perfetto/trace/ftrace/signal.proto",
"perfetto/trace/ftrace/sync.proto",
+ "perfetto/trace/ftrace/systrace.proto",
"perfetto/trace/ftrace/task.proto",
"perfetto/trace/ftrace/test_bundle_wrapper.proto",
"perfetto/trace/ftrace/vmscan.proto",
@@ -509,6 +510,7 @@ proto_library(
"perfetto/trace/ftrace/sched.proto",
"perfetto/trace/ftrace/signal.proto",
"perfetto/trace/ftrace/sync.proto",
+ "perfetto/trace/ftrace/systrace.proto",
"perfetto/trace/ftrace/task.proto",
"perfetto/trace/ftrace/test_bundle_wrapper.proto",
"perfetto/trace/ftrace/vmscan.proto",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index a5042a95c..b6278b8e6 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -44,6 +44,7 @@ ftrace_proto_names = [
"sched.proto",
"signal.proto",
"sync.proto",
+ "systrace.proto",
"task.proto",
"vmscan.proto",
"workqueue.proto",
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index df4ec06a6..5e27dac4f 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -29,6 +29,7 @@ import "perfetto/trace/ftrace/regulator.proto";
import "perfetto/trace/ftrace/sched.proto";
import "perfetto/trace/ftrace/signal.proto";
import "perfetto/trace/ftrace/sync.proto";
+import "perfetto/trace/ftrace/systrace.proto";
import "perfetto/trace/ftrace/task.proto";
import "perfetto/trace/ftrace/vmscan.proto";
import "perfetto/trace/ftrace/workqueue.proto";
@@ -392,5 +393,6 @@ message FtraceEvent {
MmEventRecordFtraceEvent mm_event_record = 328;
SysEnterFtraceEvent sys_enter = 329;
SysExitFtraceEvent sys_exit = 330;
+ ZeroFtraceEvent zero = 331;
}
}
diff --git a/protos/perfetto/trace/ftrace/systrace.proto b/protos/perfetto/trace/ftrace/systrace.proto
new file mode 100644
index 000000000..b52b3059b
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/systrace.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 ZeroFtraceEvent {
+ optional int32 flag = 1;
+ optional string name = 2;
+ optional int32 pid = 3;
+ optional int64 value = 4;
+}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 113d09a46..0d1c759f7 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -1931,6 +1931,7 @@ message FtraceEvent {
MmEventRecordFtraceEvent mm_event_record = 328;
SysEnterFtraceEvent sys_enter = 329;
SysExitFtraceEvent sys_exit = 330;
+ ZeroFtraceEvent zero = 331;
}
}
@@ -2423,6 +2424,17 @@ message SignalGenerateFtraceEvent {
// End of protos/perfetto/trace/ftrace/signal.proto
+// Begin of protos/perfetto/trace/ftrace/systrace.proto
+
+message ZeroFtraceEvent {
+ optional int32 flag = 1;
+ optional string name = 2;
+ optional int32 pid = 3;
+ optional int64 value = 4;
+}
+
+// End of protos/perfetto/trace/ftrace/systrace.proto
+
// Begin of protos/perfetto/trace/ftrace/task.proto
message TaskNewtaskFtraceEvent {
diff --git a/src/trace_processor/ftrace_descriptors.cc b/src/trace_processor/ftrace_descriptors.cc
index f7f011333..90b9661c3 100644
--- a/src/trace_processor/ftrace_descriptors.cc
+++ b/src/trace_processor/ftrace_descriptors.cc
@@ -8,7 +8,7 @@ namespace perfetto {
namespace trace_processor {
namespace {
-std::array<MessageDescriptor, 331> descriptors{{
+std::array<MessageDescriptor, 332> descriptors{{
{nullptr, 0, {}},
{nullptr, 0, {}},
{nullptr, 0, {}},
@@ -3517,6 +3517,17 @@ std::array<MessageDescriptor, 331> descriptors{{
{"ret", ProtoSchemaType::kInt64},
},
},
+ {
+ "zero",
+ 4,
+ {
+ {},
+ {"flag", ProtoSchemaType::kInt32},
+ {"name", ProtoSchemaType::kString},
+ {"pid", ProtoSchemaType::kInt32},
+ {"value", ProtoSchemaType::kInt64},
+ },
+ },
}};
} // namespace
diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc
index df587e52e..92ed091c6 100644
--- a/src/traced/probes/ftrace/event_info.cc
+++ b/src/traced/probes/ftrace/event_info.cc
@@ -3909,6 +3909,18 @@ std::vector<Event> GetStaticEventInfo() {
{
events.emplace_back(Event{});
Event* event = &events.back();
+ event->name = "0";
+ event->group = "systrace";
+ event->proto_field_id = 331;
+ event->fields.push_back(MakeField("flag", 1, ProtoSchemaType::kInt32));
+ event->fields.push_back(MakeField("name", 2, ProtoSchemaType::kString));
+ event->fields.push_back(MakeField("pid", 3, ProtoSchemaType::kInt32));
+ event->fields.push_back(MakeField("value", 4, ProtoSchemaType::kInt64));
+ }
+
+ {
+ events.emplace_back(Event{});
+ Event* event = &events.back();
event->name = "task_newtask";
event->group = "task";
event->proto_field_id = 235;
diff --git a/src/traced/probes/ftrace/ftrace_config_muxer.cc b/src/traced/probes/ftrace/ftrace_config_muxer.cc
index a6823b841..a8d44d3fc 100644
--- a/src/traced/probes/ftrace/ftrace_config_muxer.cc
+++ b/src/traced/probes/ftrace/ftrace_config_muxer.cc
@@ -123,6 +123,7 @@ std::set<GroupAndName> FtraceConfigMuxer::GetFtraceEvents(
events.insert(GroupAndName("sched", "sched_cpu_hotplug"));
events.insert(GroupAndName("sched", "sched_pi_setprio"));
events.insert(GroupAndName("sched", "sched_process_exit"));
+ events.insert(GroupAndName("systrace", "0"));
AddEventGroup(table, "cgroup", &events);
events.insert(GroupAndName("oom", "oom_score_adj_update"));
events.insert(GroupAndName("task", "task_rename"));
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/systrace/0/format b/src/traced/probes/ftrace/test/data/synthetic/events/systrace/0/format
new file mode 100644
index 000000000..633554693
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/systrace/0/format
@@ -0,0 +1,14 @@
+name: 0
+ID: 728
+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:int flag; offset:8; size:4; signed:1;
+ field:int pid; offset:12; size:4; signed:1;
+ field:__data_loc char[] name; offset:16; size:4; signed:0;
+ field:int64_t value; offset:24; size:8; signed:1;
+
+print fmt: "%s|%d|%s|%lld", __print_flags(REC->flag, "", { SYSTRACE_EVENT_BEGIN, "B" }, { SYSTRACE_EVENT_END, "E" }, { SYSTRACE_EVENT_INT64, "C" }), REC->pid, __get_str(name), REC->value
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist
index e2ceeec94..9f9737acf 100644
--- a/tools/ftrace_proto_gen/event_whitelist
+++ b/tools/ftrace_proto_gen/event_whitelist
@@ -325,3 +325,4 @@ oom/oom_score_adj_update
mm_event/mm_event_record
raw_syscalls/sys_enter
raw_syscalls/sys_exit
+systrace/0
diff --git a/tools/ftrace_proto_gen/ftrace_proto_gen.cc b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
index 72dcbf832..e54562235 100644
--- a/tools/ftrace_proto_gen/ftrace_proto_gen.cc
+++ b/tools/ftrace_proto_gen/ftrace_proto_gen.cc
@@ -34,6 +34,14 @@ namespace perfetto {
using base::StartsWith;
using base::Contains;
+std::string EventNameToProtoFieldName(const std::string& name) {
+ return (name == "0") ? "zero" : name;
+}
+
+std::string EventNameToProtoName(const std::string& name) {
+ return ToCamelCase(EventNameToProtoFieldName(name)) + "FtraceEvent";
+}
+
std::vector<FtraceEventName> ReadWhitelist(const std::string& filename) {
std::string line;
std::vector<FtraceEventName> lines;
@@ -97,7 +105,7 @@ void PrintEventFormatterFunctions(const std::set<std::string>& events) {
}
bool GenerateProto(const FtraceEvent& format, Proto* proto_out) {
- proto_out->name = ToCamelCase(format.name) + "FtraceEvent";
+ proto_out->name = EventNameToProtoName(format.name);
proto_out->event_name = format.name;
std::set<std::string> seen;
// TODO(hjd): We should be cleverer about id assignment.
@@ -163,19 +171,20 @@ void GenerateFtraceEventProto(const std::vector<FtraceEventName>& raw_whitelist,
continue;
}
- std::string typeName = ToCamelCase(event.name()) + "FtraceEvent";
+ std::string field_name = EventNameToProtoFieldName(event.name());
+ std::string type_name = EventNameToProtoName(event.name());
// " " (indent) + TypeName + " " + field_name + " = " + 123 + ";"
- if (4 + typeName.size() + 1 + event.name().size() + 3 + 3 + 1 <= 80) {
+ if (4 + type_name.size() + 1 + field_name.size() + 3 + 3 + 1 <= 80) {
// Everything fits in one line:
- *fout << " " << typeName << " " << event.name() << " = " << i << ";\n";
- } else if (4 + typeName.size() + 1 + event.name().size() + 2 <= 80) {
+ *fout << " " << type_name << " " << field_name << " = " << i << ";\n";
+ } else if (4 + type_name.size() + 1 + field_name.size() + 2 <= 80) {
// Everything fits except the field id:
- *fout << " " << typeName << " " << event.name() << " =\n " << i
+ *fout << " " << type_name << " " << field_name << " =\n " << i
<< ";\n";
} else {
// Nothing fits:
- *fout << " " << typeName << "\n " << event.name() << " = " << i
+ *fout << " " << type_name << "\n " << field_name << " = " << i
<< ";\n";
}
++i;
diff --git a/tools/ftrace_proto_gen/ftrace_proto_gen.h b/tools/ftrace_proto_gen/ftrace_proto_gen.h
index 3934dcbe4..9136ef07f 100644
--- a/tools/ftrace_proto_gen/ftrace_proto_gen.h
+++ b/tools/ftrace_proto_gen/ftrace_proto_gen.h
@@ -29,6 +29,9 @@
namespace perfetto {
+std::string EventNameToProtoName(const std::string&);
+std::string EventNameToProtoFieldName(const std::string&);
+
void PrintFtraceEventProtoAdditions(const std::set<std::string>& events);
void PrintEventFormatterMain(const std::set<std::string>& events);
void PrintEventFormatterUsingStatements(const std::set<std::string>& events);
diff --git a/tools/ftrace_proto_gen/main.cc b/tools/ftrace_proto_gen/main.cc
index de1559101..c53937211 100644
--- a/tools/ftrace_proto_gen/main.cc
+++ b/tools/ftrace_proto_gen/main.cc
@@ -162,8 +162,7 @@ int main(int argc, char** argv) {
if (!event.valid())
continue;
- std::string proto_name =
- perfetto::ToCamelCase(event.name()) + "FtraceEvent";
+ std::string proto_name = perfetto::EventNameToProtoName(event.name());
perfetto::Proto proto;
proto.name = proto_name;
proto.event_name = event.name();
diff --git a/tools/gen_merged_protos b/tools/gen_merged_protos
index 4b9bb2fdd..5a0a97a5e 100755
--- a/tools/gen_merged_protos
+++ b/tools/gen_merged_protos
@@ -66,6 +66,7 @@ TRACE_PROTOS = (
'protos/perfetto/trace/ftrace/raw_syscalls.proto',
'protos/perfetto/trace/ftrace/sched.proto',
'protos/perfetto/trace/ftrace/signal.proto',
+ 'protos/perfetto/trace/ftrace/systrace.proto',
'protos/perfetto/trace/ftrace/task.proto',
'protos/perfetto/trace/ftrace/vmscan.proto',
'protos/perfetto/trace/interned_data/interned_data.proto',