1/* 2 * Copyright 2015 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_JIT_JIT_COMPILER_H_ 18#define ART_COMPILER_JIT_JIT_COMPILER_H_ 19 20#include "base/mutex.h" 21#include "compiler_callbacks.h" 22#include "compiled_method.h" 23#include "dex/verification_results.h" 24#include "dex/quick/dex_file_to_method_inliner_map.h" 25#include "driver/compiler_driver.h" 26#include "driver/compiler_options.h" 27#include "oat_file.h" 28 29namespace art { 30 31class ArtMethod; 32class InstructionSetFeatures; 33 34namespace jit { 35 36class JitCompiler { 37 public: 38 static JitCompiler* Create(); 39 virtual ~JitCompiler(); 40 bool CompileMethod(Thread* self, ArtMethod* method) 41 SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); 42 // This is in the compiler since the runtime doesn't have access to the compiled method 43 // structures. 44 bool AddToCodeCache(ArtMethod* method, const CompiledMethod* compiled_method, 45 OatFile::OatMethod* out_method) SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); 46 CompilerCallbacks* GetCompilerCallbacks() const; 47 size_t GetTotalCompileTime() const { 48 return total_time_; 49 } 50 51 private: 52 uint64_t total_time_; 53 std::unique_ptr<CompilerOptions> compiler_options_; 54 std::unique_ptr<CumulativeLogger> cumulative_logger_; 55 std::unique_ptr<VerificationResults> verification_results_; 56 std::unique_ptr<DexFileToMethodInlinerMap> method_inliner_map_; 57 std::unique_ptr<CompilerCallbacks> callbacks_; 58 std::unique_ptr<CompilerDriver> compiler_driver_; 59 std::unique_ptr<const InstructionSetFeatures> instruction_set_features_; 60 61 explicit JitCompiler(); 62 uint8_t* WriteMethodHeaderAndCode( 63 const CompiledMethod* compiled_method, uint8_t* reserve_begin, uint8_t* reserve_end, 64 const uint8_t* mapping_table, const uint8_t* vmap_table, const uint8_t* gc_map); 65 bool MakeExecutable(CompiledMethod* compiled_method, ArtMethod* method) 66 SHARED_LOCKS_REQUIRED(Locks::mutator_lock_); 67 68 DISALLOW_COPY_AND_ASSIGN(JitCompiler); 69}; 70 71} // namespace jit 72} // namespace art 73 74#endif // ART_COMPILER_JIT_JIT_COMPILER_H_ 75