static jboolean com_mediatek_exceptionlog_getNativeExceptionPidListImpl(JNIEnv* env, jobject clazz, jintArray pidList) { if (env->GetArrayLength(pidList) < AEE_WORKER_MAX) { ALOGE("%s: Array no big enough %d\n", __func__, env->GetArrayLength(pidList)); return JNI_FALSE; } struct aee_exception_entry entries[AEE_WORKER_MAX]; if (aee_exception_running(entries) >= 0) { jint fill[AEE_WORKER_MAX]; for (int i = 0; i < AEE_WORKER_MAX; i++) { if ((entries[i].clasz == AE_NE)||(entries[i].clasz == AE_RESMON)) { fill[i] = entries[i].pid; } else { fill[i] = -1; } } env->SetIntArrayRegion(pidList, 0, AEE_WORKER_MAX, fill); return JNI_TRUE; } return JNI_FALSE; }
static jboolean com_mediatek_exceptionlog_isNativeExceptionImpl(JNIEnv* env, jobject clazz, jint anr_pid) { if (anr_pid <= 0) return JNI_FALSE; struct aee_exception_entry entries[AEE_WORKER_MAX]; if (aee_exception_running(entries) >= 0) { for (int i = 0; i < AEE_WORKER_MAX; i++) { if (((entries[i].clasz == AE_NE)&&(entries[i].pid == anr_pid)) || ((entries[i].clasz == AE_RESMON)&&(entries[i].pid == anr_pid))) { return JNI_TRUE; } } } if (aee_exception_running_64(entries) >= 0) { for (int i = 0; i < AEE_WORKER_MAX; i++) { if (((entries[i].clasz == AE_NE)&&(entries[i].pid == anr_pid)) || ((entries[i].clasz == AE_RESMON)&&(entries[i].pid == anr_pid))) { return JNI_TRUE; } } } return JNI_FALSE; }