Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/stress/jni/libjnistress003.cpp
41155 views
1
/*
2
* Copyright (c) 2007, 2018, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
#include <jni.h>
25
#include <stdio.h>
26
#include <stdlib.h>
27
#include "jnihelper.h"
28
29
extern "C" {
30
31
#define BOOL 0
32
#define BYTE 1
33
#define CHAR 2
34
#define SHORT 3
35
#define INT 4
36
#define LONG 5
37
#define FLOAT 6
38
#define DOUBLE 7
39
40
JNIEXPORT jobjectArray JNICALL
41
Java_nsk_stress_jni_JNIter003_jniInitArrays (JNIEnv *env, jobject jobj, jint size) {
42
43
jarray *arrayArray;
44
jboolean *boolBuf;
45
jbyte *byteBuf;
46
jchar *charBuf;
47
jshort *shortBuf;
48
jint *intBuf;
49
jlong *longBuf;
50
jfloat *floatBuf;
51
jdouble *doubleBuf;
52
jobjectArray objectsArray;
53
54
int i;
55
int SIZE=size;
56
const char *classname="java/lang/Object";
57
jclass clazz = env->FindClass(classname); CE
58
objectsArray = env->NewObjectArray(8,clazz, env->AllocObject(clazz));
59
60
arrayArray=(jarray *)malloc(8*sizeof(jarray)); CE
61
arrayArray[BOOL]=env->NewBooleanArray(SIZE); CE
62
arrayArray[BYTE]=env->NewByteArray(SIZE); CE
63
arrayArray[CHAR]=env->NewCharArray(SIZE); CE
64
arrayArray[SHORT]=env->NewShortArray(SIZE); CE
65
arrayArray[INT]=env->NewIntArray(SIZE); CE
66
arrayArray[LONG]=env->NewLongArray(SIZE); CE
67
arrayArray[FLOAT]=env->NewFloatArray(SIZE); CE
68
arrayArray[DOUBLE]=env->NewDoubleArray(SIZE); CE
69
70
for (i=0;i<8;i++)
71
{ env->SetObjectArrayElement(objectsArray,i,arrayArray[i]); CE }
72
73
boolBuf=(jboolean *)malloc(SIZE*sizeof(jboolean));
74
byteBuf=(jbyte *)malloc(SIZE*sizeof(jbyte));
75
charBuf=(jchar *)malloc(SIZE*sizeof(jchar));
76
shortBuf=(jshort *)malloc(SIZE*sizeof(jshort));
77
intBuf=(jint *)malloc(SIZE*sizeof(jint));
78
longBuf=(jlong *)malloc(SIZE*sizeof(jlong));
79
floatBuf=(jfloat *)malloc(SIZE*sizeof(jfloat));
80
doubleBuf=(jdouble *)malloc(SIZE*sizeof(jdouble));
81
82
for (i=0;i<SIZE;i++) {
83
if (i%2 == 0) boolBuf[i]=JNI_TRUE;
84
else boolBuf[i]=JNI_FALSE;
85
/*
86
byteBuf[i]=(jbyte)random();
87
charBuf[i]=(jchar)random();
88
shortBuf[i]=(jshort)random();
89
intBuf[i]=(jint)random();
90
longBuf[i]=(jlong)random();
91
floatBuf[i]=(jfloat)((random()));
92
doubleBuf[i]=(jdouble)((random()));
93
*/
94
byteBuf[i]=(jbyte)109;
95
charBuf[i]=(jchar)214;
96
shortBuf[i]=(jshort)9223;
97
intBuf[i]=(jint)872634;
98
longBuf[i]=(jlong)276458276;
99
floatBuf[i]=(jfloat)235.4576284;
100
doubleBuf[i]=(jdouble)98275.716253567;
101
}
102
env->SetBooleanArrayRegion((jbooleanArray) arrayArray[BOOL],0,i,boolBuf); CE
103
env->SetByteArrayRegion((jbyteArray) arrayArray[BYTE],0,i,byteBuf); CE
104
env->SetCharArrayRegion((jcharArray) arrayArray[CHAR],0,i,charBuf); CE
105
env->SetShortArrayRegion((jshortArray) arrayArray[SHORT],0,i,shortBuf); CE
106
env->SetIntArrayRegion((jintArray) arrayArray[INT],0,i,intBuf); CE
107
env->SetLongArrayRegion((jlongArray) arrayArray[LONG],0,i,longBuf); CE
108
env->SetFloatArrayRegion((jfloatArray) arrayArray[FLOAT],0,i,floatBuf); CE
109
env->SetDoubleArrayRegion((jdoubleArray) arrayArray[DOUBLE],0,i,doubleBuf); CE
110
111
free(doubleBuf);
112
free(floatBuf);
113
free(longBuf);
114
free(intBuf);
115
free(shortBuf);
116
free(byteBuf);
117
free(charBuf);
118
free(boolBuf);
119
free(arrayArray);
120
121
return objectsArray;
122
}
123
124
JNIEXPORT jboolean JNICALL
125
Java_nsk_stress_jni_JNIter003_jniBodyChangeArray (JNIEnv *env, jobject jobj,
126
jobjectArray orig, jobjectArray clone, jint limit) {
127
128
#define SWAP(param1, param2) tmparr=param2; param2=param1; param1=tmparr;
129
#define SIZE(type) env->GetArrayLength(arrayClone[type])
130
131
static volatile long count=0;
132
jarray *arrayOrig, *arrayClone;
133
jboolean *boolOrig, *boolClone;
134
jbyte *byteOrig, *byteClone;
135
jchar *charOrig, *charClone;
136
jshort *shortOrig, *shortClone;
137
jint *intOrig, *intClone;
138
jlong *longOrig, *longClone;
139
jfloat *floatOrig, *floatClone;
140
jdouble *doubleOrig, *doubleClone;
141
int i;
142
143
if ((orig == NULL) || (clone == NULL)) {
144
fprintf(stderr,"JNI received a NULL array from Java\n");
145
return JNI_FALSE;
146
}
147
if (count == limit) {
148
jclass clazz;
149
const char *classname = "nsk/stress/jni/JNIter003";
150
const char *setdone = "halt";
151
const char *setdonesig = "()V";
152
jmethodID jmethod;
153
154
fprintf(stderr, "Count and limit are: %ld\t%d cons.\n", count, limit);
155
clazz=env->FindClass(classname); CE
156
jmethod=env->GetMethodID(clazz, setdone, setdonesig); CE
157
env->CallVoidMethod(jobj, jmethod); CE
158
159
return JNI_TRUE;
160
}
161
env->MonitorEnter(jobj); CE
162
++count;
163
env->MonitorExit(jobj); CE
164
arrayOrig=(jarray *)malloc(8*sizeof(jarray));
165
arrayClone=(jarray *)malloc(8*sizeof(jarray));
166
for (i=0;i<8;i++) {
167
arrayOrig[i]=(jarray) env->GetObjectArrayElement(orig,i); CE
168
arrayClone[i]=(jarray) env->GetObjectArrayElement(clone,i); CE
169
}
170
171
/* Take the elements from Java arrays into native buffers */
172
/* Use Get<Type>ArrayElements */
173
boolOrig = env->GetBooleanArrayElements((jbooleanArray) arrayOrig[BOOL],0); CE
174
byteOrig = env->GetByteArrayElements((jbyteArray) arrayOrig[BYTE],0); CE
175
charOrig = env->GetCharArrayElements((jcharArray) arrayOrig[CHAR],0); CE
176
shortOrig = env->GetShortArrayElements((jshortArray) arrayOrig[SHORT],0); CE
177
intOrig = env->GetIntArrayElements((jintArray) arrayOrig[INT],0); CE
178
longOrig = env->GetLongArrayElements((jlongArray) arrayOrig[LONG],0); CE
179
floatOrig = env->GetFloatArrayElements((jfloatArray) arrayOrig[FLOAT],0); CE
180
doubleOrig = env->GetDoubleArrayElements((jdoubleArray) arrayOrig[DOUBLE],0); CE
181
182
/* Alloc some memory for cloned arrays buffers */
183
boolClone=(jboolean *)malloc(SIZE(BOOL)*sizeof(jboolean));
184
byteClone=(jbyte *)malloc(SIZE(BYTE)*sizeof(jbyte));
185
charClone=(jchar *)malloc(SIZE(CHAR)*sizeof(jchar));
186
shortClone=(jshort *)malloc(SIZE(SHORT)*sizeof(jshort));
187
intClone=(jint *)malloc(SIZE(INT)*sizeof(jint));
188
longClone=(jlong *)malloc(SIZE(LONG)*sizeof(jlong));
189
floatClone=(jfloat *)malloc(SIZE(FLOAT)*sizeof(jfloat));
190
doubleClone=(jdouble *)malloc(SIZE(DOUBLE)*sizeof(jdouble));
191
192
/* Take the elements from cloned Java arrays into native buffers */
193
/* Use Get<Type>ArrayRegion */
194
env->GetBooleanArrayRegion((jbooleanArray) arrayClone[BOOL],0,SIZE(BOOL),boolClone); CE
195
env->GetByteArrayRegion((jbyteArray) arrayClone[BYTE],0,SIZE(BYTE),byteClone); CE
196
env->GetCharArrayRegion((jcharArray) arrayClone[CHAR],0,SIZE(CHAR),charClone); CE
197
env->GetShortArrayRegion((jshortArray) arrayClone[SHORT],0,SIZE(SHORT),shortClone); CE
198
env->GetIntArrayRegion((jintArray) arrayClone[INT],0,SIZE(INT),intClone); CE
199
env->GetLongArrayRegion((jlongArray) arrayClone[LONG],0,SIZE(LONG),longClone); CE
200
env->GetFloatArrayRegion((jfloatArray) arrayClone[FLOAT],0,SIZE(FLOAT),floatClone); CE
201
env->GetDoubleArrayRegion((jdoubleArray) arrayClone[DOUBLE],0,SIZE(DOUBLE),doubleClone); CE
202
203
/* In this code section I should make some changes for elements into both */
204
/* (original and cloned) arrays and than copied new values back to Java */
205
206
/*
207
Can't change the pointer into the Java structure. It's illegal JNI.
208
SWAP(boolOrig,boolClone)
209
SWAP(byteOrig,byteClone)
210
SWAP(charOrig,charClone)
211
SWAP(shortOrig,shortClone)
212
SWAP(intOrig,intClone)
213
SWAP(longOrig,longClone)
214
SWAP(floatOrig,floatClone)
215
SWAP(doubleOrig,doubleClone)
216
*/
217
218
/* Coping new values of elements back to Java and releasing native buffers */
219
/* Use Set<Type>ArrayRegion */
220
/*
221
Use Orig pointers to get the original effect of the test.
222
env->SetBooleanArrayRegion(arrayClone[BOOL],0,SIZE(BOOL),boolClone);
223
env->SetByteArrayRegion(arrayClone[BYTE],0,SIZE(BYTE),byteClone);
224
env->SetCharArrayRegion(arrayClone[CHAR],0,SIZE(CHAR),charClone);
225
env->SetShortArrayRegion(arrayClone[SHORT],0,SIZE(SHORT),shortClone);
226
env->SetIntArrayRegion(arrayClone[INT],0,SIZE(INT),intClone);
227
env->SetLongArrayRegion(arrayClone[LONG],0,SIZE(LONG),longClone);
228
env->SetFloatArrayRegion(arrayClone[FLOAT],0,SIZE(FLOAT),floatClone);
229
env->SetDoubleArrayRegion(arrayClone[DOUBLE],0,SIZE(DOUBLE),doubleClone);
230
*/
231
env->SetBooleanArrayRegion((jbooleanArray) arrayClone[BOOL],0,SIZE(BOOL),boolOrig); CE
232
env->SetByteArrayRegion((jbyteArray) arrayClone[BYTE],0,SIZE(BYTE),byteOrig); CE
233
env->SetCharArrayRegion((jcharArray) arrayClone[CHAR],0,SIZE(CHAR),charOrig); CE
234
env->SetShortArrayRegion((jshortArray) arrayClone[SHORT],0,SIZE(SHORT),shortOrig); CE
235
env->SetIntArrayRegion((jintArray) arrayClone[INT],0,SIZE(INT),intOrig); CE
236
env->SetLongArrayRegion((jlongArray) arrayClone[LONG],0,SIZE(LONG),longOrig); CE
237
env->SetFloatArrayRegion((jfloatArray) arrayClone[FLOAT],0,SIZE(FLOAT),floatOrig); CE
238
env->SetDoubleArrayRegion((jdoubleArray) arrayClone[DOUBLE],0,SIZE(DOUBLE),doubleOrig); CE
239
240
/* Use Release<Type>ArrayElements */
241
env->ReleaseDoubleArrayElements((jdoubleArray) arrayOrig[DOUBLE],doubleOrig,0); CE
242
env->ReleaseFloatArrayElements((jfloatArray) arrayOrig[FLOAT],floatOrig,0); CE
243
env->ReleaseLongArrayElements((jlongArray) arrayOrig[LONG],longOrig,0); CE
244
env->ReleaseIntArrayElements((jintArray) arrayOrig[INT],intOrig,0); CE
245
env->ReleaseShortArrayElements((jshortArray) arrayOrig[SHORT],shortOrig,0); CE
246
env->ReleaseCharArrayElements((jcharArray) arrayOrig[CHAR],charOrig,0); CE
247
env->ReleaseByteArrayElements((jbyteArray) arrayOrig[BYTE],byteOrig,0); CE
248
env->ReleaseBooleanArrayElements((jbooleanArray) arrayOrig[BOOL],boolOrig,0); CE
249
free(arrayOrig);
250
251
free(doubleClone);
252
free(floatClone);
253
free(longClone);
254
free(intClone);
255
free(shortClone);
256
free(byteClone);
257
free(charClone);
258
free(boolClone);
259
free(arrayClone);
260
261
return JNI_TRUE;
262
}
263
264
}
265
266