1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright 2024 The Android Open Source Project 3*795d594fSAndroid Build Coastguard Worker * 4*795d594fSAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License"); 5*795d594fSAndroid Build Coastguard Worker * you may not use this file except in compliance with the License. 6*795d594fSAndroid Build Coastguard Worker * You may obtain a copy of the License at 7*795d594fSAndroid Build Coastguard Worker * 8*795d594fSAndroid Build Coastguard Worker * http://www.apache.org/licenses/LICENSE-2.0 9*795d594fSAndroid Build Coastguard Worker * 10*795d594fSAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software 11*795d594fSAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS, 12*795d594fSAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*795d594fSAndroid Build Coastguard Worker * See the License for the specific language governing permissions and 14*795d594fSAndroid Build Coastguard Worker * limitations under the License. 15*795d594fSAndroid Build Coastguard Worker */ 16*795d594fSAndroid Build Coastguard Worker 17*795d594fSAndroid Build Coastguard Worker #ifndef ART_RUNTIME_JIT_JIT_OPTIONS_H_ 18*795d594fSAndroid Build Coastguard Worker #define ART_RUNTIME_JIT_JIT_OPTIONS_H_ 19*795d594fSAndroid Build Coastguard Worker 20*795d594fSAndroid Build Coastguard Worker #include "base/macros.h" 21*795d594fSAndroid Build Coastguard Worker #include "base/runtime_debug.h" 22*795d594fSAndroid Build Coastguard Worker #include "profile_saver_options.h" 23*795d594fSAndroid Build Coastguard Worker 24*795d594fSAndroid Build Coastguard Worker namespace art HIDDEN { 25*795d594fSAndroid Build Coastguard Worker 26*795d594fSAndroid Build Coastguard Worker struct RuntimeArgumentMap; 27*795d594fSAndroid Build Coastguard Worker 28*795d594fSAndroid Build Coastguard Worker namespace jit { 29*795d594fSAndroid Build Coastguard Worker 30*795d594fSAndroid Build Coastguard Worker // At what priority to schedule jit threads. 9 is the lowest foreground priority on device. 31*795d594fSAndroid Build Coastguard Worker // See android/os/Process.java. 32*795d594fSAndroid Build Coastguard Worker static constexpr int kJitPoolThreadPthreadDefaultPriority = 9; 33*795d594fSAndroid Build Coastguard Worker // At what priority to schedule jit zygote threads compiling profiles in the background. 34*795d594fSAndroid Build Coastguard Worker // 19 is the lowest background priority on device. 35*795d594fSAndroid Build Coastguard Worker // See android/os/Process.java. 36*795d594fSAndroid Build Coastguard Worker static constexpr int kJitZygotePoolThreadPthreadDefaultPriority = 19; 37*795d594fSAndroid Build Coastguard Worker 38*795d594fSAndroid Build Coastguard Worker class JitOptions { 39*795d594fSAndroid Build Coastguard Worker public: 40*795d594fSAndroid Build Coastguard Worker DECLARE_RUNTIME_DEBUG_FLAG(kSlowMode); 41*795d594fSAndroid Build Coastguard Worker 42*795d594fSAndroid Build Coastguard Worker static JitOptions* CreateFromRuntimeArguments(const RuntimeArgumentMap& options); 43*795d594fSAndroid Build Coastguard Worker GetOptimizeThreshold()44*795d594fSAndroid Build Coastguard Worker uint16_t GetOptimizeThreshold() const { 45*795d594fSAndroid Build Coastguard Worker return optimize_threshold_; 46*795d594fSAndroid Build Coastguard Worker } 47*795d594fSAndroid Build Coastguard Worker GetWarmupThreshold()48*795d594fSAndroid Build Coastguard Worker uint16_t GetWarmupThreshold() const { 49*795d594fSAndroid Build Coastguard Worker return warmup_threshold_; 50*795d594fSAndroid Build Coastguard Worker } 51*795d594fSAndroid Build Coastguard Worker GetPriorityThreadWeight()52*795d594fSAndroid Build Coastguard Worker uint16_t GetPriorityThreadWeight() const { 53*795d594fSAndroid Build Coastguard Worker return priority_thread_weight_; 54*795d594fSAndroid Build Coastguard Worker } 55*795d594fSAndroid Build Coastguard Worker GetInvokeTransitionWeight()56*795d594fSAndroid Build Coastguard Worker uint16_t GetInvokeTransitionWeight() const { 57*795d594fSAndroid Build Coastguard Worker return invoke_transition_weight_; 58*795d594fSAndroid Build Coastguard Worker } 59*795d594fSAndroid Build Coastguard Worker GetCodeCacheInitialCapacity()60*795d594fSAndroid Build Coastguard Worker size_t GetCodeCacheInitialCapacity() const { 61*795d594fSAndroid Build Coastguard Worker return code_cache_initial_capacity_; 62*795d594fSAndroid Build Coastguard Worker } 63*795d594fSAndroid Build Coastguard Worker GetCodeCacheMaxCapacity()64*795d594fSAndroid Build Coastguard Worker size_t GetCodeCacheMaxCapacity() const { 65*795d594fSAndroid Build Coastguard Worker return code_cache_max_capacity_; 66*795d594fSAndroid Build Coastguard Worker } 67*795d594fSAndroid Build Coastguard Worker DumpJitInfoOnShutdown()68*795d594fSAndroid Build Coastguard Worker bool DumpJitInfoOnShutdown() const { 69*795d594fSAndroid Build Coastguard Worker return dump_info_on_shutdown_; 70*795d594fSAndroid Build Coastguard Worker } 71*795d594fSAndroid Build Coastguard Worker GetProfileSaverOptions()72*795d594fSAndroid Build Coastguard Worker const ProfileSaverOptions& GetProfileSaverOptions() const { 73*795d594fSAndroid Build Coastguard Worker return profile_saver_options_; 74*795d594fSAndroid Build Coastguard Worker } 75*795d594fSAndroid Build Coastguard Worker GetSaveProfilingInfo()76*795d594fSAndroid Build Coastguard Worker bool GetSaveProfilingInfo() const { 77*795d594fSAndroid Build Coastguard Worker return profile_saver_options_.IsEnabled(); 78*795d594fSAndroid Build Coastguard Worker } 79*795d594fSAndroid Build Coastguard Worker GetThreadPoolPthreadPriority()80*795d594fSAndroid Build Coastguard Worker int GetThreadPoolPthreadPriority() const { 81*795d594fSAndroid Build Coastguard Worker return thread_pool_pthread_priority_; 82*795d594fSAndroid Build Coastguard Worker } 83*795d594fSAndroid Build Coastguard Worker GetZygoteThreadPoolPthreadPriority()84*795d594fSAndroid Build Coastguard Worker int GetZygoteThreadPoolPthreadPriority() const { 85*795d594fSAndroid Build Coastguard Worker return zygote_thread_pool_pthread_priority_; 86*795d594fSAndroid Build Coastguard Worker } 87*795d594fSAndroid Build Coastguard Worker UseJitCompilation()88*795d594fSAndroid Build Coastguard Worker bool UseJitCompilation() const { 89*795d594fSAndroid Build Coastguard Worker return use_jit_compilation_; 90*795d594fSAndroid Build Coastguard Worker } 91*795d594fSAndroid Build Coastguard Worker UseProfiledJitCompilation()92*795d594fSAndroid Build Coastguard Worker bool UseProfiledJitCompilation() const { 93*795d594fSAndroid Build Coastguard Worker return use_profiled_jit_compilation_; 94*795d594fSAndroid Build Coastguard Worker } 95*795d594fSAndroid Build Coastguard Worker SetUseJitCompilation(bool b)96*795d594fSAndroid Build Coastguard Worker void SetUseJitCompilation(bool b) { 97*795d594fSAndroid Build Coastguard Worker use_jit_compilation_ = b; 98*795d594fSAndroid Build Coastguard Worker } 99*795d594fSAndroid Build Coastguard Worker SetSaveProfilingInfo(bool save_profiling_info)100*795d594fSAndroid Build Coastguard Worker void SetSaveProfilingInfo(bool save_profiling_info) { 101*795d594fSAndroid Build Coastguard Worker profile_saver_options_.SetEnabled(save_profiling_info); 102*795d594fSAndroid Build Coastguard Worker } 103*795d594fSAndroid Build Coastguard Worker SetWaitForJitNotificationsToSaveProfile(bool value)104*795d594fSAndroid Build Coastguard Worker void SetWaitForJitNotificationsToSaveProfile(bool value) { 105*795d594fSAndroid Build Coastguard Worker profile_saver_options_.SetWaitForJitNotificationsToSave(value); 106*795d594fSAndroid Build Coastguard Worker } 107*795d594fSAndroid Build Coastguard Worker SetJitAtFirstUse()108*795d594fSAndroid Build Coastguard Worker void SetJitAtFirstUse() { 109*795d594fSAndroid Build Coastguard Worker use_jit_compilation_ = true; 110*795d594fSAndroid Build Coastguard Worker optimize_threshold_ = 0; 111*795d594fSAndroid Build Coastguard Worker } 112*795d594fSAndroid Build Coastguard Worker SetUseBaselineCompiler()113*795d594fSAndroid Build Coastguard Worker void SetUseBaselineCompiler() { 114*795d594fSAndroid Build Coastguard Worker use_baseline_compiler_ = true; 115*795d594fSAndroid Build Coastguard Worker } 116*795d594fSAndroid Build Coastguard Worker UseBaselineCompiler()117*795d594fSAndroid Build Coastguard Worker bool UseBaselineCompiler() const { 118*795d594fSAndroid Build Coastguard Worker return use_baseline_compiler_; 119*795d594fSAndroid Build Coastguard Worker } 120*795d594fSAndroid Build Coastguard Worker 121*795d594fSAndroid Build Coastguard Worker private: 122*795d594fSAndroid Build Coastguard Worker // We add the sample in batches of size kJitSamplesBatchSize. 123*795d594fSAndroid Build Coastguard Worker // This method rounds the threshold so that it is multiple of the batch size. 124*795d594fSAndroid Build Coastguard Worker static uint32_t RoundUpThreshold(uint32_t threshold); 125*795d594fSAndroid Build Coastguard Worker 126*795d594fSAndroid Build Coastguard Worker bool use_jit_compilation_; 127*795d594fSAndroid Build Coastguard Worker bool use_profiled_jit_compilation_; 128*795d594fSAndroid Build Coastguard Worker bool use_baseline_compiler_; 129*795d594fSAndroid Build Coastguard Worker size_t code_cache_initial_capacity_; 130*795d594fSAndroid Build Coastguard Worker size_t code_cache_max_capacity_; 131*795d594fSAndroid Build Coastguard Worker uint32_t optimize_threshold_; 132*795d594fSAndroid Build Coastguard Worker uint32_t warmup_threshold_; 133*795d594fSAndroid Build Coastguard Worker uint16_t priority_thread_weight_; 134*795d594fSAndroid Build Coastguard Worker uint16_t invoke_transition_weight_; 135*795d594fSAndroid Build Coastguard Worker bool dump_info_on_shutdown_; 136*795d594fSAndroid Build Coastguard Worker int thread_pool_pthread_priority_; 137*795d594fSAndroid Build Coastguard Worker int zygote_thread_pool_pthread_priority_; 138*795d594fSAndroid Build Coastguard Worker ProfileSaverOptions profile_saver_options_; 139*795d594fSAndroid Build Coastguard Worker JitOptions()140*795d594fSAndroid Build Coastguard Worker JitOptions() 141*795d594fSAndroid Build Coastguard Worker : use_jit_compilation_(false), 142*795d594fSAndroid Build Coastguard Worker use_profiled_jit_compilation_(false), 143*795d594fSAndroid Build Coastguard Worker use_baseline_compiler_(false), 144*795d594fSAndroid Build Coastguard Worker code_cache_initial_capacity_(0), 145*795d594fSAndroid Build Coastguard Worker code_cache_max_capacity_(0), 146*795d594fSAndroid Build Coastguard Worker optimize_threshold_(0), 147*795d594fSAndroid Build Coastguard Worker warmup_threshold_(0), 148*795d594fSAndroid Build Coastguard Worker priority_thread_weight_(0), 149*795d594fSAndroid Build Coastguard Worker invoke_transition_weight_(0), 150*795d594fSAndroid Build Coastguard Worker dump_info_on_shutdown_(false), 151*795d594fSAndroid Build Coastguard Worker thread_pool_pthread_priority_(kJitPoolThreadPthreadDefaultPriority), 152*795d594fSAndroid Build Coastguard Worker zygote_thread_pool_pthread_priority_(kJitZygotePoolThreadPthreadDefaultPriority) {} 153*795d594fSAndroid Build Coastguard Worker 154*795d594fSAndroid Build Coastguard Worker DISALLOW_COPY_AND_ASSIGN(JitOptions); 155*795d594fSAndroid Build Coastguard Worker }; 156*795d594fSAndroid Build Coastguard Worker 157*795d594fSAndroid Build Coastguard Worker } // namespace jit 158*795d594fSAndroid Build Coastguard Worker } // namespace art 159*795d594fSAndroid Build Coastguard Worker 160*795d594fSAndroid Build Coastguard Worker #endif // ART_RUNTIME_JIT_JIT_OPTIONS_H_ 161