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;
}
Пример #2
0
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;
}