• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef HGM_COMMAND_H
17 #define HGM_COMMAND_H
18 
19 #include <inttypes.h>
20 #include <string>
21 #include <unordered_map>
22 #include <vector>
23 
24 #include "screen_manager/screen_types.h"
25 #include "animation/rs_frame_rate_range.h"
26 
27 namespace OHOS::Rosen {
28 
29 constexpr int UNI_APP_PID = -1;
30 constexpr int32_t HGM_REFRESHRATE_MODE_AUTO = -1;
31 constexpr pid_t DEFAULT_PID = 0;
32 
33 enum OledRefreshRate {
34     OLED_NULL_HZ = 0,
35     OLED_MIN_HZ = 1,
36     OLED_1_HZ = 1,
37     OLED_10_HZ = 10,
38     OLED_20_HZ = 20,
39     OLED_30_HZ = 30,
40     OLED_40_HZ = 40,
41     OLED_60_HZ = 60,
42     OLED_90_HZ = 90,
43     OLED_120_HZ = 120,
44     OLED_144_HZ = 144,
45     OLED_MAX_HZ = 1000,
46 };
47 
48 enum HgmErrCode {
49     HGM_ERROR = -1,
50 
51     EXEC_SUCCESS = 0,
52 
53     HGM_NO_SCREEN = 100,
54     HGM_BASE_REMOVE_FAILED,
55 
56     XML_PARSER_CREATE_FAIL = 200,
57     XML_FILE_LOAD_FAIL,
58     XML_GET_ROOT_FAIL,
59     XML_PARSE_INTERNAL_FAIL,
60 
61     HGM_SCREEN_MODE_EXIST,
62     HGM_SCREEN_PARAM_ERROR,
63     FINAL_RANGE_NOT_VALID,
64 };
65 
66 enum HgmXmlNode {
67     HGM_XML_UNDEFINED = 0,
68     HGM_XML_PARAM,
69     HGM_XML_PARAMS,
70 };
71 
72 enum class SceneType {
73     SCREEN_RECORD,
74 };
75 
76 enum DynamicModeType : int32_t {
77     TOUCH_DISENABLED = 0,
78     TOUCH_ENABLED = 1,
79     TOUCH_EXT_ENABLED = 2, // touch extend program
80 };
81 
82 enum MultiAppStrategyType {
83     USE_MAX,
84     FOLLOW_FOCUS,
85     USE_STRATEGY_NUM,
86 };
87 
88 class PolicyConfigData {
89 public:
90     PolicyConfigData() = default;
91     ~PolicyConfigData() = default;
92 
93     struct StrategyConfig {
94         int32_t min;
95         int32_t max;
96         DynamicModeType dynamicMode;
97         bool isFactor;
98         int32_t drawMin;
99         int32_t drawMax;
100         int32_t down;
101         // <bufferName, fps>
102         std::vector<std::pair<std::string, int32_t>> appBufferList;
103         std::vector<std::string> appBufferBlackList;
104     };
105     // <"1", StrategyConfig>
106     using StrategyConfigMap = std::unordered_map<std::string, StrategyConfig>;
107 
108     struct SceneConfig {
109         std::string strategy;
110         std::string priority;
111     };
112     // <"SCENE_APP_START_ANIMATION", SceneConfig>
113     using SceneConfigMap = std::unordered_map<std::string, SceneConfig>;
114 
115     struct DynamicConfig {
116         int32_t min;
117         int32_t max;
118         int32_t preferred_fps;
119     };
120     // <"1", DynamicConfig>
121     using DynamicSetting = std::unordered_map<std::string, DynamicConfig>;
122     // <"translate", DynamicSetting>
123     using DynamicSettingMap = std::unordered_map<std::string, DynamicSetting>;
124 
125     struct ScreenSetting {
126         std::string strategy;
127         // <"switch", "1">
128         std::unordered_map<std::string, std::string> ltpoConfig;
129         // <"pkgName", "4">
130         std::unordered_map<std::string, std::string> appList;
131         MultiAppStrategyType multiAppStrategyType;
132         std::string multiAppStrategyName;
133         // <appType, strategyName>
134         std::unordered_map<int32_t, std::string> appTypes;
135         SceneConfigMap sceneList;
136         // <SCENE_APP_START_ANIMATION, placeholder>
137         std::unordered_map<std::string, std::string> gameSceneList;
138         DynamicSettingMap animationDynamicSettings;
139         DynamicSettingMap aceSceneDynamicSettings;
140         // <CONFIG_NAME, VALUE>
141         std::unordered_map<std::string, std::string> animationPowerConfig;
142         // <rateTypeName, idleFps>
143         std::unordered_map<std::string, std::string> uiPowerConfig;
144         // <SCENE_APP_START_ANIMATION, placeholder>
145         SceneConfigMap ancoSceneList;
146     };
147     // <"-1", ScreenSetting>
148     using ScreenConfig = std::unordered_map<std::string, ScreenSetting>;
149     // <"LTPO-DEFAULT", ScreenConfig>
150     using ScreenConfigMap = std::unordered_map<std::string, ScreenConfig>;
151 
152     std::string defaultRefreshRateMode_ = "-1";
153     // <"120", "1">
154     std::vector<std::pair<int32_t, int32_t>> refreshRateForSettings_;
155     std::vector<std::string> appBufferList_;
156     bool xmlCompatibleMode_ = false;
157     bool safeVoteEnabled = true;
158     // <"VIRTUAL_AXX", "4">
159     std::unordered_map<std::string, std::string> virtualDisplayConfigs_;
160     bool virtualDisplaySwitch_;
161     // <"screen0_LTPO", "LTPO-DEFAULT">
162     std::unordered_map<std::string, std::string> screenStrategyConfigs_;
163     std::unordered_map<std::string, std::string> sourceTuningConfig_;
164     std::unordered_map<std::string, std::string> solidLayerConfig_;
165     // <"pkgName", "1">
166     std::unordered_map<std::string, std::string> hfbcConfig_;
167     StrategyConfigMap strategyConfigs_;
168     ScreenConfigMap screenConfigs_;
169     bool videoFrameRateVoteSwitch_ = false;
170     // <"pkgName", "1">
171     std::unordered_map<std::string, std::string> videoFrameRateList_;
172 
GetAceSceneDynamicSettingMap(const std::string & screenType,const std::string & settingMode)173     DynamicSettingMap GetAceSceneDynamicSettingMap(const std::string& screenType, const std::string& settingMode)
174     {
175         if (screenConfigs_.count(screenType) && screenConfigs_[screenType].count(settingMode)) {
176             return screenConfigs_[screenType][settingMode].aceSceneDynamicSettings;
177         } else {
178             return {};
179         }
180     }
181 
SettingModeId2XmlModeId(int32_t settingModeId)182     int32_t SettingModeId2XmlModeId(int32_t settingModeId)
183     {
184         if (settingModeId < 0 || settingModeId >= static_cast<int32_t>(refreshRateForSettings_.size())) {
185             return 0;
186         }
187         return refreshRateForSettings_[settingModeId].second;
188     }
189 
XmlModeId2SettingModeId(int32_t xmlModeId)190     int32_t XmlModeId2SettingModeId(int32_t xmlModeId)
191     {
192         auto iter = std::find_if(refreshRateForSettings_.begin(), refreshRateForSettings_.end(),
193             [=] (auto nameModeId) { return nameModeId.second == xmlModeId; });
194         if (iter != refreshRateForSettings_.end()) {
195             return static_cast<int32_t>(iter - refreshRateForSettings_.begin());
196         }
197         return 0;
198     }
199 
GetRefreshRateModeName(int32_t refreshRateModeId)200     int32_t GetRefreshRateModeName(int32_t refreshRateModeId)
201     {
202         auto iter = std::find_if(refreshRateForSettings_.begin(), refreshRateForSettings_.end(),
203             [=] (auto nameModeId) { return nameModeId.second == refreshRateModeId; });
204         if (iter != refreshRateForSettings_.end()) {
205             return iter->first;
206         }
207         return 0;
208     }
209 };
210 } // namespace OHOS
211 #endif // HGM_COMMAND_H