1 /* 2 * Copyright (c) 2021-2024 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 PANDA_RUNTIME_MEM_MEM_CONFIG_H 17 #define PANDA_RUNTIME_MEM_MEM_CONFIG_H 18 19 #include "macros.h" 20 #include "libpandabase/mem/mem.h" 21 #include "utils/asan_interface.h" 22 23 #include <cstddef> 24 25 namespace ark::mem { 26 27 /// class for global memory parameters 28 class MemConfig { 29 public: Initialize(size_t objectPoolSize,size_t internalSize,size_t compilerSize,size_t codeSize,size_t framesSize,size_t stacksSize,size_t initialObjectPoolSize)30 static void Initialize(size_t objectPoolSize, size_t internalSize, size_t compilerSize, size_t codeSize, 31 size_t framesSize, size_t stacksSize, size_t initialObjectPoolSize) 32 { 33 ASSERT(!isInitialized_); 34 initialHeapSizeLimit_ = initialObjectPoolSize; 35 heapSizeLimit_ = objectPoolSize; 36 internalMemorySizeLimit_ = internalSize; 37 compilerMemorySizeLimit_ = compilerSize; 38 codeCacheSizeLimit_ = codeSize; 39 framesMemorySizeLimit_ = framesSize; 40 nativeStacksMemorySizeLimit_ = stacksSize; 41 isInitialized_ = true; 42 } 43 Initialize(size_t objectPoolSize,size_t internalSize,size_t compilerSize,size_t codeSize,size_t framesSize,size_t stacksSize)44 static void Initialize(size_t objectPoolSize, size_t internalSize, size_t compilerSize, size_t codeSize, 45 size_t framesSize, size_t stacksSize) 46 { 47 Initialize(objectPoolSize, internalSize, compilerSize, codeSize, framesSize, stacksSize, objectPoolSize); 48 } 49 Finalize()50 static void Finalize() 51 { 52 isInitialized_ = false; 53 heapSizeLimit_ = 0; 54 internalMemorySizeLimit_ = 0; 55 codeCacheSizeLimit_ = 0; 56 } 57 GetInitialHeapSizeLimit()58 static size_t GetInitialHeapSizeLimit() 59 { 60 ASSERT(isInitialized_); 61 return initialHeapSizeLimit_; 62 } 63 GetHeapSizeLimit()64 static size_t GetHeapSizeLimit() 65 { 66 ASSERT(isInitialized_); 67 return heapSizeLimit_; 68 } 69 GetInternalMemorySizeLimit()70 static size_t GetInternalMemorySizeLimit() 71 { 72 ASSERT(isInitialized_); 73 return internalMemorySizeLimit_; 74 } 75 GetCodeCacheSizeLimit()76 static size_t GetCodeCacheSizeLimit() 77 { 78 ASSERT(isInitialized_); 79 return codeCacheSizeLimit_; 80 } 81 GetCompilerMemorySizeLimit()82 static size_t GetCompilerMemorySizeLimit() 83 { 84 ASSERT(isInitialized_); 85 return compilerMemorySizeLimit_; 86 } 87 GetFramesMemorySizeLimit()88 static size_t GetFramesMemorySizeLimit() 89 { 90 ASSERT(isInitialized_); 91 return framesMemorySizeLimit_; 92 } 93 GetNativeStacksMemorySizeLimit()94 static size_t GetNativeStacksMemorySizeLimit() 95 { 96 ASSERT(isInitialized_); 97 return nativeStacksMemorySizeLimit_; 98 } 99 100 MemConfig() = delete; 101 102 ~MemConfig() = delete; 103 104 NO_COPY_SEMANTIC(MemConfig); 105 NO_MOVE_SEMANTIC(MemConfig); 106 107 private: 108 PANDA_PUBLIC_API static bool isInitialized_; 109 PANDA_PUBLIC_API static size_t initialHeapSizeLimit_; // Initial heap size 110 PANDA_PUBLIC_API static size_t heapSizeLimit_; // Max heap size 111 PANDA_PUBLIC_API static size_t internalMemorySizeLimit_; // Max internal memory used by the VM 112 PANDA_PUBLIC_API static size_t codeCacheSizeLimit_; // The limit for compiled code size. 113 PANDA_PUBLIC_API static size_t compilerMemorySizeLimit_; // Max memory used by compiler 114 PANDA_PUBLIC_API static size_t framesMemorySizeLimit_; // Max memory used for frames 115 PANDA_PUBLIC_API static size_t nativeStacksMemorySizeLimit_; // Limit for manually (i.e. not by OS means on 116 // thread creation) allocated native stacks 117 }; 118 119 } // namespace ark::mem 120 121 #endif // PANDA_RUNTIME_MEM_MEM_CONFIG_H 122