• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2023-2025 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 INTERFACES_INNER_API_UNIFIED_COLLECTION_RESOURCE_MEMORY_H
17 #define INTERFACES_INNER_API_UNIFIED_COLLECTION_RESOURCE_MEMORY_H
18 #include <cinttypes>
19 #include <string>
20 #include <vector>
21 
22 namespace OHOS {
23 namespace HiviewDFX {
24 struct SysMemory {
25     int32_t memTotal = 0;        // total amount of usable RAM, unit KB
26     int32_t memFree = 0;         // unit KB
27     int32_t memAvailable = 0;    // unit KB
28     int32_t zramUsed = 0;        // unit KB
29     int32_t swapCached = 0;      // unit KB
30     int32_t cached = 0;          // unit KB
31 };
32 
33 struct ProcessMemory {
34     int32_t pid = 0;             // process id
35     std::string name;            // process name
36     int32_t rss = 0;             // resident set size, unit KB
37     int32_t pss = 0;             // proportional set Size, unit KB
38     int32_t swapPss = 0;         // swap pss, unit KB
39     int32_t adj = 0;             // /proc/$pid/oom_score_adj
40     int32_t sharedDirty = 0;     // process Shared_Dirty
41     int32_t privateDirty = 0;    // process Private_Dirty
42     int32_t sharedClean = 0;     // process Shared_Clean
43     int32_t privateClean = 0;    // process Private_Clean
44     int32_t procState = 0;       // process State
45 };
46 
47 struct MemoryLimit {
48     uint64_t rssLimit = 0;
49     uint64_t vssLimit = 0;
50 };
51 
52 enum class GraphicType {
53     TOTAL,
54     GL,
55     GRAPH,
56 };
57 
58 enum class GraphicMemOption {
59     NONE,
60     LOW_LATENCY,
61     LOW_MEMORY,
62 };
63 
64 enum class MemoryClass {
65     MEMORY_CLASS_GRAPH,
66     MEMORY_CLASS_ARK_TS_HEAP,
67     MEMORY_CLASS_DB,
68     MEMORY_CLASS_DEV,
69     MEMORY_CLASS_DMABUF,
70     MEMORY_CLASS_GUARD,
71     MEMORY_CLASS_HAP,
72     MEMORY_CLASS_NATIVE_HEAP,
73     MEMORY_CLASS_SO,
74     MEMORY_CLASS_STACK,
75     MEMORY_CLASS_TTF,
76     MEMORY_CLASS_OTHER,
77 };
78 
79 /*
80  * MEMORY_ITEM_ENTITY_xxx corresponding to the type of entity file
81  * MEMORY_ITEM_TYPE_xxx not corresponding to the type of entity file such like heap and stack memory
82  */
83 enum class MemoryItemType {
84     MEMORY_ITEM_ENTITY_DB,
85     MEMORY_ITEM_ENTITY_DB_SHM,
86     MEMORY_ITEM_ENTITY_HAP,
87     MEMORY_ITEM_ENTITY_HSP,
88     MEMORY_ITEM_ENTITY_SO,
89     MEMORY_ITEM_ENTITY_SO1,
90     MEMORY_ITEM_ENTITY_TTF,
91     MEMORY_ITEM_ENTITY_DEV_PARAMETER,
92     MEMORY_ITEM_ENTITY_DEV_OTHER,
93     MEMORY_ITEM_ENTITY_DATA_STORAGE,
94     MEMORY_ITEM_ENTITY_DMABUF,
95     MEMORY_ITEM_ENTITY_OTHER,
96     MEMORY_ITEM_TYPE_ANON_INODE,
97     MEMORY_ITEM_TYPE_ANON_ARKTS_CODE,
98     MEMORY_ITEM_TYPE_ANON_ARKTS_HEAP,
99     MEMORY_ITEM_TYPE_ANON_GUARD,
100     MEMORY_ITEM_TYPE_ANON_BSS,
101     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_BRK,
102     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_JEMALLOC,
103     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_JEMALLOC_META,
104     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_JEMALLOC_TSD,
105     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_META,
106     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_MMAP,
107     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_OTHER,
108     MEMORY_ITEM_TYPE_ANON_SIGNAL_STACK,
109     MEMORY_ITEM_TYPE_ANON_STACK,
110     MEMORY_ITEM_TYPE_ANON_V8,
111     MEMORY_ITEM_TYPE_ANONYMOUS_OTHER,
112     MEMORY_ITEM_TYPE_CONTIGUOUS,
113     MEMORY_ITEM_TYPE_COPAGE,
114     MEMORY_ITEM_TYPE_FILE,
115     MEMORY_ITEM_TYPE_GUARD,
116     MEMORY_ITEM_TYPE_HEAP,
117     MEMORY_ITEM_TYPE_IO,
118     MEMORY_ITEM_TYPE_KSHARE,
119     MEMORY_ITEM_TYPE_MALLOC,
120     MEMORY_ITEM_TYPE_PREHISTORIC,
121     MEMORY_ITEM_TYPE_RESERVE,
122     MEMORY_ITEM_TYPE_SHMM,
123     MEMORY_ITEM_TYPE_STACK,
124     MEMORY_ITEM_TYPE_UNKNOWN,
125     MEMORY_ITEM_TYPE_VNODES,
126     MEMORY_ITEM_TYPE_GRAPH_GL,
127     MEMORY_ITEM_TYPE_GRAPH_GRAPHICS,
128     MEMORY_ITEM_TYPE_OTHER,
129 };
130 
131 struct MemoryItem {
132     MemoryItemType type = MemoryItemType::MEMORY_ITEM_TYPE_OTHER;
133     std::string name;
134     uint64_t rss = 0;
135     uint64_t pss = 0;
136     uint64_t swapPss = 0;
137     uint64_t swap = 0;
138     uint64_t allPss = 0; // pss + swapPass;
139     uint64_t allSwap = 0; // swap + swapPass
140     uint64_t sharedDirty = 0;
141     uint64_t privateDirty = 0;
142     uint64_t sharedClean = 0;
143     uint64_t privateClean = 0;
144     uint64_t iNode = 0;
145     uint64_t size = 0;
146     std::string startAddr;
147     std::string endAddr;
148     std::string permission;
149 
ResetValueMemoryItem150     void ResetValue()
151     {
152         rss = 0;
153         pss = 0;
154         swapPss = 0;
155         swap = 0;
156         allPss = 0;
157         allSwap = 0;
158         sharedDirty = 0;
159         privateDirty = 0;
160         sharedClean = 0;
161         privateClean = 0;
162         iNode = 0;
163         size = 0;
164         startAddr.clear();
165         endAddr.clear();
166         permission.clear();
167         name.clear();
168     }
169 };
170 
171 struct  MemoryDetail {
172     MemoryClass memoryClass = MemoryClass::MEMORY_CLASS_OTHER;
173     uint64_t totalRss = 0;
174     uint64_t totalPss = 0;
175     uint64_t totalAllPss = 0;
176     uint64_t totalAllSwap = 0;
177     uint64_t totalSharedDirty = 0;
178     uint64_t totalPrivateDirty = 0;
179     uint64_t totalSharedClean = 0;
180     uint64_t totalPrivateClean = 0;
181     uint64_t totalSwap = 0;
182     uint64_t totalSwapPss = 0;
183     std::vector<MemoryItem> items;
184 };
185 
186 struct ProcessMemoryDetail {
187     int32_t pid = 0;
188     std::string name;
189     uint64_t totalRss = 0;
190     uint64_t totalPss = 0;
191     uint64_t totalAllPss = 0;
192     uint64_t totalAllSwap = 0;
193     uint64_t totalSharedDirty = 0;
194     uint64_t totalPrivateDirty = 0;
195     uint64_t totalSharedClean = 0;
196     uint64_t totalPrivateClean = 0;
197     uint64_t totalSwap = 0;
198     uint64_t totalSwapPss = 0;
199     std::vector<MemoryDetail> details;
200 };
201 
202 extern "C" {
203 const uint32_t HIAI_MAX_QUERIED_USER_MEMINFO_LIMIT = 256;
204 
205 using AIProcessMem = struct AIProcessMem {
206     int pid = 0;                 // process id
207     int size = 0;                // byte
208 };
209 };
210 } // HiviewDFX
211 } // OHOS
212 #endif // INTERFACES_INNER_API_UNIFIED_COLLECTION_RESOURCE_MEMORY_H
213