compiler_options.h revision 6449c62e40ef3a9bb75f664f922555affb532ee4
1/*
2 * Copyright (C) 2014 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 *      http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17#ifndef ART_COMPILER_DRIVER_COMPILER_OPTIONS_H_
18#define ART_COMPILER_DRIVER_COMPILER_OPTIONS_H_
19
20namespace art {
21
22class CompilerOptions {
23 public:
24  enum CompilerFilter {
25    kInterpretOnly,       // Compile nothing.
26    kSpace,               // Maximize space savings.
27    kBalanced,            // Try to get the best performance return on compilation investment.
28    kSpeed,               // Maximize runtime performance.
29    kEverything           // Force compilation (Note: excludes compilaton of class initializers).
30  };
31
32  // Guide heuristics to determine whether to compile method if profile data not available.
33  static const CompilerFilter kDefaultCompilerFilter = kSpeed;
34  static const size_t kDefaultHugeMethodThreshold = 10000;
35  static const size_t kDefaultLargeMethodThreshold = 600;
36  static const size_t kDefaultSmallMethodThreshold = 60;
37  static const size_t kDefaultTinyMethodThreshold = 20;
38  static const size_t kDefaultNumDexMethodsThreshold = 900;
39
40  CompilerOptions() :
41    compiler_filter_(kDefaultCompilerFilter),
42    huge_method_threshold_(kDefaultHugeMethodThreshold),
43    large_method_threshold_(kDefaultLargeMethodThreshold),
44    small_method_threshold_(kDefaultSmallMethodThreshold),
45    tiny_method_threshold_(kDefaultTinyMethodThreshold),
46    num_dex_methods_threshold_(kDefaultNumDexMethodsThreshold)
47#ifdef ART_SEA_IR_MODE
48    , sea_ir_mode_(false)
49#endif
50    {}
51
52  CompilerOptions(CompilerFilter compiler_filter,
53                  size_t huge_method_threshold,
54                  size_t large_method_threshold,
55                  size_t small_method_threshold,
56                  size_t tiny_method_threshold,
57                  size_t num_dex_methods_threshold
58#ifdef ART_SEA_IR_MODE
59                  , bool sea_ir_mode
60#endif
61                  ) :  // NOLINT(whitespace/parens)
62    compiler_filter_(compiler_filter),
63    huge_method_threshold_(huge_method_threshold),
64    large_method_threshold_(large_method_threshold),
65    small_method_threshold_(small_method_threshold),
66    tiny_method_threshold_(tiny_method_threshold),
67    num_dex_methods_threshold_(num_dex_methods_threshold)
68#ifdef ART_SEA_IR_MODE
69    , sea_ir_mode_(sea_ir_mode)
70#endif
71    {}
72
73  CompilerFilter GetCompilerFilter() const {
74    return compiler_filter_;
75  }
76
77  void SetCompilerFilter(CompilerFilter compiler_filter) {
78    compiler_filter_ = compiler_filter;
79  }
80
81  size_t GetHugeMethodThreshold() const {
82    return huge_method_threshold_;
83  }
84
85  size_t GetLargeMethodThreshold() const {
86    return large_method_threshold_;
87  }
88
89  size_t GetSmallMethodThreshold() const {
90    return small_method_threshold_;
91  }
92
93  size_t GetTinyMethodThreshold() const {
94    return tiny_method_threshold_;
95  }
96
97  bool IsHugeMethod(size_t num_dalvik_instructions) const {
98    return num_dalvik_instructions > huge_method_threshold_;
99  }
100
101  bool IsLargeMethod(size_t num_dalvik_instructions) const {
102    return num_dalvik_instructions > large_method_threshold_;
103  }
104
105  bool IsSmallMethod(size_t num_dalvik_instructions) const {
106    return num_dalvik_instructions > small_method_threshold_;
107  }
108
109  bool IsTinyMethod(size_t num_dalvik_instructions) const {
110    return num_dalvik_instructions > tiny_method_threshold_;
111  }
112
113  size_t GetNumDexMethodsThreshold() const {
114    return num_dex_methods_threshold_;
115  }
116
117#ifdef ART_SEA_IR_MODE
118  bool GetSeaIrMode();
119#endif
120
121 private:
122  CompilerFilter compiler_filter_;
123  size_t huge_method_threshold_;
124  size_t large_method_threshold_;
125  size_t small_method_threshold_;
126  size_t tiny_method_threshold_;
127  size_t num_dex_methods_threshold_;
128
129#ifdef ART_SEA_IR_MODE
130  bool sea_ir_mode_;
131#endif
132};
133
134}  // namespace art
135
136#endif  // ART_COMPILER_DRIVER_COMPILER_OPTIONS_H_
137