xref: /aosp_15_r20/art/runtime/jit/jit_options.h (revision 795d594fd825385562da6b089ea9b2033f3abf5a)
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