diff options
author | Hector Dearman <hjd@google.com> | 2019-06-19 10:35:56 -0700 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2019-06-19 10:35:56 -0700 |
commit | ddd0837e517386cf42c6b26e3db207bae4df670f (patch) | |
tree | 9ce630c5236e0e948d9246b61a13672780f5e64a | |
parent | 999df9f15c04dd3887169bd400c14ae77bdbf7d9 (diff) | |
parent | cdf8510355e30e8145ec708bc767080423d0c77e (diff) | |
download | perfetto-ddd0837e517386cf42c6b26e3db207bae4df670f.tar.gz |
traced_probes: Add systrace/0 event
am: cdf8510355
Change-Id: I92ccb2bb97073e62fa6680f4927db6704152e420
-rw-r--r-- | Android.bp | 8 | ||||
-rw-r--r-- | protos/BUILD | 2 | ||||
-rw-r--r-- | protos/perfetto/trace/ftrace/all_protos.gni | 1 | ||||
-rw-r--r-- | protos/perfetto/trace/ftrace/ftrace_event.proto | 2 | ||||
-rw-r--r-- | protos/perfetto/trace/ftrace/systrace.proto | 14 | ||||
-rw-r--r-- | protos/perfetto/trace/perfetto_trace.proto | 12 | ||||
-rw-r--r-- | src/trace_processor/ftrace_descriptors.cc | 13 | ||||
-rw-r--r-- | src/traced/probes/ftrace/event_info.cc | 12 | ||||
-rw-r--r-- | src/traced/probes/ftrace/ftrace_config_muxer.cc | 1 | ||||
-rw-r--r-- | src/traced/probes/ftrace/test/data/synthetic/events/systrace/0/format | 14 | ||||
-rw-r--r-- | tools/ftrace_proto_gen/event_whitelist | 1 | ||||
-rw-r--r-- | tools/ftrace_proto_gen/ftrace_proto_gen.cc | 23 | ||||
-rw-r--r-- | tools/ftrace_proto_gen/ftrace_proto_gen.h | 3 | ||||
-rw-r--r-- | tools/ftrace_proto_gen/main.cc | 3 | ||||
-rwxr-xr-x | tools/gen_merged_protos | 1 |
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', |