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