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" 23namespace panda { 24namespace 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(SuspendAll) \ 42 V(ResumeAll) \ 43 V(ProceeWorkload) \ 44 V(UpdateRoot) \ 45 V(UpdateWeekRef) \ 46 V(EvacuateRegion) \ 47 V(WaitFinish) 48 49#define RECORD_DATA(V) \ 50 V(START_OBJ_SIZE) \ 51 V(END_OBJ_SIZE) \ 52 V(START_COMMIT_SIZE) \ 53 V(END_COMMIT_SIZE) \ 54 V(START_EDEN_OBJ_SIZE) \ 55 V(START_YOUNG_OBJ_SIZE) \ 56 V(SEMI_ALIVE_SIZE) \ 57 V(SEMI_COMMIT_SIZE) \ 58 V(SEMI_PROMOTE_SIZE) \ 59 V(EDEN_ALIVE_SIZE) \ 60 V(EDEN_COMMIT_SIZE) \ 61 V(EDEN_PROMOTE_SIZE) \ 62 V(YOUNG_ALIVE_SIZE) \ 63 V(YOUNG_COMMIT_SIZE) \ 64 V(YOUNG_PROMOTE_SIZE) \ 65 V(OLD_ALIVE_SIZE) \ 66 V(OLD_COMMIT_SIZE) \ 67 V(COMPRESS_ALIVE_SIZE) \ 68 V(COMPRESS_COMMIT_SIZE) \ 69 V(START_NATIVE_POINTER_NUM) \ 70 V(COLLECT_REGION_SET_SIZE) \ 71 SEMI_RECORD_DATA(V) \ 72 PARTIAL_RECORD_DATA(V) \ 73 FULL_RECORD_DATA(V) \ 74 SHARED_RECORD_DATA(V) 75 76#define RECORD_DURATION(V) \ 77 V(SEMI_MIN_PAUSE) \ 78 V(SEMI_MAX_PAUSE) \ 79 V(SEMI_TOTAL_PAUSE) \ 80 V(EDEN_MIN_PAUSE) \ 81 V(EDEN_MAX_PAUSE) \ 82 V(EDEN_TOTAL_PAUSE) \ 83 V(YOUNG_MIN_PAUSE) \ 84 V(YOUNG_MAX_PAUSE) \ 85 V(YOUNG_TOTAL_PAUSE) \ 86 V(OLD_MIN_PAUSE) \ 87 V(OLD_MAX_PAUSE) \ 88 V(OLD_TOTAL_PAUSE) \ 89 V(COMPRESS_MIN_PAUSE) \ 90 V(COMPRESS_MAX_PAUSE) \ 91 V(COMPRESS_TOTAL_PAUSE) \ 92 V(SHARED_MIN_PAUSE) \ 93 V(SHARED_MAX_PAUSE) \ 94 V(SHARED_TOTAL_PAUSE) 95 96#define SEMI_RECORD_DATA(V) \ 97 V(SEMI_COUNT) \ 98 V(SEMI_TOTAL_ALIVE) \ 99 V(SEMI_TOTAL_COMMIT) \ 100 V(SEMI_TOTAL_PROMOTE) 101 102#define PARTIAL_RECORD_DATA(V) \ 103 V(EDEN_COUNT) \ 104 V(EDEN_TOTAL_ALIVE) \ 105 V(EDEN_TOTAL_COMMIT) \ 106 V(EDEN_TOTAL_PROMOTE) \ 107 V(YOUNG_COUNT) \ 108 V(YOUNG_TOTAL_ALIVE) \ 109 V(YOUNG_TOTAL_COMMIT) \ 110 V(YOUNG_TOTAL_PROMOTE) \ 111 V(OLD_COUNT) \ 112 V(OLD_TOTAL_ALIVE) \ 113 V(OLD_TOTAL_COMMIT) 114 115#define FULL_RECORD_DATA(V) \ 116 V(COMPRESS_COUNT) \ 117 V(COMPRESS_TOTAL_ALIVE) \ 118 V(COMPRESS_TOTAL_COMMIT) 119 120#define SHARED_RECORD_DATA(V) \ 121 V(SHARED_COUNT) \ 122 V(SHARED_ALIVE_SIZE) \ 123 V(SHARED_TOTAL_ALIVE) \ 124 V(SHARED_COMMIT_SIZE) \ 125 V(SHARED_TOTAL_COMMIT) 126 127#define TRACE_GC_SPEED(V) \ 128 V(UPDATE_REFERENCE_SPEED) \ 129 V(OLD_CLEAR_NATIVE_OBJ_SPEED) \ 130 V(OLD_EVACUATE_SPACE_SPEED) \ 131 V(EDEN_CLEAR_NATIVE_OBJ_SPEED) \ 132 V(EDEN_UPDATE_REFERENCE_SPEED) \ 133 V(EDEN_EVACUATE_SPACE_SPEED) \ 134 V(YOUNG_CLEAR_NATIVE_OBJ_SPEED) \ 135 V(YOUNG_UPDATE_REFERENCE_SPEED) \ 136 V(YOUNG_EVACUATE_SPACE_SPEED) \ 137 V(MARK_SPEED) \ 138 V(SWEEP_SPEED) 139 140constexpr uint32_t NUM_MANDATORY_JSFUNC_ARGS = 3; 141constexpr uint32_t INVALID_INDEX = std::numeric_limits<uint32_t>::max(); 142 143using Address = uintptr_t; 144 145#define PUBLIC_API PANDA_PUBLIC_API 146 147#ifdef NDEBUG 148#define DUMP_API_ATTR __attribute__((unused)) 149#else 150#ifndef PANDA_TARGET_WINDOWS 151#define DUMP_API_ATTR __attribute__((visibility ("default"), used)) 152#else 153#define DUMP_API_ATTR __attribute__((unused)) 154#endif 155#endif 156 157#ifdef PANDA_TARGET_32 158#define STATIC_ASSERT_EQ_ARCH32(a, b) static_assert(a == b) 159#else 160#define STATIC_ASSERT_EQ_ARCH32(a, b) static_assert(true) 161#endif 162 163#ifdef PANDA_TARGET_64 164#define STATIC_ASSERT_EQ_ARCH64(a, b) static_assert(a == b) 165#else 166#define STATIC_ASSERT_EQ_ARCH64(a, b) static_assert(true) 167#endif 168 169#if defined(PANDA_TARGET_WINDOWS) || defined(PANDA_TARGET_MACOS) || defined(PANDA_TARGET_IOS) 170#define WIN_OR_MAC_OR_IOS_PLATFORM true 171#else 172#define WIN_OR_MAC_OR_IOS_PLATFORM false 173#endif 174 175#define STATIC_ASSERT_EQ_ARCH(expect, valueArch32, valueArch64) \ 176 STATIC_ASSERT_EQ_ARCH32(expect, valueArch32); \ 177 STATIC_ASSERT_EQ_ARCH64(expect, valueArch64) 178} // namespace ecmascript 179} // namespace panda 180 181#endif // ECMASCRIPT_COMMON_H 182