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 uint32_t mUclampMinLoadUp; 68 uint32_t mUclampMinLoadReset; 69 70 // Power efficient sessions 71 std::optional<int32_t> mUclampMaxEfficientBase; 72 std::optional<int32_t> mUclampMaxEfficientOffset; 73 74 int64_t getPidIInitDivI(); 75 int64_t getPidIHighDivI(); 76 int64_t getPidILowDivI(); 77 void dumpToFd(int fd); 78 AdpfConfigAdpfConfig79 AdpfConfig(std::string name, bool pidOn, double pidPo, double pidPu, double pidI, 80 int64_t pidIInit, int64_t pidIHigh, int64_t pidILow, double pidDo, double pidDu, 81 bool uclampMinOn, uint32_t uclampMinInit, uint32_t uclampMinHigh, 82 uint32_t uclampMinLow, uint64_t samplingWindowP, uint64_t samplingWindowI, 83 uint64_t samplingWindowD, int64_t reportingRateLimitNs, double targetTimeFactor, 84 double staleTimeFactor, std::optional<bool> gpuBoostOn, 85 std::optional<uint64_t> gpuBoostCapacityMax, uint64_t gpuCapacityLoadUpHeadroom, 86 std::optional<bool> heuristicBoostOn, 87 std::optional<uint32_t> hBoostModerateJankThreshold, 88 std::optional<double> hBoostOffMaxAvgDurRatio, 89 std::optional<double> hBoostSevereJankPidPu, 90 std::optional<uint32_t> hBoostSevereJankThreshold, 91 std::optional<std::pair<uint32_t, uint32_t>> hBoostUclampMinCeilingRange, 92 std::optional<std::pair<uint32_t, uint32_t>> hBoostUclampMinFloorRange, 93 std::optional<double> jankCheckTimeFactor, 94 std::optional<uint32_t> lowFrameRateThreshold, std::optional<uint32_t> maxRecordsNum, 95 uint32_t uclampMinLoadUp, uint32_t uclampMinLoadReset, 96 std::optional<int32_t> uclampMaxEfficientBase, 97 std::optional<int32_t> uclampMaxEfficientOffset) 98 : mName(std::move(name)), 99 mPidOn(pidOn), 100 mPidPo(pidPo), 101 mPidPu(pidPu), 102 mPidI(pidI), 103 mPidIInit(pidIInit), 104 mPidIHigh(pidIHigh), 105 mPidILow(pidILow), 106 mPidDo(pidDo), 107 mPidDu(pidDu), 108 mUclampMinOn(uclampMinOn), 109 mUclampMinInit(uclampMinInit), 110 mUclampMinHigh(uclampMinHigh), 111 mUclampMinLow(uclampMinLow), 112 mSamplingWindowP(samplingWindowP), 113 mSamplingWindowI(samplingWindowI), 114 mSamplingWindowD(samplingWindowD), 115 mReportingRateLimitNs(reportingRateLimitNs), 116 mTargetTimeFactor(targetTimeFactor), 117 mStaleTimeFactor(staleTimeFactor), 118 mGpuBoostOn(gpuBoostOn), 119 mGpuBoostCapacityMax(gpuBoostCapacityMax), 120 mGpuCapacityLoadUpHeadroom(gpuCapacityLoadUpHeadroom), 121 mHeuristicBoostOn(heuristicBoostOn), 122 mHBoostModerateJankThreshold(hBoostModerateJankThreshold), 123 mHBoostOffMaxAvgDurRatio(hBoostOffMaxAvgDurRatio), 124 mHBoostSevereJankPidPu(hBoostSevereJankPidPu), 125 mHBoostSevereJankThreshold(hBoostSevereJankThreshold), 126 mHBoostUclampMinCeilingRange(hBoostUclampMinCeilingRange), 127 mHBoostUclampMinFloorRange(hBoostUclampMinFloorRange), 128 mJankCheckTimeFactor(jankCheckTimeFactor), 129 mLowFrameRateThreshold(lowFrameRateThreshold), 130 mMaxRecordsNum(maxRecordsNum), 131 mUclampMinLoadUp(uclampMinLoadUp), 132 mUclampMinLoadReset(uclampMinLoadReset), 133 mUclampMaxEfficientBase(uclampMaxEfficientBase), 134 mUclampMaxEfficientOffset(uclampMaxEfficientOffset) {} 135 }; 136 137 } // namespace perfmgr 138 } // namespace android 139