1 /* 2 * Copyright 2023 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #pragma once 18 19 #include <aidl/android/hardware/power/SessionMode.h> 20 #include <android-base/stringprintf.h> 21 22 #include <string> 23 24 #include "AdpfTypes.h" 25 26 namespace aidl { 27 namespace google { 28 namespace hardware { 29 namespace power { 30 namespace impl { 31 namespace pixel { 32 33 // The App Hint Descriptor struct manages information necessary 34 // to calculate the next uclamp min value from the PID function 35 // and is separate so that it can be used as a pointer for 36 // easily passing to the pid function 37 struct AppDescriptorTrace { AppDescriptorTraceAppDescriptorTrace38 AppDescriptorTrace(const std::string &idString) { 39 using ::android::base::StringPrintf; 40 trace_pid_err = StringPrintf("adpf.%s-%s", idString.c_str(), "pid.err"); 41 trace_pid_integral = StringPrintf("adpf.%s-%s", idString.c_str(), "pid.integral"); 42 trace_pid_derivative = StringPrintf("adpf.%s-%s", idString.c_str(), "pid.derivative"); 43 trace_pid_pOut = StringPrintf("adpf.%s-%s", idString.c_str(), "pid.pOut"); 44 trace_pid_iOut = StringPrintf("adpf.%s-%s", idString.c_str(), "pid.iOut"); 45 trace_pid_dOut = StringPrintf("adpf.%s-%s", idString.c_str(), "pid.dOut"); 46 trace_pid_output = StringPrintf("adpf.%s-%s", idString.c_str(), "pid.output"); 47 trace_target = StringPrintf("adpf.%s-%s", idString.c_str(), "target"); 48 trace_active = StringPrintf("adpf.%s-%s", idString.c_str(), "active"); 49 trace_add_threads = StringPrintf("adpf.%s-%s", idString.c_str(), "add_threads"); 50 trace_actl_last = StringPrintf("adpf.%s-%s", idString.c_str(), "act_last"); 51 trace_min = StringPrintf("adpf.%s-%s", idString.c_str(), "min"); 52 trace_batch_size = StringPrintf("adpf.%s-%s", idString.c_str(), "batch_size"); 53 trace_hint_count = StringPrintf("adpf.%s-%s", idString.c_str(), "hint_count"); 54 trace_hint_overtime = StringPrintf("adpf.%s-%s", idString.c_str(), "hint_overtime"); 55 trace_is_first_frame = StringPrintf("adpf.%s-%s", idString.c_str(), "is_first_frame"); 56 // traces for heuristic boost 57 trace_avg_duration = StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.avgDuration"); 58 trace_hboost_janky_level = 59 StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.jankyLevel"); 60 trace_low_frame_rate = 61 StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.isLowFrameRate"); 62 trace_max_duration = StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.maxDuration"); 63 trace_missed_cycles = 64 StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.numOfMissedCycles"); 65 trace_uclamp_min_ceiling = 66 StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.uclampMinCeiling"); 67 trace_uclamp_min_floor = 68 StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.uclampMinFloor"); 69 trace_hboost_pid_pu = StringPrintf("adpf.%s-%s", idString.c_str(), "hboost.uclampPidPu"); 70 71 for (size_t i = 0; i < trace_modes.size(); ++i) { 72 trace_modes[i] = StringPrintf( 73 "adpf.%s-%s_mode", idString.c_str(), 74 toString(static_cast<aidl::android::hardware::power::SessionMode>(i)).c_str()); 75 } 76 for (size_t i = 0; i < trace_votes.size(); ++i) { 77 trace_votes[i] = StringPrintf("adpf.%s-vote.%s", idString.c_str(), 78 AdpfVoteTypeToStr(static_cast<AdpfVoteType>(i))); 79 } 80 trace_cpu_duration = StringPrintf("adpf.%s-%s", idString.c_str(), "cpu_duration"); 81 trace_gpu_duration = StringPrintf("adpf.%s-%s", idString.c_str(), "gpu_duration"); 82 trace_gpu_capacity = StringPrintf("adpf.%s-%s", idString.c_str(), "gpu_capacity"); 83 trace_game_mode_fps = "adpf.sf.gameModeFPS"; 84 trace_game_mode_fps_jitters = "adpf.sf.gameModeFPSJitters"; 85 } 86 87 // Trace values 88 std::string trace_pid_err; 89 std::string trace_pid_integral; 90 std::string trace_pid_derivative; 91 std::string trace_pid_pOut; 92 std::string trace_pid_iOut; 93 std::string trace_pid_dOut; 94 std::string trace_pid_output; 95 std::string trace_target; 96 std::string trace_active; 97 std::string trace_add_threads; 98 std::string trace_actl_last; 99 std::string trace_min; 100 std::string trace_batch_size; 101 std::string trace_hint_count; 102 std::string trace_hint_overtime; 103 std::string trace_is_first_frame; 104 // traces for heuristic boost 105 std::string trace_avg_duration; 106 std::string trace_hboost_janky_level; 107 std::string trace_hboost_pid_pu; 108 std::string trace_low_frame_rate; 109 std::string trace_max_duration; 110 std::string trace_missed_cycles; 111 std::string trace_uclamp_min_ceiling; 112 std::string trace_uclamp_min_floor; 113 114 std::array<std::string, enum_size<aidl::android::hardware::power::SessionMode>()> trace_modes; 115 std::array<std::string, static_cast<int32_t>(AdpfVoteType::VOTE_TYPE_SIZE)> trace_votes; 116 std::string trace_cpu_duration; 117 std::string trace_gpu_duration; 118 std::string trace_gpu_capacity; 119 std::string trace_game_mode_fps; 120 std::string trace_game_mode_fps_jitters; 121 }; 122 123 } // namespace pixel 124 } // namespace impl 125 } // namespace power 126 } // namespace hardware 127 } // namespace google 128 } // namespace aidl 129