29 extern "C" {
30
31 static jfieldID objFieldId = NULL;
32
33 /*
34 * Class: nsk_share_gc_lock_jni_DoubleArrayCriticalLocker
35 * Method: criticalNative
36 * Signature: ([Z)Z
37 */
38 JNIEXPORT jdouble JNICALL Java_nsk_share_gc_lock_jni_DoubleArrayCriticalLocker_criticalNative
39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
40 ExceptionCheckingJniEnvPtr env(jni_env);
41
42 jsize size, i;
43 jdoubleArray arr;
44 jdouble *pa;
45 jdouble hash = 0;
46 time_t start_time, current_time;
47
48 if (objFieldId == NULL) {
49 jclass klass = env->GetObjectClass(o);
50 objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;");
51 }
52 arr = (jdoubleArray) env->GetObjectField(o, objFieldId);
53 env->SetObjectField(o, objFieldId, NULL);
54
55 size = env->GetArrayLength(arr);
56 start_time = time(NULL);
57 enterTime /= 1000;
58 current_time = 0;
59 while (current_time - start_time < enterTime) {
60 pa = (jdouble*) env->GetPrimitiveArrayCritical(arr, NULL);
61 if (pa != NULL) {
62 for (i = 0; i < size; ++i)
63 hash += pa[i];
64 } else {
65 hash = 0;
66 }
67 mssleep((long) sleepTime);
68 env->ReleasePrimitiveArrayCritical(arr, pa, 0);
69 mssleep((long) sleepTime);
70 current_time = time(NULL);
71 }
72 env->SetObjectField(o, objFieldId, arr);
73 return hash;
74 }
75
76 }
|
29 extern "C" {
30
31 static jfieldID objFieldId = NULL;
32
33 /*
34 * Class: nsk_share_gc_lock_jni_DoubleArrayCriticalLocker
35 * Method: criticalNative
36 * Signature: ([Z)Z
37 */
38 JNIEXPORT jdouble JNICALL Java_nsk_share_gc_lock_jni_DoubleArrayCriticalLocker_criticalNative
39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
40 ExceptionCheckingJniEnvPtr env(jni_env);
41
42 jsize size, i;
43 jdoubleArray arr;
44 jdouble *pa;
45 jdouble hash = 0;
46 time_t start_time, current_time;
47
48 if (objFieldId == NULL) {
49 jclass klass = env->GetObjectClass(o, TRACE_JNI_CALL);
50 objFieldId = env->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL);
51 }
52 arr = (jdoubleArray) env->GetObjectField(o, objFieldId, TRACE_JNI_CALL);
53 env->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL);
54
55 size = env->GetArrayLength(arr, TRACE_JNI_CALL);
56 start_time = time(NULL);
57 enterTime /= 1000;
58 current_time = 0;
59 while (current_time - start_time < enterTime) {
60 pa = (jdouble*) env->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL);
61 if (pa != NULL) {
62 for (i = 0; i < size; ++i)
63 hash += pa[i];
64 } else {
65 hash = 0;
66 }
67 mssleep((long) sleepTime);
68 env->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL);
69 mssleep((long) sleepTime);
70 current_time = time(NULL);
71 }
72 env->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL);
73 return hash;
74 }
75
76 }
|