1/*
2 * Copyright (c) 2024 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#ifndef CONCURRENT_TASK_SERVICES_COMMON_INCLUDE_CONFIG_READER_H
16#define CONCURRENT_TASK_SERVICES_COMMON_INCLUDE_CONFIG_READER_H
17
18#include <map>
19#include <memory>
20#include <unordered_set>
21#include "libxml/parser.h"
22#include "libxml/xpath.h"
23
24namespace OHOS {
25namespace ConcurrentTask {
26class ConfigReader {
27public:
28    bool LoadFromConfigFile(const std::string& configFile);
29    void GetRealConfigPath(const char* configName, std::string& configPath);
30    bool IsUidAuth(pid_t uid);
31    bool IsBundleNameAuth(std::string& bundleName);
32    bool GetPowerModeSchedSwitch();
33    int GetDegratationFps(int fps);
34private:
35    bool IsValidNode(const xmlNode* currNode);
36    bool IsValidFps(const std::string& fps);
37    bool IsPositiveInt(const std::string& intStr);
38    bool FillinUidInfo(const xmlNode* currNode);
39    bool FillinBundleNameInfo(const xmlNode* currNode);
40    void ParseAuth(const xmlNode* currNode);
41    void ParsePowerMode(const xmlNode* currNode);
42    void ConfigHilog();
43    bool powerModeSchedSwitch_ = false;
44    std::unordered_set<pid_t> authProcUidConfigs_;
45    std::unordered_set<std::string> authProcBundleNameConfigs_;
46    std::map<int, int> degradationFpsMap_;
47};
48} // namespace ConcurrentTask
49} // namespace OHOS
50#endif // CONCURRENT_TASK_SERVICES_COMMON_INCLUDE_CONFIG_READER_H
51