Add kgsl/gpu_frequency ftrace event support

Bug: 343520578
Change-Id: I4aec4992bdab11d69614f9a1264ae3057b139a58
diff --git a/Android.bp b/Android.bp
index dbfa452..ae3bea0 100644
--- a/Android.bp
+++ b/Android.bp
@@ -6512,6 +6512,7 @@
         "protos/perfetto/trace/ftrace/ion.proto",
         "protos/perfetto/trace/ftrace/ipi.proto",
         "protos/perfetto/trace/ftrace/irq.proto",
+        "protos/perfetto/trace/ftrace/kgsl.proto",
         "protos/perfetto/trace/ftrace/kmem.proto",
         "protos/perfetto/trace/ftrace/kvm.proto",
         "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
@@ -6938,6 +6939,7 @@
         "protos/perfetto/trace/ftrace/ion.proto",
         "protos/perfetto/trace/ftrace/ipi.proto",
         "protos/perfetto/trace/ftrace/irq.proto",
+        "protos/perfetto/trace/ftrace/kgsl.proto",
         "protos/perfetto/trace/ftrace/kmem.proto",
         "protos/perfetto/trace/ftrace/kvm.proto",
         "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
@@ -7025,6 +7027,7 @@
         "external/perfetto/protos/perfetto/trace/ftrace/ion.gen.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/ipi.gen.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/irq.gen.cc",
+        "external/perfetto/protos/perfetto/trace/ftrace/kgsl.gen.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/kmem.gen.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/kvm.gen.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.gen.cc",
@@ -7112,6 +7115,7 @@
         "external/perfetto/protos/perfetto/trace/ftrace/ion.gen.h",
         "external/perfetto/protos/perfetto/trace/ftrace/ipi.gen.h",
         "external/perfetto/protos/perfetto/trace/ftrace/irq.gen.h",
+        "external/perfetto/protos/perfetto/trace/ftrace/kgsl.gen.h",
         "external/perfetto/protos/perfetto/trace/ftrace/kmem.gen.h",
         "external/perfetto/protos/perfetto/trace/ftrace/kvm.gen.h",
         "external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.gen.h",
@@ -7195,6 +7199,7 @@
         "protos/perfetto/trace/ftrace/ion.proto",
         "protos/perfetto/trace/ftrace/ipi.proto",
         "protos/perfetto/trace/ftrace/irq.proto",
+        "protos/perfetto/trace/ftrace/kgsl.proto",
         "protos/perfetto/trace/ftrace/kmem.proto",
         "protos/perfetto/trace/ftrace/kvm.proto",
         "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
@@ -7281,6 +7286,7 @@
         "external/perfetto/protos/perfetto/trace/ftrace/ion.pb.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/ipi.pb.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/irq.pb.cc",
+        "external/perfetto/protos/perfetto/trace/ftrace/kgsl.pb.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/kmem.pb.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/kvm.pb.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pb.cc",
@@ -7367,6 +7373,7 @@
         "external/perfetto/protos/perfetto/trace/ftrace/ion.pb.h",
         "external/perfetto/protos/perfetto/trace/ftrace/ipi.pb.h",
         "external/perfetto/protos/perfetto/trace/ftrace/irq.pb.h",
+        "external/perfetto/protos/perfetto/trace/ftrace/kgsl.pb.h",
         "external/perfetto/protos/perfetto/trace/ftrace/kmem.pb.h",
         "external/perfetto/protos/perfetto/trace/ftrace/kvm.pb.h",
         "external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pb.h",
@@ -7450,6 +7457,7 @@
         "protos/perfetto/trace/ftrace/ion.proto",
         "protos/perfetto/trace/ftrace/ipi.proto",
         "protos/perfetto/trace/ftrace/irq.proto",
+        "protos/perfetto/trace/ftrace/kgsl.proto",
         "protos/perfetto/trace/ftrace/kmem.proto",
         "protos/perfetto/trace/ftrace/kvm.proto",
         "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
@@ -7537,6 +7545,7 @@
         "external/perfetto/protos/perfetto/trace/ftrace/ion.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/ipi.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/irq.pbzero.cc",
+        "external/perfetto/protos/perfetto/trace/ftrace/kgsl.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/kmem.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/kvm.pbzero.cc",
         "external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pbzero.cc",
@@ -7624,6 +7633,7 @@
         "external/perfetto/protos/perfetto/trace/ftrace/ion.pbzero.h",
         "external/perfetto/protos/perfetto/trace/ftrace/ipi.pbzero.h",
         "external/perfetto/protos/perfetto/trace/ftrace/irq.pbzero.h",
+        "external/perfetto/protos/perfetto/trace/ftrace/kgsl.pbzero.h",
         "external/perfetto/protos/perfetto/trace/ftrace/kmem.pbzero.h",
         "external/perfetto/protos/perfetto/trace/ftrace/kvm.pbzero.h",
         "external/perfetto/protos/perfetto/trace/ftrace/lowmemorykiller.pbzero.h",
@@ -14610,6 +14620,7 @@
         "protos/perfetto/trace/ftrace/ion.proto",
         "protos/perfetto/trace/ftrace/ipi.proto",
         "protos/perfetto/trace/ftrace/irq.proto",
+        "protos/perfetto/trace/ftrace/kgsl.proto",
         "protos/perfetto/trace/ftrace/kmem.proto",
         "protos/perfetto/trace/ftrace/kvm.proto",
         "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
@@ -15886,6 +15897,7 @@
         "protos/perfetto/trace/ftrace/ion.proto",
         "protos/perfetto/trace/ftrace/ipi.proto",
         "protos/perfetto/trace/ftrace/irq.proto",
+        "protos/perfetto/trace/ftrace/kgsl.proto",
         "protos/perfetto/trace/ftrace/kmem.proto",
         "protos/perfetto/trace/ftrace/kvm.proto",
         "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
diff --git a/BUILD b/BUILD
index 96b8225..1e32a8b 100644
--- a/BUILD
+++ b/BUILD
@@ -5027,6 +5027,7 @@
         "protos/perfetto/trace/ftrace/ion.proto",
         "protos/perfetto/trace/ftrace/ipi.proto",
         "protos/perfetto/trace/ftrace/irq.proto",
+        "protos/perfetto/trace/ftrace/kgsl.proto",
         "protos/perfetto/trace/ftrace/kmem.proto",
         "protos/perfetto/trace/ftrace/kvm.proto",
         "protos/perfetto/trace/ftrace/lowmemorykiller.proto",
diff --git a/protos/perfetto/trace/ftrace/all_protos.gni b/protos/perfetto/trace/ftrace/all_protos.gni
index 8106e3b..aaa1971 100644
--- a/protos/perfetto/trace/ftrace/all_protos.gni
+++ b/protos/perfetto/trace/ftrace/all_protos.gni
@@ -50,6 +50,7 @@
   "ion.proto",
   "ipi.proto",
   "irq.proto",
+  "kgsl.proto",
   "kmem.proto",
   "kvm.proto",
   "lowmemorykiller.proto",
diff --git a/protos/perfetto/trace/ftrace/ftrace_event.proto b/protos/perfetto/trace/ftrace/ftrace_event.proto
index 8589297..8e95aff 100644
--- a/protos/perfetto/trace/ftrace/ftrace_event.proto
+++ b/protos/perfetto/trace/ftrace/ftrace_event.proto
@@ -50,6 +50,7 @@
 import "protos/perfetto/trace/ftrace/ion.proto";
 import "protos/perfetto/trace/ftrace/ipi.proto";
 import "protos/perfetto/trace/ftrace/irq.proto";
+import "protos/perfetto/trace/ftrace/kgsl.proto";
 import "protos/perfetto/trace/ftrace/kmem.proto";
 import "protos/perfetto/trace/ftrace/kvm.proto";
 import "protos/perfetto/trace/ftrace/lowmemorykiller.proto";
@@ -630,5 +631,6 @@
     ThermalExynosAcpmHighOverheadFtraceEvent thermal_exynos_acpm_high_overhead =
         507;
     DcvshFreqFtraceEvent dcvsh_freq = 508;
+    KgslGpuFrequencyFtraceEvent kgsl_gpu_frequency = 509;
   }
 }
diff --git a/protos/perfetto/trace/ftrace/kgsl.proto b/protos/perfetto/trace/ftrace/kgsl.proto
new file mode 100644
index 0000000..dcb03ca
--- /dev/null
+++ b/protos/perfetto/trace/ftrace/kgsl.proto
@@ -0,0 +1,11 @@
+// Autogenerated by:
+// ../../src/tools/ftrace_proto_gen/ftrace_proto_gen.cc
+// Do not edit.
+
+syntax = "proto2";
+package perfetto.protos;
+
+message KgslGpuFrequencyFtraceEvent {
+  optional uint32 gpu_freq = 1;
+  optional uint32 gpu_id = 2;
+}
diff --git a/protos/perfetto/trace/perfetto_trace.proto b/protos/perfetto/trace/perfetto_trace.proto
index 17bb390..12a596b 100644
--- a/protos/perfetto/trace/perfetto_trace.proto
+++ b/protos/perfetto/trace/perfetto_trace.proto
@@ -8722,6 +8722,15 @@
 
 // End of protos/perfetto/trace/ftrace/irq.proto
 
+// Begin of protos/perfetto/trace/ftrace/kgsl.proto
+
+message KgslGpuFrequencyFtraceEvent {
+  optional uint32 gpu_freq = 1;
+  optional uint32 gpu_id = 2;
+}
+
+// End of protos/perfetto/trace/ftrace/kgsl.proto
+
 // Begin of protos/perfetto/trace/ftrace/kmem.proto
 
 message AllocPagesIommuEndFtraceEvent {
@@ -10851,6 +10860,7 @@
     ThermalExynosAcpmHighOverheadFtraceEvent thermal_exynos_acpm_high_overhead =
         507;
     DcvshFreqFtraceEvent dcvsh_freq = 508;
+    KgslGpuFrequencyFtraceEvent kgsl_gpu_frequency = 509;
   }
 }
 
diff --git a/src/tools/ftrace_proto_gen/event_list b/src/tools/ftrace_proto_gen/event_list
index e6fc09f..acdbe36 100644
--- a/src/tools/ftrace_proto_gen/event_list
+++ b/src/tools/ftrace_proto_gen/event_list
@@ -503,3 +503,4 @@
 thermal_exynos/thermal_exynos_acpm_bulk
 thermal_exynos/thermal_exynos_acpm_high_overhead
 dcvsh/dcvsh_freq
+kgsl/gpu_frequency
diff --git a/src/tools/ftrace_proto_gen/ftrace_proto_gen.cc b/src/tools/ftrace_proto_gen/ftrace_proto_gen.cc
index 789d5bf..36e8726 100644
--- a/src/tools/ftrace_proto_gen/ftrace_proto_gen.cc
+++ b/src/tools/ftrace_proto_gen/ftrace_proto_gen.cc
@@ -59,7 +59,8 @@
   // These groups have events where the name alone conflicts with an existing
   // proto:
   if (group == "sde" || group == "g2d" || group == "dpu" || group == "mali" ||
-      group == "lwis" || group == "samsung") {
+      group == "lwis" || group == "samsung" ||
+      (group == "kgsl" && name == "gpu_frequency")) {
     event_name = group + "_" + event_name;
   }
   return event_name;
diff --git a/src/traced/probes/ftrace/event_info.cc b/src/traced/probes/ftrace/event_info.cc
index d7c1137..1ab492c 100644
--- a/src/traced/probes/ftrace/event_info.cc
+++ b/src/traced/probes/ftrace/event_info.cc
@@ -5476,6 +5476,19 @@
        kUnsetFtraceId,
        37,
        kUnsetSize},
+      {"gpu_frequency",
+       "kgsl",
+       {
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "gpu_freq", 1, ProtoSchemaType::kUint32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+           {kUnsetOffset, kUnsetSize, FtraceFieldType::kInvalidFtraceFieldType,
+            "gpu_id", 2, ProtoSchemaType::kUint32,
+            TranslationStrategy::kInvalidTranslationStrategy},
+       },
+       kUnsetFtraceId,
+       509,
+       kUnsetSize},
       {"alloc_pages_iommu_end",
        "kmem",
        {
diff --git a/src/traced/probes/ftrace/test/data/synthetic/events/kgsl/gpu_frequency/format b/src/traced/probes/ftrace/test/data/synthetic/events/kgsl/gpu_frequency/format
new file mode 100644
index 0000000..2a86734
--- /dev/null
+++ b/src/traced/probes/ftrace/test/data/synthetic/events/kgsl/gpu_frequency/format
@@ -0,0 +1,12 @@
+name: gpu_frequency
+ID: 1136
+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 gpu_freq;	offset:8;	size:4;	signed:0;
+	field:unsigned int gpu_id;	offset:12;	size:4;	signed:0;
+
+print fmt: "gpu_freq=%luKhz gpu_id=%lu", (unsigned long)REC->gpu_freq, (unsigned long)REC->gpu_id