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