Process GPU frequency info from ftrace if available If a GPU driver outputs frequency information via ftrace on the power/gpu_frequency event using the same format at used for CPU frequency, process it as a counter named gpufreq. Note that these only include the device side changes from the commit this was cherry-picked from. (cherry picked from commit 1f5f93a931104d7daed5b952653fc2244d2e299e) Bug: 136062452 Merged-In: I93644c0cdd8835668f2f3807b53c7bc429ec9d77 Change-Id: I00cc9230d5c11777a7926ec24486ec3a0e5bb839
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto index 5e27dac..6996d0a 100644 --- a/protos/perfetto/trace/ftrace/ftrace_event.proto +++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -394,5 +394,6 @@ SysEnterFtraceEvent sys_enter = 329; SysExitFtraceEvent sys_exit = 330; ZeroFtraceEvent zero = 331; + GpuFrequencyFtraceEvent gpu_frequency = 332; } }
diff --git a/protos/perfetto/trace/ftrace/power.proto b/protos/perfetto/trace/ftrace/power.proto index b8548e5..a79cc03 100644 --- a/protos/perfetto/trace/ftrace/power.proto +++ b/protos/perfetto/trace/ftrace/power.proto
@@ -39,3 +39,7 @@ optional int32 val = 2; optional uint32 start = 3; } +message GpuFrequencyFtraceEvent { + optional uint32 gpu_id = 1; + optional uint32 state = 2; +}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto index 0d1c759..f563be5 100644 --- a/protos/perfetto/trace/perfetto_trace.proto +++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -1932,6 +1932,7 @@ SysEnterFtraceEvent sys_enter = 329; SysExitFtraceEvent sys_exit = 330; ZeroFtraceEvent zero = 331; + GpuFrequencyFtraceEvent gpu_frequency = 332; } } @@ -2315,6 +2316,10 @@ optional int32 val = 2; optional uint32 start = 3; } +message GpuFrequencyFtraceEvent { + optional uint32 gpu_id = 1; + optional uint32 state = 2; +} // End of protos/perfetto/trace/ftrace/power.proto
diff --git a/src/perfetto_cmd/perfetto_cmd.cc b/src/perfetto_cmd/perfetto_cmd.cc index a54d235..e1f71dd 100644 --- a/src/perfetto_cmd/perfetto_cmd.cc +++ b/src/perfetto_cmd/perfetto_cmd.cc
@@ -274,6 +274,7 @@ ds_config->mutable_ftrace_config()->add_ftrace_events("sched_switch"); ds_config->mutable_ftrace_config()->add_ftrace_events("cpu_idle"); ds_config->mutable_ftrace_config()->add_ftrace_events("cpu_frequency"); + ds_config->mutable_ftrace_config()->add_ftrace_events("gpu_frequency"); ds_config->set_target_buffer(0); test_config.SerializeToString(&trace_config_raw); } else {
diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc index 92ed091..657a459 100644 --- a/src/traced/probes/ftrace/event_info.cc +++ b/src/traced/probes/ftrace/event_info.cc
@@ -3615,6 +3615,16 @@ { events.emplace_back(Event{}); Event* event = &events.back(); + event->name = "gpu_frequency"; + event->group = "power"; + event->proto_field_id = 332; + event->fields.push_back(MakeField("gpu_id", 1, ProtoSchemaType::kUint32)); + event->fields.push_back(MakeField("state", 2, ProtoSchemaType::kUint32)); + } + + { + events.emplace_back(Event{}); + Event* event = &events.back(); event->name = "sys_enter"; event->group = "raw_syscalls"; event->proto_field_id = 329;
diff --git a/src/traced/probes/ftrace/ftrace_config_muxer.cc b/src/traced/probes/ftrace/ftrace_config_muxer.cc index a8d44d3..4dbf313 100644 --- a/src/traced/probes/ftrace/ftrace_config_muxer.cc +++ b/src/traced/probes/ftrace/ftrace_config_muxer.cc
@@ -106,7 +106,6 @@ if (category == "gfx") { AddEventGroup(table, "mdss", &events); AddEventGroup(table, "sde", &events); - AddEventGroup(table, "mali_systrace", &events); continue; } @@ -166,6 +165,7 @@ if (category == "freq") { events.insert(GroupAndName("power", "cpu_frequency")); + events.insert(GroupAndName("power", "gpu_frequency")); events.insert(GroupAndName("power", "clock_set_rate")); events.insert(GroupAndName("power", "clock_disable")); events.insert(GroupAndName("power", "clock_enable"));
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/power/gpu_frequency/format b/src/traced/probes/ftrace/test/data/synthetic/events/power/gpu_frequency/format new file mode 100644 index 0000000..6b77071 --- /dev/null +++ b/src/traced/probes/ftrace/test/data/synthetic/events/power/gpu_frequency/format
@@ -0,0 +1,12 @@ +name: gpu_frequency +ID: 511 +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:unsigned int state; offset:8; size:4; signed:0; + field:unsigned int gpu_id; offset:12; size:4; signed:0; + +print fmt: "state=%lu gpu_id=%lu", REC->state, REC->gpu_id
diff --git a/tools/ftrace_proto_gen/event_whitelist b/tools/ftrace_proto_gen/event_whitelist index 9f9737a..e0662ce 100644 --- a/tools/ftrace_proto_gen/event_whitelist +++ b/tools/ftrace_proto_gen/event_whitelist
@@ -326,3 +326,4 @@ raw_syscalls/sys_enter raw_syscalls/sys_exit systrace/0 +power/gpu_frequency