• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 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 ECMASCRIPT_COMMON_H
17 #define ECMASCRIPT_COMMON_H
18 
19 #include <limits>
20 
21 #include "libpandabase/macros.h"
22 #include "ecmascript/common_enum.h"
23 namespace panda {
24 namespace ecmascript {
25 
26 #define SCOPE_LIST(V)                    \
27     V(TotalGC)                           \
28     V(Initialize)                        \
29     V(ConcurrentMark)                    \
30     V(WaitConcurrentMarkFinished)        \
31     V(ReMark)                            \
32     V(Mark)                              \
33     V(MarkRoots)                         \
34     V(ProcessSharedGCRSetWorkList)       \
35     V(Sweep)                             \
36     V(ClearNativeObject)                 \
37     V(Evacuate)                          \
38     V(Finish)                            \
39     V(UpdateReference)                   \
40     V(EvacuateSpace)                     \
41     V(SweepNewToOldRegions)              \
42     V(Finalize)                          \
43     V(SuspendAll)                        \
44     V(ResumeAll)                         \
45     V(ProceeWorkload)                    \
46     V(UpdateRoot)                        \
47     V(UpdateWeekRef)                     \
48     V(EvacuateRegion)                    \
49     V(WaitFinish)                        \
50     V(InvokeNativeFinalizeCallbacks)
51 
52 #define RECORD_DATA(V)                   \
53     V(START_OBJ_SIZE)                    \
54     V(END_OBJ_SIZE)                      \
55     V(START_COMMIT_SIZE)                 \
56     V(END_COMMIT_SIZE)                   \
57     V(START_YOUNG_OBJ_SIZE)              \
58     V(SEMI_ALIVE_SIZE)                   \
59     V(SEMI_COMMIT_SIZE)                  \
60     V(SEMI_PROMOTE_SIZE)                 \
61     V(YOUNG_ALIVE_SIZE)                  \
62     V(YOUNG_COMMIT_SIZE)                 \
63     V(YOUNG_PROMOTE_SIZE)                \
64     V(OLD_ALIVE_SIZE)                    \
65     V(OLD_COMMIT_SIZE)                   \
66     V(COMPRESS_ALIVE_SIZE)               \
67     V(COMPRESS_COMMIT_SIZE)              \
68     V(START_NATIVE_POINTER_NUM)          \
69     V(COLLECT_REGION_SET_SIZE)           \
70     SEMI_RECORD_DATA(V)                  \
71     PARTIAL_RECORD_DATA(V)               \
72     FULL_RECORD_DATA(V)                  \
73     SHARED_RECORD_DATA(V)
74 
75 #define RECORD_DURATION(V)               \
76     V(SEMI_MIN_PAUSE)                    \
77     V(SEMI_MAX_PAUSE)                    \
78     V(SEMI_TOTAL_PAUSE)                  \
79     V(YOUNG_MIN_PAUSE)                   \
80     V(YOUNG_MAX_PAUSE)                   \
81     V(YOUNG_TOTAL_PAUSE)                 \
82     V(OLD_MIN_PAUSE)                     \
83     V(OLD_MAX_PAUSE)                     \
84     V(OLD_TOTAL_PAUSE)                   \
85     V(COMPRESS_MIN_PAUSE)                \
86     V(COMPRESS_MAX_PAUSE)                \
87     V(COMPRESS_TOTAL_PAUSE)              \
88     V(SHARED_MIN_PAUSE)                  \
89     V(SHARED_MAX_PAUSE)                  \
90     V(SHARED_TOTAL_PAUSE)
91 
92 #define SEMI_RECORD_DATA(V)              \
93     V(SEMI_COUNT)                        \
94     V(SEMI_TOTAL_ALIVE)                  \
95     V(SEMI_TOTAL_COMMIT)                 \
96     V(SEMI_TOTAL_PROMOTE)
97 
98 #define PARTIAL_RECORD_DATA(V)           \
99     V(YOUNG_COUNT)                       \
100     V(YOUNG_TOTAL_ALIVE)                 \
101     V(YOUNG_TOTAL_COMMIT)                \
102     V(YOUNG_TOTAL_PROMOTE)               \
103     V(OLD_COUNT)                         \
104     V(OLD_TOTAL_ALIVE)                   \
105     V(OLD_TOTAL_COMMIT)
106 
107 #define FULL_RECORD_DATA(V)              \
108     V(COMPRESS_COUNT)                    \
109     V(COMPRESS_TOTAL_ALIVE)              \
110     V(COMPRESS_TOTAL_COMMIT)
111 
112 #define SHARED_RECORD_DATA(V)            \
113     V(SHARED_COUNT)                      \
114     V(SHARED_ALIVE_SIZE)                 \
115     V(SHARED_TOTAL_ALIVE)                \
116     V(SHARED_COMMIT_SIZE)                \
117     V(SHARED_TOTAL_COMMIT)
118 
119 #define TRACE_GC_SPEED(V)                \
120     V(UPDATE_REFERENCE_SPEED)            \
121     V(OLD_CLEAR_NATIVE_OBJ_SPEED)        \
122     V(OLD_EVACUATE_SPACE_SPEED)          \
123     V(YOUNG_CLEAR_NATIVE_OBJ_SPEED)      \
124     V(YOUNG_UPDATE_REFERENCE_SPEED)      \
125     V(YOUNG_EVACUATE_SPACE_SPEED)        \
126     V(MARK_SPEED)                        \
127     V(SWEEP_SPEED)
128 
129 constexpr uint32_t NUM_MANDATORY_JSFUNC_ARGS = 3;
130 constexpr uint32_t INVALID_INDEX = std::numeric_limits<uint32_t>::max();
131 
132 using Address = uintptr_t;
133 
134 #define PUBLIC_API PANDA_PUBLIC_API
135 
136 #ifdef NDEBUG
137 #define DUMP_API_ATTR __attribute__((unused))
138 #else
139 #ifndef PANDA_TARGET_WINDOWS
140 #define DUMP_API_ATTR __attribute__((visibility ("default"), used))
141 #else
142 #define DUMP_API_ATTR __attribute__((unused))
143 #endif
144 #endif
145 
146 #ifdef PANDA_TARGET_32
147 #define STATIC_ASSERT_EQ_ARCH32(a, b) static_assert(a == b)
148 #else
149 #define STATIC_ASSERT_EQ_ARCH32(a, b) static_assert(true)
150 #endif
151 
152 #ifdef PANDA_TARGET_64
153 #define STATIC_ASSERT_EQ_ARCH64(a, b) static_assert(a == b)
154 #else
155 #define STATIC_ASSERT_EQ_ARCH64(a, b) static_assert(true)
156 #endif
157 
158 #if defined(PANDA_TARGET_WINDOWS) || defined(PANDA_TARGET_MACOS) || defined(PANDA_TARGET_IOS)
159 #define WIN_OR_MAC_OR_IOS_PLATFORM true
160 #else
161 #define WIN_OR_MAC_OR_IOS_PLATFORM false
162 #endif
163 
164 #define STATIC_ASSERT_EQ_ARCH(expect, valueArch32, valueArch64) \
165     STATIC_ASSERT_EQ_ARCH32(expect, valueArch32);               \
166     STATIC_ASSERT_EQ_ARCH64(expect, valueArch64)
167 }  // namespace ecmascript
168 }  // namespace panda
169 
170 #endif  // ECMASCRIPT_COMMON_H
171