• 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 MemoryClass {
59     MEMORY_CLASS_GRAPH,
60     MEMORY_CLASS_ARK_TS_HEAP,
61     MEMORY_CLASS_DB,
62     MEMORY_CLASS_DEV,
63     MEMORY_CLASS_DMABUF,
64     MEMORY_CLASS_GUARD,
65     MEMORY_CLASS_HAP,
66     MEMORY_CLASS_NATIVE_HEAP,
67     MEMORY_CLASS_SO,
68     MEMORY_CLASS_STACK,
69     MEMORY_CLASS_TTF,
70     MEMORY_CLASS_OTHER,
71 };
72 
73 /*
74  * MEMORY_ITEM_ENTITY_xxx corresponding to the type of entity file
75  * MEMORY_ITEM_TYPE_xxx not corresponding to the type of entity file such like heap and stack memory
76  */
77 enum class MemoryItemType {
78     MEMORY_ITEM_ENTITY_DB,
79     MEMORY_ITEM_ENTITY_DB_SHM,
80     MEMORY_ITEM_ENTITY_HAP,
81     MEMORY_ITEM_ENTITY_HSP,
82     MEMORY_ITEM_ENTITY_SO,
83     MEMORY_ITEM_ENTITY_SO1,
84     MEMORY_ITEM_ENTITY_TTF,
85     MEMORY_ITEM_ENTITY_DEV_PARAMETER,
86     MEMORY_ITEM_ENTITY_DEV_OTHER,
87     MEMORY_ITEM_ENTITY_DATA_STORAGE,
88     MEMORY_ITEM_ENTITY_DMABUF,
89     MEMORY_ITEM_ENTITY_OTHER,
90     MEMORY_ITEM_TYPE_ANON_INODE,
91     MEMORY_ITEM_TYPE_ANON_ARKTS_CODE,
92     MEMORY_ITEM_TYPE_ANON_ARKTS_HEAP,
93     MEMORY_ITEM_TYPE_ANON_GUARD,
94     MEMORY_ITEM_TYPE_ANON_BSS,
95     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_BRK,
96     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_JEMALLOC,
97     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_JEMALLOC_META,
98     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_JEMALLOC_TSD,
99     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_META,
100     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_MMAP,
101     MEMORY_ITEM_TYPE_ANON_NATIVE_HEAP_OTHER,
102     MEMORY_ITEM_TYPE_ANON_SIGNAL_STACK,
103     MEMORY_ITEM_TYPE_ANON_STACK,
104     MEMORY_ITEM_TYPE_ANON_V8,
105     MEMORY_ITEM_TYPE_ANONYMOUS_OTHER,
106     MEMORY_ITEM_TYPE_CONTIGUOUS,
107     MEMORY_ITEM_TYPE_COPAGE,
108     MEMORY_ITEM_TYPE_FILE,
109     MEMORY_ITEM_TYPE_GUARD,
110     MEMORY_ITEM_TYPE_HEAP,
111     MEMORY_ITEM_TYPE_IO,
112     MEMORY_ITEM_TYPE_KSHARE,
113     MEMORY_ITEM_TYPE_MALLOC,
114     MEMORY_ITEM_TYPE_PREHISTORIC,
115     MEMORY_ITEM_TYPE_RESERVE,
116     MEMORY_ITEM_TYPE_SHMM,
117     MEMORY_ITEM_TYPE_STACK,
118     MEMORY_ITEM_TYPE_UNKNOWN,
119     MEMORY_ITEM_TYPE_VNODES,
120     MEMORY_ITEM_TYPE_GRAPH_GL,
121     MEMORY_ITEM_TYPE_GRAPH_GRAPHICS,
122     MEMORY_ITEM_TYPE_OTHER,
123 };
124 
125 struct MemoryItem {
126     MemoryItemType type = MemoryItemType::MEMORY_ITEM_TYPE_OTHER;
127     std::string name;
128     uint64_t rss = 0;
129     uint64_t pss = 0;
130     uint64_t swapPss = 0;
131     uint64_t swap = 0;
132     uint64_t allPss = 0; // pss + swapPass;
133     uint64_t allSwap = 0; // swap + swapPass
134     uint64_t sharedDirty = 0;
135     uint64_t privateDirty = 0;
136     uint64_t sharedClean = 0;
137     uint64_t privateClean = 0;
138     uint64_t iNode = 0;
139 
ResetValueMemoryItem140     void ResetValue()
141     {
142         rss = 0;
143         pss = 0;
144         swapPss = 0;
145         swap = 0;
146         allPss = 0;
147         allSwap = 0;
148         sharedDirty = 0;
149         privateDirty = 0;
150         sharedClean = 0;
151         privateClean = 0;
152         iNode = 0;
153     }
154 };
155 
156 struct  MemoryDetail {
157     MemoryClass memoryClass = MemoryClass::MEMORY_CLASS_OTHER;
158     uint64_t totalRss = 0;
159     uint64_t totalPss = 0;
160     uint64_t totalAllPss = 0;
161     uint64_t totalAllSwap = 0;
162     uint64_t totalSharedDirty = 0;
163     uint64_t totalPrivateDirty = 0;
164     uint64_t totalSharedClean = 0;
165     uint64_t totalPrivateClean = 0;
166     uint64_t totalSwap = 0;
167     uint64_t totalSwapPss = 0;
168     std::vector<MemoryItem> items;
169 };
170 
171 struct ProcessMemoryDetail {
172     int32_t pid = 0;
173     std::string name;
174     uint64_t totalRss = 0;
175     uint64_t totalPss = 0;
176     uint64_t totalAllPss = 0;
177     uint64_t totalAllSwap = 0;
178     uint64_t totalSharedDirty = 0;
179     uint64_t totalPrivateDirty = 0;
180     uint64_t totalSharedClean = 0;
181     uint64_t totalPrivateClean = 0;
182     uint64_t totalSwap = 0;
183     uint64_t totalSwapPss = 0;
184     std::vector<MemoryDetail> details;
185 };
186 
187 extern "C" {
188 const int HIAI_MAX_QUERIED_USER_MEMINFO_LIMIT = 256;
189 
190 using AIProcessMem = struct AIProcessMem {
191     int pid = 0;                 // process id
192     int size = 0;                // byte
193 };
194 };
195 } // HiviewDFX
196 } // OHOS
197 #endif // INTERFACES_INNER_API_UNIFIED_COLLECTION_RESOURCE_MEMORY_H
198