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