• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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