1 /* 2 * Copyright 2022 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 <optional> 20 #include <string> 21 22 namespace android { 23 namespace perfmgr { 24 25 struct AdpfConfig { 26 std::string mName; 27 // Pid control 28 bool mPidOn; 29 double mPidPo; 30 double mPidPu; 31 double mPidI; 32 int64_t mPidIInit; 33 int64_t mPidIHigh; 34 int64_t mPidILow; 35 double mPidDo; 36 double mPidDu; 37 // Uclamp boost control 38 bool mUclampMinOn; 39 uint32_t mUclampMinInit; 40 uint32_t mUclampMinHigh; 41 uint32_t mUclampMinLow; 42 // Batch update control 43 uint64_t mSamplingWindowP; 44 uint64_t mSamplingWindowI; 45 uint64_t mSamplingWindowD; 46 int64_t mReportingRateLimitNs; 47 double mTargetTimeFactor; 48 // Stale control 49 double mStaleTimeFactor; 50 51 std::optional<bool> mGpuBoostOn; 52 std::optional<uint64_t> mGpuBoostCapacityMax; 53 uint64_t mGpuCapacityLoadUpHeadroom; 54 55 // Heuristic boost control 56 std::optional<bool> mHeuristicBoostOn; 57 std::optional<uint32_t> mHBoostModerateJankThreshold; 58 std::optional<double> mHBoostOffMaxAvgDurRatio; 59 std::optional<double> mHBoostSevereJankPidPu; 60 std::optional<uint32_t> mHBoostSevereJankThreshold; 61 std::optional<std::pair<uint32_t, uint32_t>> mHBoostUclampMinCeilingRange; 62 std::optional<std::pair<uint32_t, uint32_t>> mHBoostUclampMinFloorRange; 63 std::optional<double> mJankCheckTimeFactor; 64 std::optional<uint32_t> mLowFrameRateThreshold; 65 std::optional<uint32_t> mMaxRecordsNum; 66 67 // Rampup boost control 68 std::optional<bool> mHeuristicRampup; 69 std::optional<uint32_t> mDefaultRampupMult; 70 std::optional<uint32_t> mHighRampupMult; 71 72 uint32_t mUclampMinLoadUp; 73 uint32_t mUclampMinLoadReset; 74 75 // Power efficient sessions 76 std::optional<int32_t> mUclampMaxEfficientBase; 77 std::optional<int32_t> mUclampMaxEfficientOffset; 78 79 int64_t getPidIInitDivI(); 80 int64_t getPidIHighDivI(); 81 int64_t getPidILowDivI(); 82 void dumpToFd(int fd); 83 AdpfConfigAdpfConfig84 AdpfConfig(std::string name, bool pidOn, double pidPo, double pidPu, double pidI, 85 int64_t pidIInit, int64_t pidIHigh, int64_t pidILow, double pidDo, double pidDu, 86 bool uclampMinOn, uint32_t uclampMinInit, uint32_t uclampMinHigh, 87 uint32_t uclampMinLow, uint64_t samplingWindowP, uint64_t samplingWindowI, 88 uint64_t samplingWindowD, int64_t reportingRateLimitNs, double targetTimeFactor, 89 double staleTimeFactor, std::optional<bool> gpuBoostOn, 90 std::optional<uint64_t> gpuBoostCapacityMax, uint64_t gpuCapacityLoadUpHeadroom, 91 std::optional<bool> heuristicBoostOn, 92 std::optional<uint32_t> hBoostModerateJankThreshold, 93 std::optional<double> hBoostOffMaxAvgDurRatio, 94 std::optional<double> hBoostSevereJankPidPu, 95 std::optional<uint32_t> hBoostSevereJankThreshold, 96 std::optional<std::pair<uint32_t, uint32_t>> hBoostUclampMinCeilingRange, 97 std::optional<std::pair<uint32_t, uint32_t>> hBoostUclampMinFloorRange, 98 std::optional<double> jankCheckTimeFactor, 99 std::optional<uint32_t> lowFrameRateThreshold, std::optional<uint32_t> maxRecordsNum, 100 std::optional<bool> heuristicRampup, std::optional<uint32_t> defaultRampupMult, 101 std::optional<uint32_t> highRampupMult, uint32_t uclampMinLoadUp, 102 uint32_t uclampMinLoadReset, std::optional<int32_t> uclampMaxEfficientBase, 103 std::optional<int32_t> uclampMaxEfficientOffset) 104 : mName(std::move(name)), 105 mPidOn(pidOn), 106 mPidPo(pidPo), 107 mPidPu(pidPu), 108 mPidI(pidI), 109 mPidIInit(pidIInit), 110 mPidIHigh(pidIHigh), 111 mPidILow(pidILow), 112 mPidDo(pidDo), 113 mPidDu(pidDu), 114 mUclampMinOn(uclampMinOn), 115 mUclampMinInit(uclampMinInit), 116 mUclampMinHigh(uclampMinHigh), 117 mUclampMinLow(uclampMinLow), 118 mSamplingWindowP(samplingWindowP), 119 mSamplingWindowI(samplingWindowI), 120 mSamplingWindowD(samplingWindowD), 121 mReportingRateLimitNs(reportingRateLimitNs), 122 mTargetTimeFactor(targetTimeFactor), 123 mStaleTimeFactor(staleTimeFactor), 124 mGpuBoostOn(gpuBoostOn), 125 mGpuBoostCapacityMax(gpuBoostCapacityMax), 126 mGpuCapacityLoadUpHeadroom(gpuCapacityLoadUpHeadroom), 127 mHeuristicBoostOn(heuristicBoostOn), 128 mHBoostModerateJankThreshold(hBoostModerateJankThreshold), 129 mHBoostOffMaxAvgDurRatio(hBoostOffMaxAvgDurRatio), 130 mHBoostSevereJankPidPu(hBoostSevereJankPidPu), 131 mHBoostSevereJankThreshold(hBoostSevereJankThreshold), 132 mHBoostUclampMinCeilingRange(hBoostUclampMinCeilingRange), 133 mHBoostUclampMinFloorRange(hBoostUclampMinFloorRange), 134 mJankCheckTimeFactor(jankCheckTimeFactor), 135 mLowFrameRateThreshold(lowFrameRateThreshold), 136 mMaxRecordsNum(maxRecordsNum), 137 mHeuristicRampup(heuristicRampup), 138 mDefaultRampupMult(defaultRampupMult), 139 mHighRampupMult(highRampupMult), 140 mUclampMinLoadUp(uclampMinLoadUp), 141 mUclampMinLoadReset(uclampMinLoadReset), 142 mUclampMaxEfficientBase(uclampMaxEfficientBase), 143 mUclampMaxEfficientOffset(uclampMaxEfficientOffset) {} 144 }; 145 146 } // namespace perfmgr 147 } // namespace android 148