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