Loading core/jni/org_codeaurora_Performance.cpp +18 −10 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #include <dlfcn.h> #include <limits.h> #include <pthread.h> #include <string.h> #include <cutils/properties.h> Loading @@ -46,6 +47,7 @@ namespace android static int (*perf_lock_acq)(int, int, int[], int) = NULL; static int (*perf_lock_rel)(int) = NULL; static void *dlhandle = NULL; static pthread_mutex_t dl_mutex = PTHREAD_MUTEX_INITIALIZER; // ---------------------------------------------------------------------------- Loading Loading @@ -98,6 +100,7 @@ cleanup: static void org_codeaurora_performance_native_deinit(JNIEnv *env, jobject clazz) { pthread_mutex_lock(&dl_mutex); if (dlhandle) { perf_lock_acq = NULL; perf_lock_rel = NULL; Loading @@ -105,6 +108,7 @@ org_codeaurora_performance_native_deinit(JNIEnv *env, jobject clazz) dlclose(dlhandle); dlhandle = NULL; } pthread_mutex_unlock(&dl_mutex); } static jint Loading @@ -113,27 +117,29 @@ org_codeaurora_performance_native_perf_lock_acq(JNIEnv *env, jobject clazz, jint jint listlen = env->GetArrayLength(list); jint buf[listlen]; int i=0; int ret = 0; env->GetIntArrayRegion(list, 0, listlen, buf); if (dlhandle == NULL) { pthread_mutex_lock(&dl_mutex); if (perf_lock_acq == NULL) { org_codeaurora_performance_native_init(); } if (perf_lock_acq) { return (*perf_lock_acq)(handle, duration, buf, listlen); } return 0; ret = (*perf_lock_acq)(handle, duration, buf, listlen); pthread_mutex_unlock(&dl_mutex); return ret; } static jint org_codeaurora_performance_native_perf_lock_rel(JNIEnv *env, jobject clazz, jint handle) { if (dlhandle == NULL) { int ret = 0; pthread_mutex_lock(&dl_mutex); if (perf_lock_rel == NULL) { org_codeaurora_performance_native_init(); } if (perf_lock_rel) { return (*perf_lock_rel)(handle); } return 0; ret = (*perf_lock_rel)(handle); pthread_mutex_unlock(&dl_mutex); return ret; } // ---------------------------------------------------------------------------- Loading @@ -145,7 +151,9 @@ static JNINativeMethod gMethods[] = { int register_org_codeaurora_Performance(JNIEnv *env) { pthread_mutex_lock(&dl_mutex); org_codeaurora_performance_native_init(); pthread_mutex_unlock(&dl_mutex); return AndroidRuntime::registerNativeMethods(env, "org/codeaurora/Performance", gMethods, NELEM(gMethods)); Loading Loading
core/jni/org_codeaurora_Performance.cpp +18 −10 Original line number Diff line number Diff line Loading @@ -34,6 +34,7 @@ #include <dlfcn.h> #include <limits.h> #include <pthread.h> #include <string.h> #include <cutils/properties.h> Loading @@ -46,6 +47,7 @@ namespace android static int (*perf_lock_acq)(int, int, int[], int) = NULL; static int (*perf_lock_rel)(int) = NULL; static void *dlhandle = NULL; static pthread_mutex_t dl_mutex = PTHREAD_MUTEX_INITIALIZER; // ---------------------------------------------------------------------------- Loading Loading @@ -98,6 +100,7 @@ cleanup: static void org_codeaurora_performance_native_deinit(JNIEnv *env, jobject clazz) { pthread_mutex_lock(&dl_mutex); if (dlhandle) { perf_lock_acq = NULL; perf_lock_rel = NULL; Loading @@ -105,6 +108,7 @@ org_codeaurora_performance_native_deinit(JNIEnv *env, jobject clazz) dlclose(dlhandle); dlhandle = NULL; } pthread_mutex_unlock(&dl_mutex); } static jint Loading @@ -113,27 +117,29 @@ org_codeaurora_performance_native_perf_lock_acq(JNIEnv *env, jobject clazz, jint jint listlen = env->GetArrayLength(list); jint buf[listlen]; int i=0; int ret = 0; env->GetIntArrayRegion(list, 0, listlen, buf); if (dlhandle == NULL) { pthread_mutex_lock(&dl_mutex); if (perf_lock_acq == NULL) { org_codeaurora_performance_native_init(); } if (perf_lock_acq) { return (*perf_lock_acq)(handle, duration, buf, listlen); } return 0; ret = (*perf_lock_acq)(handle, duration, buf, listlen); pthread_mutex_unlock(&dl_mutex); return ret; } static jint org_codeaurora_performance_native_perf_lock_rel(JNIEnv *env, jobject clazz, jint handle) { if (dlhandle == NULL) { int ret = 0; pthread_mutex_lock(&dl_mutex); if (perf_lock_rel == NULL) { org_codeaurora_performance_native_init(); } if (perf_lock_rel) { return (*perf_lock_rel)(handle); } return 0; ret = (*perf_lock_rel)(handle); pthread_mutex_unlock(&dl_mutex); return ret; } // ---------------------------------------------------------------------------- Loading @@ -145,7 +151,9 @@ static JNINativeMethod gMethods[] = { int register_org_codeaurora_Performance(JNIEnv *env) { pthread_mutex_lock(&dl_mutex); org_codeaurora_performance_native_init(); pthread_mutex_unlock(&dl_mutex); return AndroidRuntime::registerNativeMethods(env, "org/codeaurora/Performance", gMethods, NELEM(gMethods)); Loading