in runtime/parsed_options.cc [61:312]
std::unique_ptr<RuntimeParser> ParsedOptions::MakeParser(bool ignore_unrecognized) {
using M = RuntimeArgumentMap;
std::unique_ptr<RuntimeParser::Builder> parser_builder =
std::unique_ptr<RuntimeParser::Builder>(new RuntimeParser::Builder());
parser_builder->
Define("-Xzygote")
.IntoKey(M::Zygote)
.Define("-help")
.IntoKey(M::Help)
.Define("-showversion")
.IntoKey(M::ShowVersion)
.Define("-Xbootclasspath:_")
.WithType<std::string>()
.IntoKey(M::BootClassPath)
.Define("-Xbootclasspath-locations:_")
.WithType<ParseStringList<':'>>() // std::vector<std::string>, split by :
.IntoKey(M::BootClassPathLocations)
.Define({"-classpath _", "-cp _"})
.WithType<std::string>()
.IntoKey(M::ClassPath)
.Define("-Ximage:_")
.WithType<std::string>()
.IntoKey(M::Image)
.Define("-Xcheck:jni")
.IntoKey(M::CheckJni)
.Define("-Xjniopts:forcecopy")
.IntoKey(M::JniOptsForceCopy)
.Define({"-Xrunjdwp:_", "-agentlib:jdwp=_"})
.WithType<JDWP::JdwpOptions>()
.IntoKey(M::JdwpOptions)
.Define("-Xms_")
.WithType<MemoryKiB>()
.IntoKey(M::MemoryInitialSize)
.Define("-Xmx_")
.WithType<MemoryKiB>()
.IntoKey(M::MemoryMaximumSize)
.Define("-XX:HeapGrowthLimit=_")
.WithType<MemoryKiB>()
.IntoKey(M::HeapGrowthLimit)
.Define("-XX:HeapMinFree=_")
.WithType<MemoryKiB>()
.IntoKey(M::HeapMinFree)
.Define("-XX:HeapMaxFree=_")
.WithType<MemoryKiB>()
.IntoKey(M::HeapMaxFree)
.Define("-XX:NonMovingSpaceCapacity=_")
.WithType<MemoryKiB>()
.IntoKey(M::NonMovingSpaceCapacity)
.Define("-XX:HeapTargetUtilization=_")
.WithType<double>().WithRange(0.1, 0.9)
.IntoKey(M::HeapTargetUtilization)
.Define("-XX:ForegroundHeapGrowthMultiplier=_")
.WithType<double>().WithRange(0.1, 1.0)
.IntoKey(M::ForegroundHeapGrowthMultiplier)
.Define("-XX:ParallelGCThreads=_")
.WithType<unsigned int>()
.IntoKey(M::ParallelGCThreads)
.Define("-XX:ConcGCThreads=_")
.WithType<unsigned int>()
.IntoKey(M::ConcGCThreads)
.Define("-Xss_")
.WithType<Memory<1>>()
.IntoKey(M::StackSize)
.Define("-XX:MaxSpinsBeforeThinLockInflation=_")
.WithType<unsigned int>()
.IntoKey(M::MaxSpinsBeforeThinLockInflation)
.Define("-XX:LongPauseLogThreshold=_") // in ms
.WithType<MillisecondsToNanoseconds>() // store as ns
.IntoKey(M::LongPauseLogThreshold)
.Define("-XX:LongGCLogThreshold=_") // in ms
.WithType<MillisecondsToNanoseconds>() // store as ns
.IntoKey(M::LongGCLogThreshold)
.Define("-XX:DumpGCPerformanceOnShutdown")
.IntoKey(M::DumpGCPerformanceOnShutdown)
.Define("-XX:DumpJITInfoOnShutdown")
.IntoKey(M::DumpJITInfoOnShutdown)
.Define("-XX:IgnoreMaxFootprint")
.IntoKey(M::IgnoreMaxFootprint)
.Define("-XX:LowMemoryMode")
.IntoKey(M::LowMemoryMode)
.Define("-XX:UseTLAB")
.WithValue(true)
.IntoKey(M::UseTLAB)
.Define({"-XX:EnableHSpaceCompactForOOM", "-XX:DisableHSpaceCompactForOOM"})
.WithValues({true, false})
.IntoKey(M::EnableHSpaceCompactForOOM)
.Define("-XX:DumpNativeStackOnSigQuit:_")
.WithType<bool>()
.WithValueMap({{"false", false}, {"true", true}})
.IntoKey(M::DumpNativeStackOnSigQuit)
.Define("-Xusejit:_")
.WithType<bool>()
.WithValueMap({{"false", false}, {"true", true}})
.IntoKey(M::UseJitCompilation)
.Define("-Xjitinitialsize:_")
.WithType<MemoryKiB>()
.IntoKey(M::JITCodeCacheInitialCapacity)
.Define("-Xjitmaxsize:_")
.WithType<MemoryKiB>()
.IntoKey(M::JITCodeCacheMaxCapacity)
.Define("-Xjitthreshold:_")
.WithType<unsigned int>()
.IntoKey(M::JITCompileThreshold)
.Define("-Xjitwarmupthreshold:_")
.WithType<unsigned int>()
.IntoKey(M::JITWarmupThreshold)
.Define("-Xjitosrthreshold:_")
.WithType<unsigned int>()
.IntoKey(M::JITOsrThreshold)
.Define("-Xjitprithreadweight:_")
.WithType<unsigned int>()
.IntoKey(M::JITPriorityThreadWeight)
.Define("-Xjittransitionweight:_")
.WithType<unsigned int>()
.IntoKey(M::JITInvokeTransitionWeight)
.Define("-Xjitsaveprofilinginfo")
.WithValue(true)
.IntoKey(M::JITSaveProfilingInfo)
.Define("-XX:HspaceCompactForOOMMinIntervalMs=_") // in ms
.WithType<MillisecondsToNanoseconds>() // store as ns
.IntoKey(M::HSpaceCompactForOOMMinIntervalsMs)
.Define("-D_")
.WithType<std::vector<std::string>>().AppendValues()
.IntoKey(M::PropertiesList)
.Define("-Xjnitrace:_")
.WithType<std::string>()
.IntoKey(M::JniTrace)
.Define("-Xpatchoat:_")
.WithType<std::string>()
.IntoKey(M::PatchOat)
.Define({"-Xrelocate", "-Xnorelocate"})
.WithValues({true, false})
.IntoKey(M::Relocate)
.Define({"-Xdex2oat", "-Xnodex2oat"})
.WithValues({true, false})
.IntoKey(M::Dex2Oat)
.Define({"-Ximage-dex2oat", "-Xnoimage-dex2oat"})
.WithValues({true, false})
.IntoKey(M::ImageDex2Oat)
.Define("-Xint")
.WithValue(true)
.IntoKey(M::Interpret)
.Define("-Xgc:_")
.WithType<XGcOption>()
.IntoKey(M::GcOption)
.Define("-XX:LargeObjectSpace=_")
.WithType<gc::space::LargeObjectSpaceType>()
.WithValueMap({{"disabled", gc::space::LargeObjectSpaceType::kDisabled},
{"freelist", gc::space::LargeObjectSpaceType::kFreeList},
{"map", gc::space::LargeObjectSpaceType::kMap}})
.IntoKey(M::LargeObjectSpace)
.Define("-XX:LargeObjectThreshold=_")
.WithType<Memory<1>>()
.IntoKey(M::LargeObjectThreshold)
.Define("-XX:BackgroundGC=_")
.WithType<BackgroundGcOption>()
.IntoKey(M::BackgroundGc)
.Define("-XX:+DisableExplicitGC")
.IntoKey(M::DisableExplicitGC)
.Define("-verbose:_")
.WithType<LogVerbosity>()
.IntoKey(M::Verbose)
.Define("-Xlockprofthreshold:_")
.WithType<unsigned int>()
.IntoKey(M::LockProfThreshold)
.Define("-Xstacktracefile:_")
.WithType<std::string>()
.IntoKey(M::StackTraceFile)
.Define("-Xmethod-trace")
.IntoKey(M::MethodTrace)
.Define("-Xmethod-trace-file:_")
.WithType<std::string>()
.IntoKey(M::MethodTraceFile)
.Define("-Xmethod-trace-file-size:_")
.WithType<unsigned int>()
.IntoKey(M::MethodTraceFileSize)
.Define("-Xmethod-trace-stream")
.IntoKey(M::MethodTraceStreaming)
.Define("-Xprofile:_")
.WithType<TraceClockSource>()
.WithValueMap({{"threadcpuclock", TraceClockSource::kThreadCpu},
{"wallclock", TraceClockSource::kWall},
{"dualclock", TraceClockSource::kDual}})
.IntoKey(M::ProfileClock)
.Define("-Xenable-profiler")
.WithType<TestProfilerOptions>()
.AppendValues()
.IntoKey(M::ProfilerOpts) // NOTE: Appends into same key as -Xprofile-*
.Define("-Xprofile-_") // -Xprofile-<key>:<value>
.WithType<TestProfilerOptions>()
.AppendValues()
.IntoKey(M::ProfilerOpts) // NOTE: Appends into same key as -Xenable-profiler
.Define("-Xcompiler:_")
.WithType<std::string>()
.IntoKey(M::Compiler)
.Define("-Xcompiler-option _")
.WithType<std::vector<std::string>>()
.AppendValues()
.IntoKey(M::CompilerOptions)
.Define("-Ximage-compiler-option _")
.WithType<std::vector<std::string>>()
.AppendValues()
.IntoKey(M::ImageCompilerOptions)
.Define("-Xverify:_")
.WithType<verifier::VerifyMode>()
.WithValueMap({{"none", verifier::VerifyMode::kNone},
{"remote", verifier::VerifyMode::kEnable},
{"all", verifier::VerifyMode::kEnable},
{"softfail", verifier::VerifyMode::kSoftFail}})
.IntoKey(M::Verify)
.Define("-XX:NativeBridge=_")
.WithType<std::string>()
.IntoKey(M::NativeBridge)
.Define("-Xzygote-max-boot-retry=_")
.WithType<unsigned int>()
.IntoKey(M::ZygoteMaxFailedBoots)
.Define("-Xno-dex-file-fallback")
.IntoKey(M::NoDexFileFallback)
.Define("-Xno-sig-chain")
.IntoKey(M::NoSigChain)
.Define("--cpu-abilist=_")
.WithType<std::string>()
.IntoKey(M::CpuAbiList)
.Define("-Xfingerprint:_")
.WithType<std::string>()
.IntoKey(M::Fingerprint)
.Define("-Xexperimental:_")
.WithType<ExperimentalFlags>()
.AppendValues()
.IntoKey(M::Experimental)
.Define("-Xforce-nb-testing")
.IntoKey(M::ForceNativeBridge)
.Define("-XOatFileManagerCompilerFilter:_")
.WithType<std::string>()
.IntoKey(M::OatFileManagerCompilerFilter)
.Ignore({
"-ea", "-da", "-enableassertions", "-disableassertions", "--runtime-arg", "-esa",
"-dsa", "-enablesystemassertions", "-disablesystemassertions", "-Xrs", "-Xint:_",
"-Xdexopt:_", "-Xnoquithandler", "-Xjnigreflimit:_", "-Xgenregmap", "-Xnogenregmap",
"-Xverifyopt:_", "-Xcheckdexsum", "-Xincludeselectedop", "-Xjitop:_",
"-Xincludeselectedmethod", "-Xjitthreshold:_",
"-Xjitblocking", "-Xjitmethod:_", "-Xjitclass:_", "-Xjitoffset:_",
"-Xjitconfig:_", "-Xjitcheckcg", "-Xjitverbose", "-Xjitprofile",
"-Xjitdisableopt", "-Xjitsuspendpoll", "-XX:mainThreadStackSize=_"})
.IgnoreUnrecognized(ignore_unrecognized);
// TODO: Move Usage information into this DSL.
return std::unique_ptr<RuntimeParser>(new RuntimeParser(parser_builder->Build()));
}