/* * Copyright (c) 2021-2024 Huawei Device Co., Ltd. * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef ECMASCRIPT_JS_RUNTIME_OPTIONS_H_ #define ECMASCRIPT_JS_RUNTIME_OPTIONS_H_ #include #include #include #include #include "ecmascript/compiler/assembler/assembler.h" #include "ecmascript/compiler/bc_call_signature.h" #include "ecmascript/mem/mem_common.h" #include "libpandabase/os/file.h" #include "ecmascript/base/number_helper.h" namespace { constexpr size_t DEFAULT_OPT_LEVEL = 3; // 3: default opt level constexpr size_t DEFAULT_REL_MODE = 2; } // namespace // namespace panda { namespace panda::ecmascript { using arg_list_t = std::vector; enum ArkProperties { DEFAULT = -1, // default value 000'0000'0001'0000'0101'1100 -> 0x105c OPTIONAL_LOG = 1, GC_STATS_PRINT = 1 << 1, PARALLEL_GC = 1 << 2, // default enable CONCURRENT_MARK = 1 << 3, // default enable CONCURRENT_SWEEP = 1 << 4, // default enable THREAD_CHECK = 1 << 5, ENABLE_ARKTOOLS = 1 << 6, // default enable ENABLE_SNAPSHOT_SERIALIZE = 1 << 7, ENABLE_SNAPSHOT_DESERIALIZE = 1 << 8, EXCEPTION_BACKTRACE = 1 << 9, GLOBAL_OBJECT_LEAK_CHECK = 1 << 10, GLOBAL_PRIMITIVE_LEAK_CHECK = 1 << 11, ENABLE_IDLE_GC = 1 << 12, // default enable CPU_PROFILER_COLD_START_MAIN_THREAD = 1 << 13, ENABLE_CPU_PROFILER_VM_TAG = 1 << 14, ENABLE_GC_TRACER = 1 << 15, CPU_PROFILER_COLD_START_WORKER_THREAD = 1 << 16, CPU_PROFILER_ANY_TIME_MAIN_THREAD = 1 << 17, CPU_PROFILER_ANY_TIME_WORKER_THREAD = 1 << 18, ENABLE_HEAP_VERIFY = 1 << 19, ENABLE_MICROJOB_TRACE = 1 << 20, // Use DISABLE to adapt to the exsiting ArkProperties in testing scripts. DISABLE_SHARED_CONCURRENT_MARK = 1 << 22, ENABLE_ESM_TRACE = 1 << 24, ENABLE_MODULE_LOG = 1 << 25, ENABLE_SERIALIZATION_TIMEOUT_CHECK = 1 << 26 }; // asm interpreter control parsed option struct AsmInterParsedOption { int handleStart {-1}; int handleEnd {-1}; bool enableAsm {false}; }; extern const std::string PUBLIC_API COMMON_HELP_HEAD_MSG; extern const std::string PUBLIC_API STUB_HELP_HEAD_MSG; extern const std::string PUBLIC_API COMPILER_HELP_HEAD_MSG; extern const std::string PUBLIC_API HELP_OPTION_MSG; enum CommandValues { OPTION_DEFAULT, OPTION_HELP, OPTION_ENABLE_ARK_TOOLS, OPTION_STUB_FILE, OPTION_ENABLE_FORCE_GC, OPTION_FORCE_FULL_GC, OPTION_ENABLE_FORCE_SHARED_GC_FREQUENCY, OPTION_ARK_PROPERTIES, OPTION_ARK_BUNDLENAME, OPTION_GC_THREADNUM, OPTION_GC_LONG_PAUSED_TIME, OPTION_AOT_FILE, OPTION_COMPILER_TARGET_TRIPLE, OPTION_ASM_OPT_LEVEL, OPTION_RELOCATION_MODE, OPTION_MAX_UNMOVABLE_SPACE, OPTION_ENABLE_ASM_INTERPRETER, OPTION_ENABLE_BUILTINS_LAZY, OPTION_ASM_OPCODE_DISABLE_RANGE, OPTION_SERIALIZER_BUFFER_SIZE_LIMIT, OPTION_HEAP_SIZE_LIMIT, OPTION_ENABLE_IC, OPTION_ICU_DATA_PATH, OPTION_STARTUP_TIME, OPTION_COMPILER_LOG_OPT, OPTION_COMPILER_LOG_METHODS, OPTION_COMPILER_TYPE_THRESHOLD, OPTION_ENABLE_RUNTIME_STAT, OPTION_COMPILER_LOG_SNAPSHOT, OPTION_COMPILER_LOG_TIME, OPTION_ENABLE_WORKER, OPTION_COMPILER_TRACE_BC, OPTION_COMPILER_TRACE_DEOPT, OPTION_COMPILER_TRACE_INLINE, OPTION_COMPILER_MAX_INLINE_BYTECODES, OPTION_COMPILER_DEOPT_THRESHOLD, OPTION_COMPILER_STRESS_DEOPT, OPTION_COMPILER_OPT_CODE_PROFILER, OPTION_COMPILER_OPT_BC_RANGE, OPTION_LOG_LEVEL, OPTION_LOG_DEBUG, OPTION_LOG_INFO, OPTION_LOG_WARNING, OPTION_LOG_ERROR, OPTION_LOG_FATAL, OPTION_LOG_COMPONENTS, OPTION_COMPILER_OPT_MAX_METHOD, OPTION_COMPILER_MODULE_METHODS, OPTION_ENTRY_POINT, OPTION_MERGE_ABC, OPTION_ENABLE_CONTEXT, OPTION_COMPILER_OPT_TYPE_LOWERING, OPTION_COMPILER_OPT_EARLY_ELIMINATION, OPTION_COMPILER_OPT_LATER_ELIMINATION, OPTION_COMPILER_THERMAL_LEVEL, OPTION_COMPILER_OPT_VALUE_NUMBERING, OPTION_COMPILER_OPT_INLINING, OPTION_COMPILER_OPT_PGOTYPE, OPTION_COMPILER_OPT_TRACK_FIELD, OPTION_COMPILER_PGO_PROFILER_PATH, OPTION_COMPILER_PGO_HOTNESS_THRESHOLD, OPTION_COMPILER_PGO_SAVE_MIN_INTERVAL, OPTION_ENABLE_PGO_PROFILER, OPTION_PRINT_EXECUTE_TIME, OPTION_SPLIT_ONE, OPTION_ENABLE_EDEN_GC, OPTION_COMPILER_DEVICE_STATE, OPTION_COMPILER_VERIFY_VTABLE, OPTION_COMPILER_SELECT_METHODS, OPTION_COMPILER_SKIP_METHODS, OPTION_TARGET_COMPILER_MODE, OPTION_HAP_PATH, OPTION_HAP_ABC_OFFSET, OPTION_HAP_ABC_SIZE, OPTION_COMPILER_NOCHECK, OPTION_COMPILER_PIPELINE_HOST_AOT, OPTION_FAST_AOT_COMPILE_MODE, OPTION_COMPILER_OPT_LOOP_PEELING, OPTION_COMPILER_OPT_ON_HEAP_CHECK, OPTION_COMPILER_PKG_INFO, OPTION_COMPILER_EXTERNAL_PKG_INFO, OPTION_COMPILER_ENABLE_EXTERNAL_PKG, OPTION_COMPILER_FRAMEWORK_ABC_PATH, OPTION_COMPILER_OPT_ARRAY_BOUNDS_CHECK_ELIMINATION, OPTION_COMPILER_OPT_LOOP_INVARIANT_CODE_MOTION, OPTION_COMPILER_OPT_CONSTANT_FOLDING, OPTION_COMPILER_ENABLE_LEXENV_SPECIALIZATION, OPTION_COMPILER_TRACE_INSTRUCTION_COMBINE, OPTION_COMPILER_TRACE_VALUE_NUMBERING, OPTION_COMPILER_OPT_INSTRUCTIONE_COMBINE, OPTION_COMPILER_OPT_NEW_VALUE_NUMBERING, OPTION_COMPILER_ENABLE_NATIVE_INLINE, OPTION_COMPILER_ENABLE_LOWERING_BUILTIN, OPTION_COMPILER_ENABLE_LITECG, OPTION_COMPILER_ENABLE_JIT, OPTION_COMPILER_ENABLE_OSR, OPTION_COMPILER_JIT_HOTNESS_THRESHOLD, OPTION_COMPILER_JIT_CALL_THRESHOLD, OPTION_COMPILER_OSR_HOTNESS_THRESHOLD, OPTION_COMPILER_FORCE_JIT_COMPILE_MAIN, OPTION_COMPILER_TRACE_JIT, OPTION_COMPILER_ENABLE_JIT_PGO, OPTION_COMPILER_ENABLE_AOT_PGO, OPTION_COMPILER_ENABLE_FRAMEWORK_AOT, OPTION_COMPILER_ENABLE_PROPFILE_DUMP, OPTION_ENABLE_ELEMENTSKIND, OPTION_COMPILER_TYPED_OP_PROFILER, OPTION_COMPILER_OPT_BRANCH_PROFILING, OPTION_TEST_ASSERT, OPTION_COMPILER_METHODS_RANGE, OPTION_COMPILER_CODEGEN_OPT, OPTION_COMPILER_OPT_BC_RANGE_HELP, OPTION_COMPILER_MEMORY_ANALYSIS, OPTION_COMPILER_CHECK_PGO_VERSION, OPTION_COMPILER_OPT_ESCAPE_ANALYSIS, OPTION_COMPILER_TRACE_ESCAPE_ANALYSIS, OPTION_ENABLE_JITFORT, OPTION_CODESIGN_DISABLE, OPTION_ENABLE_ASYNC_COPYTOFORT, OPTION_LAST, OPTION_COMPILER_OPT_INDUCTION_VARIABLE, OPTION_COMPILER_TRACE_INDUCTION_VARIABLE, OPTION_COMPILER_ENABLE_BASELINEJIT, OPTION_COMPILER_BASELINEJIT_HOTNESS_THRESHOLD, OPTION_COMPILER_FORCE_BASELINEJIT_COMPILE_MAIN, OPTION_ENABLE_AOT_CRASH_ESCAPE, OPTION_COMPILER_ENABLE_JIT_FAST_COMPILE, OPTION_COMPILER_BASELINE_PGO, OPTION_SPLIT_TWO, OPTION_ASYNC_LOAD_ABC, OPTION_ASYNC_LOAD_ABC_TEST, OPTION_PGO_TRACE, OPTION_COMPILER_PGO_FORCE_DUMP, OPTION_COMPILER_ENABLE_CONCURRENT, OPTION_COMPILER_OPT_STRING, OPTION_OPEN_ARK_TOOLS, OPTION_COMPILER_OPT_FRAME_STATE_ELIMINATION, OPTION_ENABLE_FORCE_IC, OPTION_COMPILER_ENABLE_PGO_SPACE, }; static_assert(OPTION_SPLIT_ONE == 64); // add new option at the bottom, DO NOT modify this value static_assert(OPTION_SPLIT_TWO == 128); // add new option at the bottom, DO NOT modify this value class PUBLIC_API JSRuntimeOptions { public: JSRuntimeOptions() {} ~JSRuntimeOptions() = default; DEFAULT_COPY_SEMANTIC(JSRuntimeOptions); DEFAULT_MOVE_SEMANTIC(JSRuntimeOptions); bool ParseCommand(const int argc, const char** argv); bool SetDefaultValue(char* argv); bool EnableArkTools() const { return (enableArkTools_) || ((static_cast(arkProperties_) & ArkProperties::ENABLE_ARKTOOLS) != 0); } void SetEnableArkTools(bool value) { enableArkTools_ = value; } bool WasSetEnableArkTools() const { return WasOptionSet(OPTION_ENABLE_ARK_TOOLS); } bool IsOpenArkTools() const { return openArkTools_; } void SetOpenArkTools(bool value) { openArkTools_ = value; } bool WasSetOpenArkTools() const { return WasOptionSet(OPTION_OPEN_ARK_TOOLS); } bool IsEnableRuntimeStat() const { return enableRuntimeStat_; } void SetEnableRuntimeStat(bool value) { enableRuntimeStat_ = value; } bool WasSetEnableRuntimeStat() const { return WasOptionSet(OPTION_ENABLE_RUNTIME_STAT); } std::string GetStubFile() const { return stubFile_; } void SetStubFile(std::string value) { stubFile_ = std::move(value); } void SetCompilerPkgJsonInfo(std::string pkgJsonInfo) { compilerPkgInfo_ = std::move(pkgJsonInfo); } const std::string& GetCompilerPkgJsonInfo() const { return compilerPkgInfo_; } void SetCompilerExternalPkgJsonInfo(std::string pkgJsonInfo) { compilerExternalPkgInfo_ = std::move(pkgJsonInfo); } const std::string& GetCompilerExternalPkgJsonInfo() const { return compilerExternalPkgInfo_; } void SetCompilerEnableExternalPkg(bool compilerEnableExternalPkg) { compilerEnableExternalPkg_ = compilerEnableExternalPkg; } bool GetCompilerEnableExternalPkg() const { return compilerEnableExternalPkg_; } bool WasStubFileSet() const { return WasOptionSet(OPTION_STUB_FILE); } void SetEnableAOT(bool value) { enableAOT_ = value; } bool GetEnableAOT() const { return enableAOT_; } std::string GetAOTOutputFile() const { return aotOutputFile_; } void SetAOTOutputFile(const std::string& value) { aotOutputFile_ = panda::os::file::File::GetExtendedFilePath(value); } bool WasAOTOutputFileSet() const { return WasOptionSet(OPTION_AOT_FILE); } std::string GetTargetTriple() const { return targetTriple_; } void SetTargetTriple(std::string value) { targetTriple_ = std::move(value); } size_t GetOptLevel() const { return asmOptLevel_; } void SetOptLevel(size_t value) { asmOptLevel_ = value; } size_t GetRelocMode() const { return relocationMode_; } void SetRelocMode(size_t value) { relocationMode_ = value; } bool EnableForceGC() const { return enableForceGc_; } void SetEnableForceGC(bool value) { enableForceGc_ = value; } bool EnableEdenGC() const { return enableEdenGC_; } void SetEnableEdenGC(bool value) { enableEdenGC_ = value; } bool ForceFullGC() const { return forceFullGc_; } void SetForceFullGC(bool value) { forceFullGc_ = value; } void SetForceSharedGCFrequency(size_t frequency) { forceSharedGc_ = frequency; } uint32_t GetForceSharedGCFrequency() const { return forceSharedGc_; } void SetGcThreadNum(size_t num) { gcThreadNum_ = num; } size_t GetGcThreadNum() const { return gcThreadNum_; } void SetLongPauseTime(size_t time) { longPauseTime_ = time; } size_t GetLongPauseTime() const { return longPauseTime_; } void SetArkProperties(int prop) { if (prop != ArkProperties::DEFAULT) { arkProperties_ = prop; } } void SetArkBundleName(std::string bundleName) { if (bundleName != "") { arkBundleName_ = bundleName; } } void SetMemConfigProperty(std::string configProperty) { if (configProperty != "") { std::string key; std::string value; for (char c: configProperty) { if (isdigit(c)) { value += c; } else { key += c; } } if (key == "jsHeap") { heapSize_ = static_cast(stoi(value)) * 1_MB; } if (key == "openArkTools") { openArkTools_ = true; } } } size_t GetHeapSize() const { return heapSize_; } int GetDefaultProperties() { return ArkProperties::PARALLEL_GC | ArkProperties::CONCURRENT_MARK | ArkProperties::CONCURRENT_SWEEP | ArkProperties::ENABLE_ARKTOOLS | ArkProperties::ENABLE_IDLE_GC; } int GetArkProperties() { return arkProperties_; } std::string GetArkBundleName() const { return arkBundleName_; } bool EnableOptionalLog() const { return (static_cast(arkProperties_) & ArkProperties::OPTIONAL_LOG) != 0; } bool EnableGCStatsPrint() const { return (static_cast(arkProperties_) & ArkProperties::GC_STATS_PRINT) != 0; } bool EnableParallelGC() const { return (static_cast(arkProperties_) & ArkProperties::PARALLEL_GC) != 0; } bool EnableConcurrentMark() const { return (static_cast(arkProperties_) & ArkProperties::CONCURRENT_MARK) != 0; } bool EnableSharedConcurrentMark() const { // Use DISABLE to adapt to the exsiting ArkProperties in testing scripts. return (static_cast(arkProperties_) & ArkProperties::DISABLE_SHARED_CONCURRENT_MARK) == 0; } bool EnableExceptionBacktrace() const { return (static_cast(arkProperties_) & ArkProperties::EXCEPTION_BACKTRACE) != 0; } bool EnableConcurrentSweep() const { return (static_cast(arkProperties_) & ArkProperties::CONCURRENT_SWEEP) != 0; } bool EnableThreadCheck() const { return (static_cast(arkProperties_) & ArkProperties::THREAD_CHECK) != 0; } bool EnableIdleGC() const { return false; } bool EnableGCTracer() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_GC_TRACER) != 0; } bool EnableGlobalObjectLeakCheck() const { return (static_cast(arkProperties_) & ArkProperties::GLOBAL_OBJECT_LEAK_CHECK) != 0; } bool EnableGlobalPrimitiveLeakCheck() const { return (static_cast(arkProperties_) & ArkProperties::GLOBAL_PRIMITIVE_LEAK_CHECK) != 0; } bool EnableGlobalLeakCheck() const { return EnableGlobalObjectLeakCheck() || EnableGlobalPrimitiveLeakCheck(); } bool EnableCpuProfilerColdStartMainThread() const { return (static_cast(arkProperties_) & ArkProperties::CPU_PROFILER_COLD_START_MAIN_THREAD) != 0; } bool EnableCpuProfilerColdStartWorkerThread() const { return (static_cast(arkProperties_) & ArkProperties::CPU_PROFILER_COLD_START_WORKER_THREAD) != 0; } bool EnableCpuProfilerAnyTimeMainThread() const { return (static_cast(arkProperties_) & ArkProperties::CPU_PROFILER_ANY_TIME_MAIN_THREAD) != 0; } bool EnableCpuProfilerAnyTimeWorkerThread() const { return (static_cast(arkProperties_) & ArkProperties::CPU_PROFILER_ANY_TIME_WORKER_THREAD) != 0; } bool EnableCpuProfilerVMTag() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_CPU_PROFILER_VM_TAG) != 0; } bool IsStartGlobalLeakCheck() const { return startGlobalLeakCheck_; } void SwitchStartGlobalLeakCheck() { startGlobalLeakCheck_ = !startGlobalLeakCheck_; } bool EnableSnapshotSerialize() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_SNAPSHOT_SERIALIZE) != 0; } bool EnableSnapshotDeserialize() const { if (WIN_OR_MAC_OR_IOS_PLATFORM) { return false; } return (static_cast(arkProperties_) & ArkProperties::ENABLE_SNAPSHOT_DESERIALIZE) != 0; } bool EnableHeapVerify() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_HEAP_VERIFY) != 0; } bool EnableMicroJobTrace() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_MICROJOB_TRACE) != 0; } bool EnableESMTrace() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_ESM_TRACE) != 0; } bool EnableModuleLog() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_MODULE_LOG) != 0; } bool EnableSerializationTimeoutCheck() const { return (static_cast(arkProperties_) & ArkProperties::ENABLE_SERIALIZATION_TIMEOUT_CHECK) != 0; } bool WasSetMaxNonmovableSpaceCapacity() const { return WasOptionSet(OPTION_MAX_UNMOVABLE_SPACE); } size_t MaxNonmovableSpaceCapacity() const { return maxNonmovableSpaceCapacity_; } void SetMaxNonmovableSpaceCapacity(uint32_t value) { maxNonmovableSpaceCapacity_ = value; } void SetEnableAsmInterpreter(bool value) { enableAsmInterpreter_ = value; } bool GetEnableAsmInterpreter() const { return enableAsmInterpreter_; } void SetEnableBuiltinsLazy(bool value) { enableBuiltinsLazy_ = value; } bool GetEnableBuiltinsLazy() const { return enableBuiltinsLazy_; } void SetAsmOpcodeDisableRange(std::string value) { asmOpcodeDisableRange_ = std::move(value); } void SetDisableCodeSign(bool value) { disableCodeSign_ = value; } bool GetDisableCodeSign() const { return disableCodeSign_; } void SetEnableJitFort(bool value) { enableJitFort_ = value; } bool GetEnableJitFort() const { return enableJitFort_; } void SetEnableAsyncCopyToFort(bool value) { enableAsyncCopyToFort_ = value; } bool GetEnableAsyncCopyToFort() const { return enableAsyncCopyToFort_; } void ParseAsmInterOption() { asmInterParsedOption_.enableAsm = enableAsmInterpreter_; std::string strAsmOpcodeDisableRange = asmOpcodeDisableRange_; if (strAsmOpcodeDisableRange.empty()) { return; } // asm interpreter handle disable range size_t pos = strAsmOpcodeDisableRange.find(","); if (pos != std::string::npos) { std::string strStart = strAsmOpcodeDisableRange.substr(0, pos); std::string strEnd = strAsmOpcodeDisableRange.substr(pos + 1); int64_t inputStart; int64_t inputEnd; if (!base::NumberHelper::StringToInt64(strStart, inputStart)) { inputStart = 0; LOG_ECMA_IF(!strStart.empty(), INFO) << "when get start, strStart is " << strStart; } if (!base::NumberHelper::StringToInt64(strEnd, inputEnd)) { inputEnd = kungfu::BYTECODE_STUB_END_ID; LOG_ECMA_IF(!strEnd.empty(), INFO) << "when get end, strEnd is " << strEnd; } int start = static_cast(inputStart); int end = static_cast(inputEnd); if (start >= 0 && start < kungfu::BytecodeStubCSigns::NUM_OF_ALL_NORMAL_STUBS && end >= 0 && end < kungfu::BytecodeStubCSigns::NUM_OF_ALL_NORMAL_STUBS && start <= end) { asmInterParsedOption_.handleStart = start; asmInterParsedOption_.handleEnd = end; } } } AsmInterParsedOption GetAsmInterParsedOption() const { return asmInterParsedOption_; } std::string GetCompilerLogOption() const { return compilerLogOpt_; } void SetCompilerLogOption(std::string value) { compilerLogOpt_ = std::move(value); } bool WasSetCompilerLogOption() const { return WasOptionSet(OPTION_COMPILER_LOG_OPT) && GetCompilerLogOption().find("none") == std::string::npos; } std::string GetMethodsListForLog() const { return compilerLogMethods_; } void SetMethodsListForLog(std::string value) { compilerLogMethods_ = std::move(value); } bool WasSetMethodsListForLog() const { return WasOptionSet(OPTION_COMPILER_LOG_METHODS) && GetCompilerLogOption().find("none") == std::string::npos && GetCompilerLogOption().find("all") == std::string::npos; } void SetCompilerLogSnapshot(bool value) { compilerLogSnapshot_ = value; } bool IsEnableCompilerLogSnapshot() const { return compilerLogSnapshot_; } bool WasSetCompilerLogSnapshot() const { return WasOptionSet(OPTION_COMPILER_LOG_SNAPSHOT); } void SetCompilerLogTime(bool value) { compilerLogTime_ = value; } bool IsEnableCompilerLogTime() const { return compilerLogTime_; } bool WasSetCompilerLogTime() const { return WasOptionSet(OPTION_COMPILER_LOG_TIME); } uint64_t GetSerializerBufferSizeLimit() const { return serializerBufferSizeLimit_; } void SetSerializerBufferSizeLimit(uint64_t value) { serializerBufferSizeLimit_ = value; } uint32_t GetHeapSizeLimit() const { return heapSizeLimit_; } void SetHeapSizeLimit(uint32_t value) { heapSizeLimit_ = value; } bool WasSetHeapSizeLimit() const { return WasOptionSet(OPTION_HEAP_SIZE_LIMIT); } void SetIsWorker(bool isWorker) { isWorker_ = isWorker; } void SetIsRestrictedWorker(bool isRestrictedWorker) { isRestrictedWorker_ = isRestrictedWorker; } bool IsWorker() const { return isWorker_; } bool IsRestrictedWorker() const { return isRestrictedWorker_; } bool EnableIC() const { return enableIC_; } void SetEnableIC(bool value) { enableIC_ = value; } bool WasSetEnableIC() const { return WasOptionSet(OPTION_ENABLE_IC); } std::string GetIcuDataPath() const { return icuDataPath_; } void SetIcuDataPath(std::string value) { icuDataPath_ = std::move(value); } bool WasSetIcuDataPath() const { return WasOptionSet(OPTION_ICU_DATA_PATH); } bool IsStartupTime() const { return startupTime_; } void SetStartupTime(bool value) { startupTime_ = value; } bool WasSetStartupTime() const { return WasOptionSet(OPTION_STARTUP_TIME); } void SetTraceBc(bool value) { traceBc_ = value; } bool IsTraceBC() const { return traceBc_; } bool WasSetTraceBc() const { return WasOptionSet(OPTION_COMPILER_TRACE_BC); } std::string GetLogLevel() const { return logLevel_; } void SetLogLevel(std::string value) { logLevel_ = std::move(value); } bool WasSetLogLevel() const { return WasOptionSet(OPTION_LOG_LEVEL); } arg_list_t GetLogComponents() const { return logComponents_; } void SetLogComponents(arg_list_t value) { logComponents_ = std::move(value); } bool WasSetLogComponents() const { return WasOptionSet(OPTION_LOG_COMPONENTS); } arg_list_t GetLogDebug() const { return logDebug_; } void SetLogDebug(arg_list_t value) { logDebug_ = std::move(value); } bool WasSetLogDebug() const { return WasOptionSet(OPTION_LOG_DEBUG); } arg_list_t GetLogInfo() const { return logInfo_; } void SetLogInfo(arg_list_t value) { logInfo_ = std::move(value); } bool WasSetLogInfo() const { return WasOptionSet(OPTION_LOG_INFO); } arg_list_t GetLogWarning() const { return logWarning_; } void SetLogWarning(arg_list_t value) { logWarning_ = std::move(value); } bool WasSetLogWarning() const { return WasOptionSet(OPTION_LOG_WARNING); } arg_list_t GetLogError() const { return logError_; } void SetLogError(arg_list_t value) { logError_ = std::move(value); } bool WasSetLogError() const { return WasOptionSet(OPTION_LOG_ERROR); } arg_list_t GetLogFatal() const { return logFatal_; } void SetLogFatal(arg_list_t value) { logFatal_ = std::move(value); } bool WasSetLogFatal() const { return WasOptionSet(OPTION_LOG_FATAL); } size_t GetMaxAotMethodSize() const { return maxAotMethodSize_; } void SetMaxAotMethodSize(uint32_t value) { maxAotMethodSize_ = value; } double GetTypeThreshold() const { return typeThreshold_; } void SetTypeThreshold(double threshold) { typeThreshold_ = threshold; } std::string GetEntryPoint() const { return entryPoint_; } void SetEntryPoint(std::string value) { entryPoint_ = std::move(value); } bool WasSetEntryPoint() const { return WasOptionSet(OPTION_ENTRY_POINT); } bool GetMergeAbc() const { return mergeAbc_; } void SetMergeAbc(bool value) { mergeAbc_ = value; } void SetEnableContext(bool value) { enableContext_ = value; } bool IsEnableContext() const { return enableContext_; } void SetEnablePrintExecuteTime(bool value) { enablePrintExecuteTime_ = value; } bool IsEnablePrintExecuteTime() const { return enablePrintExecuteTime_; } void SetEnableElementsKind(bool value) { enableElementsKind_ = value; } bool IsEnableElementsKind() const { return enableElementsKind_; } void SetEnableForceIC(bool value) { enableForceIC_ = value; } bool IsEnableForceIC() const { return enableForceIC_; } void SetEnablePGOProfiler(bool value) { enablePGOProfiler_ = value; } bool IsEnablePGOProfiler() const { return enablePGOProfiler_; } uint32_t GetPGOHotnessThreshold() const { return pgoHotnessThreshold_; } void SetPGOHotnessThreshold(uint32_t threshold) { pgoHotnessThreshold_ = threshold; } uint32_t GetPGOSaveMinInterval() const { return pgoSaveMinInterval_; } void SetPGOSaveMinInterval(uint32_t value) { pgoSaveMinInterval_ = value; } std::string GetPGOProfilerPath() const { return pgoProfilerPath_; } void SetEnableBaselinePgo(bool value) { enableBaselinePgo_ = value; } bool IsEnableBaselinePgo() const { return enableBaselinePgo_; } void SetPGOProfilerPath(const std::string& value) { pgoProfilerPath_ = panda::os::file::File::GetExtendedFilePath(value); } bool IsPGOProfilerPathEmpty() const { return pgoProfilerPath_.empty(); } void SetEnableTypeLowering(bool value) { enableTypeLowering_ = value; } bool IsEnableArrayBoundsCheckElimination() const { return enableArrayBoundsCheckElimination_; } void SetEnableArrayBoundsCheckElimination(bool value) { enableArrayBoundsCheckElimination_ = value; } bool IsEnableFrameStateElimination() const { return enableFrameStateElimination_; } void SetEnableFrameStateElimination(bool value) { enableFrameStateElimination_ = value; } bool IsEnableTypeLowering() const { return enableTypeLowering_; } void SetEnableEarlyElimination(bool value) { enableEarlyElimination_ = value; } bool IsEnableEarlyElimination() const { return enableEarlyElimination_; } void SetEnableLaterElimination(bool value) { enableLaterElimination_ = value; } bool IsEnableLaterElimination() const { return enableLaterElimination_; } void SetEnableInstrcutionCombine(bool value) { enableInstrcutionCombine = value; } bool IsEnableInstrcutionCombine() const { return enableInstrcutionCombine; } void SetEnableValueNumbering(bool value) { enableValueNumbering_ = value; } bool IsEnableValueNumbering() const { return enableValueNumbering_; } void SetEnableJIT(bool value) { enableFastJIT_ = value; } bool IsEnableJIT() const { return enableFastJIT_; } void SetEnableAPPJIT(bool value) { enableAPPJIT_ = value; } bool IsEnableAPPJIT() const { return enableAPPJIT_; } void SetEnableJitFrame(bool value) { enableJitFrame_ = value; } bool IsEnableJitFrame() const { return enableJitFrame_; } bool IsEnableJitDfxDump() const { return isEnableJitDfxDump_; } void SetEnableJitDfxDump(bool value) { isEnableJitDfxDump_ = value; } void SetEnableOSR(bool value) { enableOSR_ = value; } bool IsEnableOSR() const { return enableOSR_; } void SetJitHotnessThreshold(uint16_t value) { jitHotnessThreshold_ = value; } uint16_t GetJitHotnessThreshold() const { return jitHotnessThreshold_; } void SetJitCallThreshold(uint8_t value) { jitCallThreshold_ = value; } uint8_t GetJitCallThreshold() const { return jitCallThreshold_; } void SetOsrHotnessThreshold(uint16_t value) { osrHotnessThreshold_ = value; } uint16_t GetOsrHotnessThreshold() const { return osrHotnessThreshold_; } void SetForceJitCompileMain(bool value) { forceJitCompileMain_ = value; } bool IsEnableForceJitCompileMain() const { return forceJitCompileMain_; } void SetEnableBaselineJIT(bool value) { enableBaselineJIT_ = value; } bool IsEnableBaselineJIT() const { return enableBaselineJIT_; } void SetBaselineJitHotnessThreshold(uint16_t value) { baselineJitHotnessThreshold_ = value; } uint16_t GetBaselineJitHotnessThreshold() const { return baselineJitHotnessThreshold_; } void SetForceBaselineCompileMain(bool value) { forceBaselineCompileMain_ = value; } bool IsEnableForceBaselineCompileMain() const { return forceBaselineCompileMain_; } void SetEnableNewValueNumbering(bool value) { enableNewValueNumbering_ = value; } bool IsEnableNewValueNumbering() const { return enableNewValueNumbering_; } void SetEnableOptString(bool value) { enableOptString_ = value; } bool IsEnableOptString() const { return enableOptString_; } void SetEnableOptInlining(bool value) { enableOptInlining_ = value; } bool IsEnableOptInlining() const { return enableOptInlining_; } void SetEnableOptPGOType(bool value) { enableOptPGOType_ = value; } bool IsEnableOptPGOType() const { return enableOptPGOType_; } void SetEnableOptTrackField(bool value) { enableOptTrackField_ = value; } bool IsEnableOptTrackField() const { return enableOptTrackField_; } uint32_t GetCompilerModuleMethods() const { return compilerModuleMethods_; } void SetCompilerModuleMethods(uint32_t compilerModuleMethods) { compilerModuleMethods_ = compilerModuleMethods; } void SetTraceDeopt(bool value) { traceDeopt_ = value; } bool GetTraceDeopt() const { return traceDeopt_; } void SetDeoptThreshold(uint8_t value) { deoptThreshold_ = value; } uint32_t GetDeoptThreshold() const { return deoptThreshold_; } void SetStressDeopt(bool value) { stressDeopt_ = value; } bool GetStressDeopt() const { return stressDeopt_; } void SetDeviceState(bool value) { deviceIsScreenOff_ = value; } bool GetDeviceState() const { return deviceIsScreenOff_; } bool WasSetDeviceState() const { return WasOptionSet(OPTION_COMPILER_DEVICE_STATE); } void SetThermalLevel(int32_t level) { deviceThermalLevel_ = level; } int32_t GetThermalLevel() const { return deviceThermalLevel_; } bool WasSetThermalLevel() const { return WasOptionSet(OPTION_COMPILER_THERMAL_LEVEL); } void SetOptCodeProfiler(bool value) { optCodeProfiler_ = value; } bool GetOptCodeProfiler() const { return optCodeProfiler_; } void SetVerifyVTable(bool value) { verifyVTable_ = value; } bool GetVerifyVTable() const { return verifyVTable_; } std::string GetCompilerSelectMethods() const { return compilerSelectMethods_; } void SetCompilerSelectMethods(std::string value) { compilerSelectMethods_ = std::move(value); } std::string GetCompilerSkipMethods() const { return compilerSkipMethods_; } void SetCompilerSkipMethods(std::string value) { compilerSkipMethods_ = std::move(value); } void SetPGOTrace(bool value) { pgoTrace_ = value; } bool GetPGOTrace() const { return pgoTrace_; } void SetTraceInline(bool value) { traceInline_ = value; } bool GetTraceInline() const { return traceInline_; } void SetTraceValueNumbering(bool value) { traceValueNumbering_ = value; } bool GetTraceValueNumbering() const { return traceValueNumbering_; } void SetTraceJIT(bool value) { traceJIT_ = value; } bool GetTraceJIT() const { return traceJIT_; } void SetTraceInstructionCombine(bool value) { traceInstructionCombine_ = value; } bool GetTraceInstructionCombine() const { return traceInstructionCombine_; } void SetMaxInlineBytecodes(size_t value) { maxInlineBytecodes_ = value; } size_t GetMaxInlineBytecodes() { return maxInlineBytecodes_; } void SetCompilerFrameworkAbcPath(std::string frameworkAbcPath) { frameworkAbcPath_ = std::move(frameworkAbcPath); } std::string GetCompilerFrameworkAbcPath() const { return frameworkAbcPath_; } bool WasSetCompilerFrameworkAbcPath() const { return WasOptionSet(OPTION_COMPILER_FRAMEWORK_ABC_PATH); } void SetTargetCompilerMode(std::string mode) { targetCompilerMode_ = std::move(mode); } std::string GetTargetCompilerMode() const { return targetCompilerMode_; } bool IsTargetCompilerMode() const { return IsPartialCompilerMode() || IsFullCompilerMode(); } bool IsPartialCompilerMode() const { return targetCompilerMode_ == "partial"; } bool IsFullCompilerMode() const { return targetCompilerMode_ == "full"; } void SetHapPath(std::string path) { hapPath_ = std::move(path); } std::string GetHapPath() const { return hapPath_; } void SetHapAbcOffset(uint32_t offset) { hapAbcOffset_ = offset; } uint32_t GetHapAbcOffset() const { return hapAbcOffset_; } void SetHapAbcSize(uint32_t size) { hapAbcSize_ = size; } uint32_t GetHapAbcSize() const { return hapAbcSize_; } void SetCompilerNoCheck(bool value) { compilerNoCheck_ = value; } bool IsCompilerNoCheck() const { return compilerNoCheck_; } void SetOptionsForTargetCompilation(); void BindCPUCoreForTargetCompilation(); void SetCompilerPipelineHostAOT(bool value) { compilerPipelineHostAOT_ = value; } bool IsCompilerPipelineHostAOT() const { return compilerPipelineHostAOT_; } void SetFastAOTCompileMode(bool value) { fastAOTCompileMode_ = value; } bool GetFastAOTCompileMode() const { return fastAOTCompileMode_; } void SetEnableOptLoopPeeling(bool value) { enableOptLoopPeeling_ = value; } bool IsEnableOptLoopPeeling() const { return enableOptLoopPeeling_; } void SetEnableOptLoopInvariantCodeMotion(bool value) { enableOptLoopInvariantCodeMotion_ = value; } bool IsEnableOptLoopInvariantCodeMotion() const { return enableOptLoopInvariantCodeMotion_; } bool IsEnableOptConstantFolding() const { return enableOptConstantFolding_; } void SetEnableOptConstantFolding(bool value) { enableOptConstantFolding_ = value; } void SetEnableOptOnHeapCheck(bool value) { enableOptOnHeapCheck_ = value; } bool IsEnableOptOnHeapCheck() const { return enableOptOnHeapCheck_; } bool IsEnableLexenvSpecialization() const { return enableLexenvSpecialization_; } void SetEnableLexenvSpecialization(bool value) { enableLexenvSpecialization_ = value; } bool IsEnableNativeInline() const { return enableNativeInline_; } void SetEnableNativeInline(bool value) { enableNativeInline_ = value; } bool IsEnableLoweringBuiltin() const { return enableLoweringBuiltin_; } void SetEnableLoweringBuiltin(bool value) { enableLoweringBuiltin_ = value; } void SetCompilerEnableLiteCG(bool value) { enableLiteCG_ = value; } bool IsCompilerEnableLiteCG() const { return enableLiteCG_; } void SetTypedOpProfiler(bool value) { enableTypedOpProfiler_ = value; } bool GetTypedOpProfiler() const { return enableTypedOpProfiler_; } bool IsEnableBranchProfiling() const { return enableBranchProfiling_; } void SetEnableBranchProfiling(bool value) { enableBranchProfiling_ = value; } void SetTestAssert(bool value) { testAssert_ = value; } bool GetTestAssert() const { return testAssert_; } void SetCompilerMethodsRange(arg_list_t* argListStr) { compileMethodsRange_.first = std::stoull((*argListStr)[0]); compileMethodsRange_.second = std::stoull((*argListStr)[1]); } const std::pair& GetCompilerMethodsRange() const { return compileMethodsRange_; } void SetCompilerCodegenOptions(arg_list_t argListStr) { compileCodegenOption_ = std::move(argListStr); } const arg_list_t& GetCompilerCodegenOptions() const { return compileCodegenOption_; } void SetOptCodeRange(std::string value) { optBCRange_ = std::move(value); } std::string GetOptCodeRange() const { return optBCRange_; } void SetEnableEscapeAnalysis(bool value) { enableEscapeAnalysis_ = value; } bool IsEnableEscapeAnalysis() const { return enableEscapeAnalysis_; } void SetEnableTraceEscapeAnalysis(bool value) { traceEscapeAnalysis_ = value; } bool GetTraceEscapeAnalysis() const { return traceEscapeAnalysis_; } void SetEnableInductionVariableAnalysis(bool value) { enableInductionVariableAnalysis_ = value; } bool IsEnableInductionVariableAnalysis() const { return enableInductionVariableAnalysis_; } void SetEnableTraceInductionVariableAnalysis(bool value) { traceInductionVariableAnalysis_ = value; } bool GetTraceInductionVariableAnalysis() const { return traceInductionVariableAnalysis_; } void SetEnableMemoryAnalysis(bool value) { enableMemoryAnalysis_ = value; } bool IsEnableMemoryAnalysis() const { return enableMemoryAnalysis_; } void SetCheckPgoVersion(bool value) { checkPgoVersion_ = value; } bool IsCheckPgoVersion() const { return checkPgoVersion_; } void SetEnableJITPGO(bool value) { enableJITPGO_ = value; } bool IsEnableJITPGO() const { return enableJITPGO_; } void SetEnableProfileDump(bool value) { enableProfileDump_ = value; } bool IsEnableProfileDump() const { return enableProfileDump_; } void SetEnableAOTPGO(bool value) { enableAOTPGO_ = value; } bool IsEnableAOTPGO() const { return enableAOTPGO_; } void SetEnableJitFastCompile(bool value) { enableJitFastCompile_ = value; } bool IsEnableJitFastCompile() const { return enableJitFastCompile_; } void SetEnableFrameworkAOT(bool value) { enableFrameworkAOT_ = value; } bool IsEnableFrameworkAOT() const { return enableFrameworkAOT_; } void SetAsyncLoadAbc(bool value) { asyncLoadAbc_ = value; } bool IsAsyncLoadAbc() const { return asyncLoadAbc_; } void SetAsyncLoadAbcTest(bool value) { asyncLoadAbcTest_ = value; } bool IsAsyncLoadAbcTest() const { return asyncLoadAbcTest_; } bool IsPgoForceDump() const { return forceDump_; } void SetPgoForceDump(bool value) { forceDump_ = value; } void SetConcurrentCompile(bool value) { concurrentCompile = value; } bool IsConcurrentCompile() const { return concurrentCompile; } void SetAOTHasException(bool value) { aotHasException_ = value; } bool GetAOTHasException() const { return aotHasException_; } void SetCompilerEnablePgoSpace(bool value) { enablePgoSpace_ = value; } bool IsCompilerEnablePgoSpace() const { return enablePgoSpace_; } public: static constexpr int32_t MAX_APP_COMPILE_METHOD_SIZE = 4_KB; private: static bool StartsWith(const std::string& haystack, const std::string& needle) { return std::equal(needle.begin(), needle.end(), haystack.begin()); } void WasSet(int option) { if (option < OPTION_SPLIT_ONE) { wasSetPartOne_ |= (1ULL << static_cast(option)); } else if (option < OPTION_SPLIT_TWO) { wasSetPartTwo_ |= (1ULL << static_cast(option - OPTION_SPLIT_ONE)); } else { wasSetPartThree_ |= (1ULL << static_cast(option - OPTION_SPLIT_TWO)); } } bool WasOptionSet(int option) const { if (option < OPTION_SPLIT_ONE) { return ((1ULL << static_cast(option)) & wasSetPartOne_) != 0; } else if (option < OPTION_SPLIT_TWO) { return ((1ULL << static_cast(option - OPTION_SPLIT_ONE)) & wasSetPartTwo_) != 0; } return ((1ULL << static_cast(option - OPTION_SPLIT_TWO)) & wasSetPartThree_) != 0; } bool ParseBoolParam(bool* argBool); bool ParseDoubleParam(const std::string& option, double* argDouble); bool ParseIntParam(const std::string& option, int* argInt); bool ParseUint32Param(const std::string& option, uint32_t* argUInt32); bool ParseUint64Param(const std::string& option, uint64_t* argUInt64); void ParseListArgParam(const std::string& option, arg_list_t* argListStr, std::string delimiter); bool enableArkTools_ {true}; bool openArkTools_ {false}; std::string stubFile_ {"stub.an"}; std::string compilerPkgInfo_ {}; std::string compilerExternalPkgInfo_ {}; bool compilerEnableExternalPkg_ {true}; bool enableForceGc_ {true}; bool enableEdenGC_ {false}; bool forceFullGc_ {true}; uint32_t forceSharedGc_ {1}; int32_t deviceThermalLevel_ {0}; int arkProperties_ = GetDefaultProperties(); std::string arkBundleName_ = {""}; size_t heapSize_ = {0}; uint32_t gcThreadNum_ {7}; // 7: default thread num uint32_t longPauseTime_ {40}; // 40: default pause time std::string aotOutputFile_ {""}; std::string targetTriple_ {TARGET_X64}; uint32_t asmOptLevel_ {2}; uint32_t relocationMode_ {2}; // 2: default relocation mode uint32_t maxNonmovableSpaceCapacity_ {4_MB}; bool enableAsmInterpreter_ {true}; bool enableBuiltinsLazy_ {true}; std::string asmOpcodeDisableRange_ {""}; AsmInterParsedOption asmInterParsedOption_; uint64_t serializerBufferSizeLimit_ {2_GB}; uint32_t heapSizeLimit_ {512_MB}; bool enableIC_ {true}; std::string icuDataPath_ {"default"}; bool startupTime_ {false}; std::string compilerLogOpt_ {"none"}; std::string compilerLogMethods_ {"none"}; bool compilerLogSnapshot_ {false}; bool compilerLogTime_ {false}; bool enableRuntimeStat_ {false}; bool isWorker_ {false}; bool isRestrictedWorker_ {false}; bool traceBc_ {false}; std::string logLevel_ {"error"}; arg_list_t logDebug_ {{"all"}}; arg_list_t logInfo_ {{"all"}}; arg_list_t logWarning_ {{"all"}}; arg_list_t logError_ {{"all"}}; arg_list_t logFatal_ {{"all"}}; arg_list_t logComponents_ {{"all"}}; bool enableAOT_ {false}; uint32_t maxAotMethodSize_ {32_KB}; double typeThreshold_ {-1}; std::string entryPoint_ {"_GLOBAL::func_main_0"}; bool mergeAbc_ {false}; bool enableArrayBoundsCheckElimination_ {false}; bool enableFrameStateElimination_ {true}; bool enableTypeLowering_ {true}; bool enableEarlyElimination_ {true}; bool enableLaterElimination_ {true}; bool enableValueNumbering_ {true}; bool enableOptString_ {true}; bool enableElementsKind_ {false}; bool enableForceIC_ {true}; bool enableInstrcutionCombine {true}; bool enableNewValueNumbering_ {true}; bool enableOptInlining_ {true}; bool enableOptPGOType_ {true}; bool enableFastJIT_ {false}; bool enableAPPJIT_ {false}; bool isEnableJitDfxDump_ {false}; bool enableOSR_ {false}; uint16_t jitHotnessThreshold_ {2}; uint8_t jitCallThreshold_ {0}; uint16_t osrHotnessThreshold_ {2}; bool forceJitCompileMain_ {false}; bool enableBaselineJIT_ {false}; uint16_t baselineJitHotnessThreshold_ {1}; bool forceBaselineCompileMain_ {false}; bool enableOptTrackField_ {true}; uint32_t compilerModuleMethods_ {100}; uint64_t wasSetPartOne_ {0}; uint64_t wasSetPartTwo_ {0}; uint64_t wasSetPartThree_ {0}; bool enableContext_ {false}; bool enablePrintExecuteTime_ {false}; bool enablePGOProfiler_ {false}; bool enableJITPGO_ {true}; bool enableAOTPGO_ {true}; bool enableProfileDump_ {true}; bool enableFrameworkAOT_ {false}; uint32_t pgoHotnessThreshold_ {1}; std::string pgoProfilerPath_ {""}; uint32_t pgoSaveMinInterval_ {30}; bool traceDeopt_ {false}; uint8_t deoptThreshold_ {10}; bool stressDeopt_ {false}; bool deviceIsScreenOff_ {true}; bool optCodeProfiler_ {false}; bool startGlobalLeakCheck_ {false}; bool verifyVTable_ {false}; std::string compilerSelectMethods_ {""}; std::string compilerSkipMethods_ {""}; bool pgoTrace_ {false}; bool traceInline_ {false}; bool traceJIT_ {false}; bool traceValueNumbering_ {false}; bool traceInstructionCombine_ {false}; bool compilerPipelineHostAOT_ {false}; size_t maxInlineBytecodes_ {45}; std::string targetCompilerMode_ {""}; std::string frameworkAbcPath_ {""}; std::string hapPath_ {""}; uint32_t hapAbcOffset_ {0}; uint32_t hapAbcSize_ {0}; std::string optBCRange_ {""}; bool compilerNoCheck_ {false}; bool fastAOTCompileMode_ {false}; bool enableOptLoopPeeling_ {true}; bool enableOptConstantFolding_ {true}; bool enableOptOnHeapCheck_ {true}; bool enableOptLoopInvariantCodeMotion_ {false}; bool enableLexenvSpecialization_ {false}; bool enableNativeInline_ {true}; bool enableLoweringBuiltin_ {true}; bool enableLiteCG_ {false}; bool enableTypedOpProfiler_ {false}; bool enableBranchProfiling_ {true}; bool enablePgoSpace_ {false}; bool testAssert_ {false}; std::pair compileMethodsRange_ {0, UINT32_MAX}; arg_list_t compileCodegenOption_ {{""}}; bool enableEscapeAnalysis_ {false}; bool traceEscapeAnalysis_ {false}; bool enableInductionVariableAnalysis_ {false}; bool traceInductionVariableAnalysis_ {false}; bool enableMemoryAnalysis_ {true}; bool checkPgoVersion_ {false}; bool enableJitFastCompile_ {false}; bool enableJitFrame_ {false}; bool disableCodeSign_ {true}; bool enableJitFort_ {true}; bool enableAsyncCopyToFort_ {true}; bool enableBaselinePgo_ {false}; bool asyncLoadAbc_ {true}; bool asyncLoadAbcTest_ {false}; bool forceDump_ {true}; bool concurrentCompile {true}; bool aotHasException_ {false}; }; } // namespace panda::ecmascript #endif // ECMASCRIPT_JS_RUNTIME_OPTIONS_H_