1 /*
2 * Copyright (c) 2022 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 #include "memmgr_log.h"
16 #include "xml_helper.h"
17 #include "reclaim_config.h"
18
19 namespace OHOS {
20 namespace Memory {
21 namespace {
22 const std::string TAG = "ReclaimConfig";
23 }
24
ReclaimConfig()25 ReclaimConfig::ReclaimConfig()
26 {
27 }
28
SetDefaultConfig(int minScore,int maxScore,unsigned int mem2zramRatio,unsigned int zram2ufsRatio,unsigned int refaultThreshold)29 void ReclaimConfig::SetDefaultConfig(int minScore, int maxScore, unsigned int mem2zramRatio,
30 unsigned int zram2ufsRatio, unsigned int refaultThreshold)
31 {
32 DECLARE_SHARED_POINTER(ZswapdParam, zswapdParam);
33
34 MAKE_POINTER(zswapdParam, shared, ZswapdParam, "make default ZswapdParam failed", return,
35 minScore, maxScore, mem2zramRatio, zram2ufsRatio, refaultThreshold);
36 AddReclaimConfigToSet(zswapdParam);
37 }
38
ParseConfig(const xmlNodePtr & rootNodePtr)39 void ReclaimConfig::ParseConfig(const xmlNodePtr &rootNodePtr)
40 {
41 if (!XmlHelper::CheckNode(rootNodePtr) || !XmlHelper::HasChild(rootNodePtr)) {
42 HILOGD("Node exsist:%{public}d,has child node:%{public}d",
43 XmlHelper::CheckNode(rootNodePtr), XmlHelper::HasChild(rootNodePtr));
44 return;
45 }
46
47 std::map<std::string, std::string> param;
48 for (xmlNodePtr currNode = rootNodePtr->xmlChildrenNode; currNode != nullptr; currNode = currNode->next) {
49 if (!XmlHelper::GetModuleParam(currNode, param)) {
50 HILOGW("Get moudle param failed.");
51 return;
52 }
53 SetZswapdParamConfig(param);
54 }
55 }
56
SetZswapdParamConfig(std::map<std::string,std::string> & param)57 void ReclaimConfig::SetZswapdParamConfig(std::map<std::string, std::string> ¶m)
58 {
59 int minScore, maxScore;
60 unsigned int mem2zramRatio, zram2ufsRatio, refaultThreshold;
61
62 XmlHelper::SetIntParam(param, "minScore", minScore, 0);
63 XmlHelper::SetIntParam(param, "maxScore", maxScore, RECLAIM_PRIORITY_MAX);
64 XmlHelper::SetUnsignedIntParam(param, "mem2zramRatio", mem2zramRatio, MEMCG_MEM_2_ZRAM_RATIO);
65 XmlHelper::SetUnsignedIntParam(param, "zram2ufsRatio", zram2ufsRatio, MEMCG_ZRAM_2_UFS_RATIO);
66 XmlHelper::SetUnsignedIntParam(param, "refaultThreshold", refaultThreshold, MEMCG_REFAULT_THRESHOLD);
67
68 DECLARE_SHARED_POINTER(ZswapdParam, zswapdParam);
69 MAKE_POINTER(zswapdParam, shared, ZswapdParam, "make ZswapdParam failed", return,
70 minScore, maxScore, mem2zramRatio, zram2ufsRatio, refaultThreshold);
71
72 AddReclaimConfigToSet(zswapdParam);
73 }
74
AddReclaimConfigToSet(std::shared_ptr<ZswapdParam> zswapdParam)75 void ReclaimConfig::AddReclaimConfigToSet(std::shared_ptr<ZswapdParam> zswapdParam)
76 {
77 reclaimConfigSet_.insert(zswapdParam);
78 }
79
ClearReclaimConfigSet()80 void ReclaimConfig::ClearReclaimConfigSet()
81 {
82 reclaimConfigSet_.clear();
83 }
84
GetReclaimConfigSet()85 const ReclaimConfig::ReclaimConfigSet& ReclaimConfig::GetReclaimConfigSet()
86 {
87 return reclaimConfigSet_;
88 }
89
ZswapdParam()90 ZswapdParam::ZswapdParam()
91 {
92 }
93
ZswapdParam(int minScore,int maxScore,unsigned int mem2zramRatio,unsigned int zram2ufsRatio,unsigned int refaultThreshold)94 ZswapdParam::ZswapdParam(int minScore, int maxScore, unsigned int mem2zramRatio,
95 unsigned int zram2ufsRatio, unsigned int refaultThreshold)
96 : minScore_(minScore),
97 maxScore_(maxScore),
98 mem2zramRatio_(mem2zramRatio),
99 zram2ufsRatio_(zram2ufsRatio),
100 refaultThreshold_(refaultThreshold)
101 {
102 }
103
GetMinScore()104 int ZswapdParam::GetMinScore()
105 {
106 return minScore_;
107 }
108
SetMinScore(int minScore)109 void ZswapdParam::SetMinScore(int minScore)
110 {
111 minScore_ = minScore;
112 }
113
GetMaxScore()114 int ZswapdParam::GetMaxScore()
115 {
116 return maxScore_;
117 }
118
SetMaxScore(int maxScore)119 void ZswapdParam::SetMaxScore(int maxScore)
120 {
121 maxScore_ = maxScore;
122 }
123
GetMem2zramRatio()124 unsigned int ZswapdParam::GetMem2zramRatio()
125 {
126 return mem2zramRatio_;
127 }
128
SetMem2zramRatio(unsigned int mem2zramRatio)129 void ZswapdParam::SetMem2zramRatio(unsigned int mem2zramRatio)
130 {
131 mem2zramRatio_ = mem2zramRatio;
132 }
133
GetZram2ufsRatio()134 unsigned int ZswapdParam::GetZram2ufsRatio()
135 {
136 return zram2ufsRatio_;
137 }
138
SetZram2ufsRatio(unsigned int zram2ufsRatio)139 void ZswapdParam::SetZram2ufsRatio(unsigned int zram2ufsRatio)
140 {
141 zram2ufsRatio_ = zram2ufsRatio;
142 }
143
GetRefaultThreshold()144 unsigned int ZswapdParam::GetRefaultThreshold()
145 {
146 return refaultThreshold_;
147 }
148
SetRefaultThreshold(unsigned int refaultThreshold)149 void ZswapdParam::SetRefaultThreshold(unsigned int refaultThreshold)
150 {
151 refaultThreshold_ = refaultThreshold;
152 }
153
Dump(int fd)154 void ReclaimConfig::Dump(int fd)
155 {
156 int index = 0;
157 for (auto it = reclaimConfigSet_.begin(); it != reclaimConfigSet_.end(); it++) {
158 index++;
159 dprintf(fd, "ReclaimConfig %d: \n", index);
160 dprintf(fd, " minScore: %d\n", (*it)->GetMinScore());
161 dprintf(fd, " maxScore: %d\n", (*it)->GetMaxScore());
162 dprintf(fd, " mem2zramRatio: %u\n", (*it)->GetMem2zramRatio());
163 dprintf(fd, " zram2ufsRatio: %u\n", (*it)->GetZram2ufsRatio());
164 dprintf(fd, " refaultThreshold: %u\n", (*it)->GetRefaultThreshold());
165 }
166 }
167 } // namespace Memory
168 } // namespace OHOS
169