26 import java.lang.foreign.*;
27
28 import org.openjdk.jmh.annotations.Benchmark;
29 import org.openjdk.jmh.annotations.BenchmarkMode;
30 import org.openjdk.jmh.annotations.Fork;
31 import org.openjdk.jmh.annotations.TearDown;
32 import org.openjdk.jmh.annotations.Measurement;
33 import org.openjdk.jmh.annotations.Mode;
34 import org.openjdk.jmh.annotations.OutputTimeUnit;
35 import org.openjdk.jmh.annotations.State;
36 import org.openjdk.jmh.annotations.Warmup;
37
38 import java.lang.invoke.MethodHandle;
39 import java.util.concurrent.TimeUnit;
40
41 @BenchmarkMode(Mode.AverageTime)
42 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
43 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
44 @State(org.openjdk.jmh.annotations.Scope.Thread)
45 @OutputTimeUnit(TimeUnit.NANOSECONDS)
46 @Fork(value = 3, jvmArgsAppend = { "--enable-native-access=ALL-UNNAMED", "--enable-preview" })
47 public class PointerInvoke extends CLayouts {
48
49 Arena arena = Arena.ofConfined();
50 MemorySegment segment = arena.allocate(100, 1);
51
52 static {
53 System.loadLibrary("Ptr");
54 }
55
56 static final MethodHandle F_LONG_LONG, F_PTR_LONG, F_LONG_PTR, F_PTR_PTR;
57
58 static {
59 Linker abi = Linker.nativeLinker();
60 SymbolLookup loaderLibs = SymbolLookup.loaderLookup();
61 F_LONG_LONG = abi.downcallHandle(loaderLibs.find("id_long_long").get(),
62 FunctionDescriptor.of(C_LONG_LONG, C_LONG_LONG));
63 F_PTR_LONG = abi.downcallHandle(loaderLibs.find("id_ptr_long").get(),
64 FunctionDescriptor.of(C_LONG_LONG, C_POINTER));
65 F_LONG_PTR = abi.downcallHandle(loaderLibs.find("id_long_ptr").get(),
66 FunctionDescriptor.of(C_POINTER, C_LONG_LONG));
|
26 import java.lang.foreign.*;
27
28 import org.openjdk.jmh.annotations.Benchmark;
29 import org.openjdk.jmh.annotations.BenchmarkMode;
30 import org.openjdk.jmh.annotations.Fork;
31 import org.openjdk.jmh.annotations.TearDown;
32 import org.openjdk.jmh.annotations.Measurement;
33 import org.openjdk.jmh.annotations.Mode;
34 import org.openjdk.jmh.annotations.OutputTimeUnit;
35 import org.openjdk.jmh.annotations.State;
36 import org.openjdk.jmh.annotations.Warmup;
37
38 import java.lang.invoke.MethodHandle;
39 import java.util.concurrent.TimeUnit;
40
41 @BenchmarkMode(Mode.AverageTime)
42 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
43 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
44 @State(org.openjdk.jmh.annotations.Scope.Thread)
45 @OutputTimeUnit(TimeUnit.NANOSECONDS)
46 @Fork(value = 3, jvmArgsAppend = { "--enable-native-access=ALL-UNNAMED" })
47 public class PointerInvoke extends CLayouts {
48
49 Arena arena = Arena.ofConfined();
50 MemorySegment segment = arena.allocate(100, 1);
51
52 static {
53 System.loadLibrary("Ptr");
54 }
55
56 static final MethodHandle F_LONG_LONG, F_PTR_LONG, F_LONG_PTR, F_PTR_PTR;
57
58 static {
59 Linker abi = Linker.nativeLinker();
60 SymbolLookup loaderLibs = SymbolLookup.loaderLookup();
61 F_LONG_LONG = abi.downcallHandle(loaderLibs.find("id_long_long").get(),
62 FunctionDescriptor.of(C_LONG_LONG, C_LONG_LONG));
63 F_PTR_LONG = abi.downcallHandle(loaderLibs.find("id_ptr_long").get(),
64 FunctionDescriptor.of(C_LONG_LONG, C_POINTER));
65 F_LONG_PTR = abi.downcallHandle(loaderLibs.find("id_long_ptr").get(),
66 FunctionDescriptor.of(C_POINTER, C_LONG_LONG));
|