hprof_util.c
来自「一个小公司要求给写的很简单的任务管理系统。」· C语言 代码 · 共 1,736 行 · 第 1/4 页
C
1,736 行
super_klass = JNI_FUNC_PTR(env,GetSuperclass)(env, klass); return super_klass;}jmethodIDgetStaticMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig){ jmethodID method; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(clazz!=NULL); HPROF_ASSERT(name!=NULL); HPROF_ASSERT(sig!=NULL); CHECK_EXCEPTIONS(env) { method = JNI_FUNC_PTR(env,GetStaticMethodID)(env, clazz, name, sig); } END_CHECK_EXCEPTIONS; HPROF_ASSERT(method!=NULL); return method;}jmethodIDgetMethodID(JNIEnv *env, jclass clazz, const char *name, const char *sig){ jmethodID method; jobject exception; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(clazz!=NULL); HPROF_ASSERT(name!=NULL); HPROF_ASSERT(sig!=NULL); method = JNI_FUNC_PTR(env,GetMethodID)(env, clazz, name, sig); /* Might be a static method */ exception = JNI_FUNC_PTR(env,ExceptionOccurred)(env); if ( exception != NULL ) { JNI_FUNC_PTR(env,ExceptionClear)(env); method = getStaticMethodID(env, clazz, name, sig); } HPROF_ASSERT(method!=NULL); return method;}jclassfindClass(JNIEnv *env, const char *name)/* WARNING: Must be called inside WITH_LOCAL_REFS */{ jclass clazz; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(name!=NULL); LOG2("FindClass", name); CHECK_EXCEPTIONS(env) { clazz = JNI_FUNC_PTR(env,FindClass)(env, name); } END_CHECK_EXCEPTIONS; HPROF_ASSERT(clazz!=NULL); return clazz;}jfieldIDgetStaticFieldID(JNIEnv *env, jclass clazz, const char *name, const char *sig){ jfieldID field; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(clazz!=NULL); HPROF_ASSERT(name!=NULL); HPROF_ASSERT(sig!=NULL); CHECK_EXCEPTIONS(env) { field = JNI_FUNC_PTR(env,GetStaticFieldID)(env, clazz, name, sig); } END_CHECK_EXCEPTIONS; return field;}voidsetStaticIntField(JNIEnv *env, jclass clazz, jfieldID field, jint value){ HPROF_ASSERT(env!=NULL); HPROF_ASSERT(clazz!=NULL); HPROF_ASSERT(field!=NULL); CHECK_EXCEPTIONS(env) { JNI_FUNC_PTR(env,SetStaticIntField)(env, clazz, field, value); } END_CHECK_EXCEPTIONS;}static jobjectcallStaticObjectMethod(JNIEnv *env, jclass klass, jmethodID method){ jobject x; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(klass!=NULL); HPROF_ASSERT(method!=NULL); CHECK_EXCEPTIONS(env) { x = JNI_FUNC_PTR(env,CallStaticObjectMethod)(env, klass, method); } END_CHECK_EXCEPTIONS; return x;}static jlongcallLongMethod(JNIEnv *env, jobject object, jmethodID method){ jlong x; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(object!=NULL); HPROF_ASSERT(method!=NULL); CHECK_EXCEPTIONS(env) { x = JNI_FUNC_PTR(env,CallLongMethod)(env, object, method); } END_CHECK_EXCEPTIONS; return x;}static voidcallVoidMethod(JNIEnv *env, jobject object, jmethodID method, jboolean arg){ HPROF_ASSERT(env!=NULL); HPROF_ASSERT(object!=NULL); HPROF_ASSERT(method!=NULL); CHECK_EXCEPTIONS(env) { JNI_FUNC_PTR(env,CallVoidMethod)(env, object, method, arg); } END_CHECK_EXCEPTIONS;}static jstringnewStringUTF(JNIEnv *env, const char *name)/* WARNING: Must be called inside WITH_LOCAL_REFS */{ jstring string; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(name!=NULL); CHECK_EXCEPTIONS(env) { string = JNI_FUNC_PTR(env,NewStringUTF)(env, name); } END_CHECK_EXCEPTIONS; HPROF_ASSERT(string!=NULL); return string;}static jobjectnewThreadObject(JNIEnv *env, jclass clazz, jmethodID method, jthreadGroup group, jstring name)/* WARNING: Must be called inside WITH_LOCAL_REFS */{ jthread thread; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(clazz!=NULL); HPROF_ASSERT(method!=NULL); CHECK_EXCEPTIONS(env) { thread = JNI_FUNC_PTR(env,NewObject)(env, clazz, method, group, name); } END_CHECK_EXCEPTIONS; HPROF_ASSERT(thread!=NULL); return thread;}jbooleanisSameObject(JNIEnv *env, jobject o1, jobject o2){ HPROF_ASSERT(env!=NULL); if ( o1 == o2 || JNI_FUNC_PTR(env,IsSameObject)(env, o1, o2) ) { return JNI_TRUE; } return JNI_FALSE;}void pushLocalFrame(JNIEnv *env, jint capacity){ HPROF_ASSERT(env!=NULL); CHECK_EXCEPTIONS(env) { jint ret; ret = JNI_FUNC_PTR(env,PushLocalFrame)(env, capacity); if ( ret != 0 ) { HPROF_ERROR(JNI_TRUE, "JNI PushLocalFrame returned non-zero"); } } END_CHECK_EXCEPTIONS;}void popLocalFrame(JNIEnv *env, jobject result){ jobject ret; HPROF_ASSERT(env!=NULL); ret = JNI_FUNC_PTR(env,PopLocalFrame)(env, result); if ( (result != NULL && ret == NULL) || (result == NULL && ret != NULL) ) { HPROF_ERROR(JNI_TRUE, "JNI PopLocalFrame returned wrong object"); }}voidregisterNatives(JNIEnv *env, jclass clazz, JNINativeMethod *methods, jint count){ jint ret; HPROF_ASSERT(env!=NULL); HPROF_ASSERT(clazz!=NULL); HPROF_ASSERT(methods!=NULL); HPROF_ASSERT(count>0); ret = JNI_FUNC_PTR(env,RegisterNatives)(env, clazz, methods, count); if ( ret != 0 ) { HPROF_ERROR(JNI_TRUE, "JNI RegisterNatives returned non-zero"); }}/* ---------------------------------------------------------------------- *//* JVMTI Support Functions */char *getErrorName(jvmtiError error_number){ char *error_name; error_name = NULL; (void)JVMTI_FUNC_PTR(gdata->jvmti,GetErrorName) (gdata->jvmti, error_number, &error_name); return error_name;}jvmtiPhasegetPhase(void){ jvmtiPhase phase; phase = 0; (void)JVMTI_FUNC_PTR(gdata->jvmti,GetPhase)(gdata->jvmti, &phase); return phase;}char *phaseString(jvmtiPhase phase){ switch ( phase ) { case JVMTI_PHASE_ONLOAD: return "onload"; case JVMTI_PHASE_PRIMORDIAL: return "primordial"; case JVMTI_PHASE_START: return "start"; case JVMTI_PHASE_LIVE: return "live"; case JVMTI_PHASE_DEAD: return "dead"; } return "unknown";}voiddisposeEnvironment(void){ (void)JVMTI_FUNC_PTR(gdata->jvmti,DisposeEnvironment) (gdata->jvmti);}jlonggetObjectSize(jobject object){ jlong size; jvmtiError error; HPROF_ASSERT(object!=NULL); size = 0; error = JVMTI_FUNC_PTR(gdata->jvmti,GetObjectSize) (gdata->jvmti, object, &size); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get object size"); } return size;}static jboolean isInterface(jclass klass){ jvmtiError error; jboolean answer; HPROF_ASSERT(klass!=NULL); answer = JNI_FALSE; error = JVMTI_FUNC_PTR(gdata->jvmti,IsInterface) (gdata->jvmti, klass, &answer); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot call IsInterface"); } return answer;}jintgetClassStatus(jclass klass){ jvmtiError error; jint status; HPROF_ASSERT(klass!=NULL); status = 0; error = JVMTI_FUNC_PTR(gdata->jvmti,GetClassStatus) (gdata->jvmti, klass, &status); if ( error == JVMTI_ERROR_WRONG_PHASE ) { /* Treat this as ok */ error = JVMTI_ERROR_NONE; status = 0; } if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get class status"); } return status;}jobjectgetClassLoader(jclass klass)/* WARNING: Must be called inside WITH_LOCAL_REFS */{ jvmtiError error; jobject loader; HPROF_ASSERT(klass!=NULL); loader = NULL; error = JVMTI_FUNC_PTR(gdata->jvmti,GetClassLoader) (gdata->jvmti, klass, &loader); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get class loader"); } return loader;}jlonggetTag(jobject object){ jlong tag; jvmtiError error; HPROF_ASSERT(object!=NULL); tag = 0; error = JVMTI_FUNC_PTR(gdata->jvmti,GetTag) (gdata->jvmti, object, &tag); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get object tag"); } return tag;}voidsetTag(jobject object, jlong tag){ jvmtiError error; HPROF_ASSERT(object!=NULL); error = JVMTI_FUNC_PTR(gdata->jvmti,SetTag) (gdata->jvmti, object, tag); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot set object tag"); }}void getObjectMonitorUsage(jobject object, jvmtiMonitorUsage *uinfo){ jvmtiError error; HPROF_ASSERT(object!=NULL); error = JVMTI_FUNC_PTR(gdata->jvmti,GetObjectMonitorUsage) (gdata->jvmti, object, uinfo); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get monitor usage info"); }}voidgetOwnedMonitorInfo(jthread thread, jobject **ppobjects, jint *pcount)/* WARNING: Must be called inside WITH_LOCAL_REFS */{ jvmtiError error; HPROF_ASSERT(thread!=NULL); HPROF_ASSERT(ppobjects!=NULL); HPROF_ASSERT(pcount!=NULL); *pcount = 0; *ppobjects = NULL; error = JVMTI_FUNC_PTR(gdata->jvmti,GetOwnedMonitorInfo) (gdata->jvmti, thread, pcount, ppobjects); if ( error == JVMTI_ERROR_THREAD_NOT_ALIVE ) { *pcount = 0; error = JVMTI_ERROR_NONE; } if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get thread owned monitor info"); }}void getSystemProperty(const char *name, char **value){ jvmtiError error; HPROF_ASSERT(name!=NULL); *value = NULL; error = JVMTI_FUNC_PTR(gdata->jvmti,GetSystemProperty) (gdata->jvmti, name, value); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get system property"); }}void getClassSignature(jclass klass, char** psignature, char **pgeneric_signature){ jvmtiError error; char *generic_signature; HPROF_ASSERT(klass!=NULL); *psignature = NULL; error = JVMTI_FUNC_PTR(gdata->jvmti,GetClassSignature) (gdata->jvmti, klass, psignature, &generic_signature); if ( error != JVMTI_ERROR_NONE ) { HPROF_JVMTI_ERROR(error, "Cannot get class signature"); } if ( pgeneric_signature != NULL ) { *pgeneric_signature = generic_signature; } else { jvmtiDeallocate(generic_signature); }}void getSourceFileName(jclass klass, char** pname){ jvmtiError error; HPROF_ASSERT(klass!=NULL); *pname = NULL; error = JVMTI_FUNC_PTR(gdata->jvmti,GetSourceFileName) (gdata->jvmti, klass, pname); if ( error == JVMTI_ERROR_ABSENT_INFORMATION ) { error = JVMTI_ERROR_NONE;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?