1aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin/* 2aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * Copyright (C) 2015 The Android Open Source Project 3aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * 4aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * Licensed under the Apache License, Version 2.0 (the "License"); 5aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * you may not use this file except in compliance with the License. 6aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * You may obtain a copy of the License at 7aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * 8aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * http://www.apache.org/licenses/LICENSE-2.0 9aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * 10aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * Unless required by applicable law or agreed to in writing, software 11aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * distributed under the License is distributed on an "AS IS" BASIS, 12aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * See the License for the specific language governing permissions and 14aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin * limitations under the License. 15aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin */ 16aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 17aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#ifndef ART_RUNTIME_RUNTIME_OPTIONS_H_ 18aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#define ART_RUNTIME_RUNTIME_OPTIONS_H_ 19aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 2088b2b80aed15bb1f931cddd40e44ca525ef10018Vladimir Marko#include "base/variant_map.h" 2188b2b80aed15bb1f931cddd40e44ca525ef10018Vladimir Marko#include "cmdline_types.h" // TODO: don't need to include this file here 22aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 23aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin// Map keys 24aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include <vector> 25aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include <string> 2688b2b80aed15bb1f931cddd40e44ca525ef10018Vladimir Marko#include "base/logging.h" 27aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include "jdwp/jdwp.h" 28e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#include "jit/jit.h" 29e5f13e57ff8fa36342beb33830b3ec5942a61ccaMathieu Chartier#include "jit/jit_code_cache.h" 30aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include "gc/collector_type.h" 31aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include "gc/space/large_object_space.h" 32aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include "profiler_options.h" 33aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include "arch/instruction_set.h" 347617abdb402fd0419daa3eefb2ad059ccbb8b6dbIgor Murashkin#include "verifier/verify_mode.h" 35aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include <stdio.h> 36aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include <stdarg.h> 37aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 38aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkinnamespace art { 39aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 40aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkinclass CompilerCallbacks; 41aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkinclass DexFile; 42aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkinstruct XGcOption; 43aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkinstruct BackgroundGcOption; 44aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkinstruct TestProfilerOptions; 45aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 46aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#define DECLARE_KEY(Type, Name) static const Key<Type> Name 47aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 48aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // Define a key that is usable with a RuntimeArgumentMap. 49aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // This key will *not* work with other subtypes of VariantMap. 50aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin template <typename TValue> 51aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin struct RuntimeArgumentMapKey : VariantMapKey<TValue> { 52aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin RuntimeArgumentMapKey() {} 53aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin explicit RuntimeArgumentMapKey(TValue default_value) 54aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin : VariantMapKey<TValue>(std::move(default_value)) {} 55aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // Don't ODR-use constexpr default values, which means that Struct::Fields 56aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // that are declared 'static constexpr T Name = Value' don't need to have a matching definition. 57aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin }; 58aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 59aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // Defines a type-safe heterogeneous key->value map. 60aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // Use the VariantMap interface to look up or to store a RuntimeArgumentMapKey,Value pair. 61aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // 62aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // Example: 63aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // auto map = RuntimeArgumentMap(); 64aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // map.Set(RuntimeArgumentMap::HeapTargetUtilization, 5.0); 65aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // double *target_utilization = map.Get(RuntimeArgumentMap); 66aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // 67aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin struct RuntimeArgumentMap : VariantMap<RuntimeArgumentMap, RuntimeArgumentMapKey> { 68aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // This 'using' line is necessary to inherit the variadic constructor. 69aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin using VariantMap<RuntimeArgumentMap, RuntimeArgumentMapKey>::VariantMap; 70aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 71aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // Make the next many usages of Key slightly shorter to type. 72aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin template <typename TValue> 73aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin using Key = RuntimeArgumentMapKey<TValue>; 74aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 75aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // List of key declarations, shorthand for 'static const Key<T> Name' 76aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#define RUNTIME_OPTIONS_KEY(Type, Name, ...) static const Key<Type> Name; 77aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#include "runtime_options.def" 78aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin }; 79aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 80aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#undef DECLARE_KEY 81aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 82aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin // using RuntimeOptions = RuntimeArgumentMap; 83aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin} // namespace art 84aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin 85aaebaa0121be3b9d9f13630585304482cbcaeb4bIgor Murashkin#endif // ART_RUNTIME_RUNTIME_OPTIONS_H_ 86