1*795d594fSAndroid Build Coastguard Worker /* 2*795d594fSAndroid Build Coastguard Worker * Copyright (C) 2017 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 #include "dex/dex_file.h" 18*795d594fSAndroid Build Coastguard Worker 19*795d594fSAndroid Build Coastguard Worker #include "art_method-inl.h" 20*795d594fSAndroid Build Coastguard Worker #include "dex/method_reference.h" 21*795d594fSAndroid Build Coastguard Worker #include "jit/jit.h" 22*795d594fSAndroid Build Coastguard Worker #include "jit/jit_code_cache.h" 23*795d594fSAndroid Build Coastguard Worker #include "jni.h" 24*795d594fSAndroid Build Coastguard Worker #include "mirror/class-inl.h" 25*795d594fSAndroid Build Coastguard Worker #include "mirror/executable.h" 26*795d594fSAndroid Build Coastguard Worker #include "runtime.h" 27*795d594fSAndroid Build Coastguard Worker #include "scoped_thread_state_change-inl.h" 28*795d594fSAndroid Build Coastguard Worker #include "thread.h" 29*795d594fSAndroid Build Coastguard Worker 30*795d594fSAndroid Build Coastguard Worker namespace art { 31*795d594fSAndroid Build Coastguard Worker namespace { 32*795d594fSAndroid Build Coastguard Worker Java_Main_testCompiled(JNIEnv * env,jclass,jobject method)33*795d594fSAndroid Build Coastguard Workerextern "C" JNIEXPORT jboolean JNICALL Java_Main_testCompiled(JNIEnv* env, 34*795d594fSAndroid Build Coastguard Worker jclass, 35*795d594fSAndroid Build Coastguard Worker jobject method) { 36*795d594fSAndroid Build Coastguard Worker CHECK(method != nullptr); 37*795d594fSAndroid Build Coastguard Worker ScopedObjectAccess soa(env); 38*795d594fSAndroid Build Coastguard Worker ObjPtr<mirror::Executable> exec = soa.Decode<mirror::Executable>(method); 39*795d594fSAndroid Build Coastguard Worker ArtMethod* art_method = exec->GetArtMethod(); 40*795d594fSAndroid Build Coastguard Worker 41*795d594fSAndroid Build Coastguard Worker if (art_method->IsNative() || !art_method->IsInvokable() || art_method->IsProxyMethod()) { 42*795d594fSAndroid Build Coastguard Worker return JNI_FALSE; 43*795d594fSAndroid Build Coastguard Worker } 44*795d594fSAndroid Build Coastguard Worker 45*795d594fSAndroid Build Coastguard Worker // Check whether the JIT has compiled it. 46*795d594fSAndroid Build Coastguard Worker Runtime* runtime = Runtime::Current(); 47*795d594fSAndroid Build Coastguard Worker jit::Jit* jit = runtime->GetJit(); 48*795d594fSAndroid Build Coastguard Worker if (jit != nullptr && jit->GetCodeCache()->ContainsMethod(art_method)) { 49*795d594fSAndroid Build Coastguard Worker return JNI_TRUE; 50*795d594fSAndroid Build Coastguard Worker } 51*795d594fSAndroid Build Coastguard Worker 52*795d594fSAndroid Build Coastguard Worker // Check whether we have AOT code. 53*795d594fSAndroid Build Coastguard Worker return art_method->GetOatMethodQuickCode(kRuntimePointerSize) != nullptr ? JNI_TRUE : JNI_FALSE; 54*795d594fSAndroid Build Coastguard Worker } 55*795d594fSAndroid Build Coastguard Worker 56*795d594fSAndroid Build Coastguard Worker } // namespace 57*795d594fSAndroid Build Coastguard Worker } // namespace art 58