804 assert(cm != NULL, "sanity check");
805 cm->make_not_entrant();
806 }
807 ++_result;
808 }
809 }
810 }
811 }
812 }
813 };
814
815 WB_ENTRY(jint, WB_DeoptimizeFrames(JNIEnv* env, jobject o, jboolean make_not_entrant))
816 VM_WhiteBoxDeoptimizeFrames op(make_not_entrant == JNI_TRUE);
817 VMThread::execute(&op);
818 return op.result();
819 WB_END
820
821 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
822 MutexLocker mu(Compile_lock);
823 CodeCache::mark_all_nmethods_for_deoptimization();
824 VM_Deoptimize op;
825 VMThread::execute(&op);
826 WB_END
827
828 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
829 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
830 int result = 0;
831 CHECK_JNI_EXCEPTION_(env, result);
832 MutexLocker mu(Compile_lock);
833 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
834 if (is_osr) {
835 result += mh->mark_osr_nmethods();
836 } else if (mh->code() != NULL) {
837 mh->code()->mark_for_deoptimization();
838 ++result;
839 }
840 result += CodeCache::mark_for_deoptimization(mh());
841 if (result > 0) {
842 VM_Deoptimize op;
843 VMThread::execute(&op);
844 }
845 return result;
846 WB_END
847
848 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
849 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
850 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
851 MutexLocker mu(Compile_lock);
852 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
853 CompiledMethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
854 if (code == NULL) {
855 return JNI_FALSE;
856 }
857 return (code->is_alive() && !code->is_marked_for_deoptimization());
858 WB_END
859
860 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
861 if (method == NULL || comp_level > MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier)) {
862 return false;
863 }
|
804 assert(cm != NULL, "sanity check");
805 cm->make_not_entrant();
806 }
807 ++_result;
808 }
809 }
810 }
811 }
812 }
813 };
814
815 WB_ENTRY(jint, WB_DeoptimizeFrames(JNIEnv* env, jobject o, jboolean make_not_entrant))
816 VM_WhiteBoxDeoptimizeFrames op(make_not_entrant == JNI_TRUE);
817 VMThread::execute(&op);
818 return op.result();
819 WB_END
820
821 WB_ENTRY(void, WB_DeoptimizeAll(JNIEnv* env, jobject o))
822 MutexLocker mu(Compile_lock);
823 CodeCache::mark_all_nmethods_for_deoptimization();
824 Deoptimization::deoptimize_all_marked();
825 WB_END
826
827 WB_ENTRY(jint, WB_DeoptimizeMethod(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
828 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
829 int result = 0;
830 CHECK_JNI_EXCEPTION_(env, result);
831 MutexLocker mu(Compile_lock);
832 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
833 if (is_osr) {
834 result += mh->mark_osr_nmethods();
835 } else if (mh->code() != NULL) {
836 mh->code()->mark_for_deoptimization();
837 ++result;
838 }
839 result += CodeCache::mark_for_deoptimization(mh());
840 if (result > 0) {
841 Deoptimization::deoptimize_all_marked();
842 }
843 return result;
844 WB_END
845
846 WB_ENTRY(jboolean, WB_IsMethodCompiled(JNIEnv* env, jobject o, jobject method, jboolean is_osr))
847 jmethodID jmid = reflected_method_to_jmid(thread, env, method);
848 CHECK_JNI_EXCEPTION_(env, JNI_FALSE);
849 MutexLocker mu(Compile_lock);
850 methodHandle mh(THREAD, Method::checked_resolve_jmethod_id(jmid));
851 CompiledMethod* code = is_osr ? mh->lookup_osr_nmethod_for(InvocationEntryBci, CompLevel_none, false) : mh->code();
852 if (code == NULL) {
853 return JNI_FALSE;
854 }
855 return (code->is_alive() && !code->is_marked_for_deoptimization());
856 WB_END
857
858 WB_ENTRY(jboolean, WB_IsMethodCompilable(JNIEnv* env, jobject o, jobject method, jint comp_level, jboolean is_osr))
859 if (method == NULL || comp_level > MIN2((CompLevel) TieredStopAtLevel, CompLevel_highest_tier)) {
860 return false;
861 }
|