test/hotspot/jtreg/vmTestbase/nsk/share/gc/lock/jni/FloatArrayCriticalLocker.cpp
changeset 54744 be7839b9493f
parent 54599 f5657f30bb01
equal deleted inserted replaced
54743:ba74d2de9a01 54744:be7839b9493f
    35  * Method:    criticalNative
    35  * Method:    criticalNative
    36  * Signature: ([Z)Z
    36  * Signature: ([Z)Z
    37  */
    37  */
    38 JNIEXPORT jfloat JNICALL Java_nsk_share_gc_lock_jni_FloatArrayCriticalLocker_criticalNative
    38 JNIEXPORT jfloat JNICALL Java_nsk_share_gc_lock_jni_FloatArrayCriticalLocker_criticalNative
    39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
    39 (JNIEnv *jni_env, jobject o, jlong enterTime, jlong sleepTime) {
    40         ExceptionCheckingJniEnvPtr jni(jni_env);
    40         ExceptionCheckingJniEnvPtr ec_jni(jni_env);
    41 
    41 
    42         jsize size, i;
    42         jsize size, i;
    43         jfloatArray arr;
    43         jfloatArray arr;
    44         jfloat *pa;
    44         jfloat *pa;
    45         jfloat hash = 0;
    45         jfloat hash = 0;
    46         time_t start_time, current_time;
    46         time_t start_time, current_time;
    47 
    47 
    48         if (objFieldId == NULL) {
    48         if (objFieldId == NULL) {
    49                 jclass klass = jni->GetObjectClass(o, TRACE_JNI_CALL);
    49                 jclass klass = ec_jni->GetObjectClass(o, TRACE_JNI_CALL);
    50                 objFieldId = jni->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL);
    50                 objFieldId = ec_jni->GetFieldID(klass, "obj", "Ljava/lang/Object;", TRACE_JNI_CALL);
    51         }
    51         }
    52         arr = (jfloatArray) jni->GetObjectField(o, objFieldId, TRACE_JNI_CALL);
    52         arr = (jfloatArray) ec_jni->GetObjectField(o, objFieldId, TRACE_JNI_CALL);
    53         jni->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL);
    53         ec_jni->SetObjectField(o, objFieldId, NULL, TRACE_JNI_CALL);
    54 
    54 
    55         size = jni->GetArrayLength(arr, TRACE_JNI_CALL);
    55         size = ec_jni->GetArrayLength(arr, TRACE_JNI_CALL);
    56         start_time = time(NULL);
    56         start_time = time(NULL);
    57         enterTime /= 1000;
    57         enterTime /= 1000;
    58         current_time = 0;
    58         current_time = 0;
    59         while (current_time - start_time < enterTime) {
    59         while (current_time - start_time < enterTime) {
    60                 pa = (jfloat*) jni->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL);
    60                 pa = (jfloat*) ec_jni->GetPrimitiveArrayCritical(arr, NULL, TRACE_JNI_CALL);
    61                 if (pa != NULL) {
    61                 if (pa != NULL) {
    62                         for (i = 0; i < size; ++i)
    62                         for (i = 0; i < size; ++i)
    63                                 hash += pa[i];
    63                                 hash += pa[i];
    64                 } else {
    64                 } else {
    65                         hash = 0;
    65                         hash = 0;
    66                 }
    66                 }
    67                 mssleep((long) sleepTime);
    67                 mssleep((long) sleepTime);
    68                 jni->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL);
    68                 ec_jni->ReleasePrimitiveArrayCritical(arr, pa, 0, TRACE_JNI_CALL);
    69                 mssleep((long) sleepTime);
    69                 mssleep((long) sleepTime);
    70                 current_time = time(NULL);
    70                 current_time = time(NULL);
    71         }
    71         }
    72         jni->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL);
    72         ec_jni->SetObjectField(o, objFieldId, arr, TRACE_JNI_CALL);
    73         return hash;
    73         return hash;
    74 }
    74 }
    75 
    75 
    76 }
    76 }