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 StrategyConfigMap strategyConfigs_; 165 ScreenConfigMap screenConfigs_; 166 bool videoFrameRateVoteSwitch_ = false; 167 // <"pkgName", "1"> 168 std::unordered_map<std::string, std::string> videoFrameRateList_; 169 GetAceSceneDynamicSettingMap(const std::string & screenType,const std::string & settingMode)170 DynamicSettingMap GetAceSceneDynamicSettingMap(const std::string& screenType, const std::string& settingMode) 171 { 172 if (screenConfigs_.count(screenType) && screenConfigs_[screenType].count(settingMode)) { 173 return screenConfigs_[screenType][settingMode].aceSceneDynamicSettings; 174 } else { 175 return {}; 176 } 177 } 178 SettingModeId2XmlModeId(int32_t settingModeId)179 int32_t SettingModeId2XmlModeId(int32_t settingModeId) 180 { 181 if (settingModeId < 0 || settingModeId >= static_cast<int32_t>(refreshRateForSettings_.size())) { 182 return 0; 183 } 184 return refreshRateForSettings_[settingModeId].second; 185 } 186 XmlModeId2SettingModeId(int32_t xmlModeId)187 int32_t XmlModeId2SettingModeId(int32_t xmlModeId) 188 { 189 auto iter = std::find_if(refreshRateForSettings_.begin(), refreshRateForSettings_.end(), 190 [=] (auto nameModeId) { return nameModeId.second == xmlModeId; }); 191 if (iter != refreshRateForSettings_.end()) { 192 return static_cast<int32_t>(iter - refreshRateForSettings_.begin()); 193 } 194 return 0; 195 } 196 GetRefreshRateModeName(int32_t refreshRateModeId)197 int32_t GetRefreshRateModeName(int32_t refreshRateModeId) 198 { 199 auto iter = std::find_if(refreshRateForSettings_.begin(), refreshRateForSettings_.end(), 200 [=] (auto nameModeId) { return nameModeId.second == refreshRateModeId; }); 201 if (iter != refreshRateForSettings_.end()) { 202 return iter->first; 203 } 204 return 0; 205 } 206 }; 207 } // namespace OHOS 208 #endif // HGM_COMMAND_H