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