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