• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2020 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 ANDROID_INSTALLD_RUN_DEX2OAT_H
18 #define ANDROID_INSTALLD_RUN_DEX2OAT_H
19 
20 #include <memory>
21 #include <string>
22 
23 #include "execv_helper.h"
24 
25 namespace android {
26 namespace installd {
27 
28 class UniqueFile;
29 
30 class RunDex2Oat {
31   public:
32     explicit RunDex2Oat(const char* dex2oat_bin, ExecVHelper* execv_helper);
33     virtual ~RunDex2Oat();
34 
35     void Initialize(const UniqueFile& output_oat,
36                     const UniqueFile& output_vdex,
37                     const UniqueFile& output_image,
38                     const UniqueFile& input_dex,
39                     const UniqueFile& input_vdex,
40                     const UniqueFile& dex_metadata,
41                     const UniqueFile& profile,
42                     const char* class_loader_context,
43                     const std::string& class_loader_context_fds,
44                     int swap_fd,
45                     const char* instruction_set,
46                     const char* compiler_filter,
47                     bool debuggable,
48                     bool post_bootcomplete,
49                     bool for_restore,
50                     int target_sdk_version,
51                     bool enable_hidden_api_checks,
52                     bool generate_compact_dex,
53                     bool use_jitzygote_image,
54                     const char* compilation_reason);
55 
56     void Exec(int exit_code);
57 
58   protected:
59     void PrepareBootImageFlags(bool use_jitzygote_image);
60     void PrepareInputFileFlags(const UniqueFile& output_oat,
61                                const UniqueFile& output_vdex,
62                                const UniqueFile& output_image,
63                                const UniqueFile& input_dex,
64                                const UniqueFile& input_vdex,
65                                const UniqueFile& dex_metadata,
66                                const UniqueFile& profile,
67                                int swap_fd,
68                                const char* class_loader_context,
69                                const std::string& class_loader_context_fds);
70     void PrepareCompilerConfigFlags(const UniqueFile& input_vdex,
71                                     const UniqueFile& output_vdex,
72                                     const char* instruction_set,
73                                     const char* compiler_filter,
74                                     bool debuggable,
75                                     int target_sdk_version,
76                                     bool enable_hidden_api_checks,
77                                     bool generate_compact_dex,
78                                     const char* compilation_reason);
79     void PrepareCompilerRuntimeAndPerfConfigFlags(bool post_bootcomplete, bool for_restore);
80 
81     virtual std::string GetProperty(const std::string& key, const std::string& default_value);
82     virtual bool GetBoolProperty(const std::string& key, bool default_value);
83 
84   private:
85     void AddArg(const std::string& arg);
86     void AddRuntimeArg(const std::string& arg);
87 
88     std::string MapPropertyToArg(const std::string& property,
89                                  const std::string& format,
90                                  const std::string& default_value = "");
91 
92     std::string MapPropertyToArgWithBackup(const std::string& property,
93                                            const std::string& backupProperty,
94                                            const std::string& format,
95                                            const std::string& default_value = "");
96 
97     const std::string dex2oat_bin_;
98     ExecVHelper* execv_helper_;  // not owned
99 };
100 
101 }  // namespace installd
102 }  // namespace android
103 
104 #endif  // ANDROID_INSTALLD_RUN_DEX2OAT_H
105