• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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