29 import org.openjdk.jmh.annotations.Fork;
30 import org.openjdk.jmh.annotations.Measurement;
31 import org.openjdk.jmh.annotations.Mode;
32 import org.openjdk.jmh.annotations.OutputTimeUnit;
33 import org.openjdk.jmh.annotations.State;
34 import org.openjdk.jmh.annotations.Warmup;
35
36 import java.lang.foreign.Arena;
37 import java.lang.invoke.MethodHandle;
38 import java.lang.invoke.MethodType;
39 import java.util.concurrent.TimeUnit;
40
41 import static java.lang.invoke.MethodHandles.lookup;
42 import static java.lang.foreign.ValueLayout.JAVA_INT;
43
44 @BenchmarkMode(Mode.AverageTime)
45 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
46 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
47 @State(org.openjdk.jmh.annotations.Scope.Thread)
48 @OutputTimeUnit(TimeUnit.NANOSECONDS)
49 @Fork(value = 3, jvmArgsAppend = { "--enable-native-access=ALL-UNNAMED", "--enable-preview" })
50 public class QSort extends CLayouts {
51
52 static final Linker abi = Linker.nativeLinker();
53 static final MethodHandle clib_qsort;
54 static final MemorySegment native_compar;
55 static final MemorySegment panama_upcall_compar;
56 static final long jni_upcall_compar;
57
58 static final int[] INPUT = { 5, 3, 2, 7, 8, 12, 1, 7 };
59 static final MemorySegment INPUT_SEGMENT;
60
61 static MemorySegment qsort_addr = abi.defaultLookup().find("qsort").get();
62
63 static {
64 MemoryLayout layout = MemoryLayout.sequenceLayout(INPUT.length, JAVA_INT);
65 INPUT_SEGMENT = Arena.global().allocate(layout);
66 INPUT_SEGMENT.copyFrom(MemorySegment.ofArray(INPUT));
67
68 System.loadLibrary("QSortJNI");
69 jni_upcall_compar = JNICB.makeCB("org/openjdk/bench/java/lang/foreign/QSort", "jni_upcall_compar", "(II)I");
|
29 import org.openjdk.jmh.annotations.Fork;
30 import org.openjdk.jmh.annotations.Measurement;
31 import org.openjdk.jmh.annotations.Mode;
32 import org.openjdk.jmh.annotations.OutputTimeUnit;
33 import org.openjdk.jmh.annotations.State;
34 import org.openjdk.jmh.annotations.Warmup;
35
36 import java.lang.foreign.Arena;
37 import java.lang.invoke.MethodHandle;
38 import java.lang.invoke.MethodType;
39 import java.util.concurrent.TimeUnit;
40
41 import static java.lang.invoke.MethodHandles.lookup;
42 import static java.lang.foreign.ValueLayout.JAVA_INT;
43
44 @BenchmarkMode(Mode.AverageTime)
45 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
46 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
47 @State(org.openjdk.jmh.annotations.Scope.Thread)
48 @OutputTimeUnit(TimeUnit.NANOSECONDS)
49 @Fork(value = 3, jvmArgsAppend = { "--enable-native-access=ALL-UNNAMED" })
50 public class QSort extends CLayouts {
51
52 static final Linker abi = Linker.nativeLinker();
53 static final MethodHandle clib_qsort;
54 static final MemorySegment native_compar;
55 static final MemorySegment panama_upcall_compar;
56 static final long jni_upcall_compar;
57
58 static final int[] INPUT = { 5, 3, 2, 7, 8, 12, 1, 7 };
59 static final MemorySegment INPUT_SEGMENT;
60
61 static MemorySegment qsort_addr = abi.defaultLookup().find("qsort").get();
62
63 static {
64 MemoryLayout layout = MemoryLayout.sequenceLayout(INPUT.length, JAVA_INT);
65 INPUT_SEGMENT = Arena.global().allocate(layout);
66 INPUT_SEGMENT.copyFrom(MemorySegment.ofArray(INPUT));
67
68 System.loadLibrary("QSortJNI");
69 jni_upcall_compar = JNICB.makeCB("org/openjdk/bench/java/lang/foreign/QSort", "jni_upcall_compar", "(II)I");
|