30 import org.openjdk.jmh.annotations.OutputTimeUnit;
31 import org.openjdk.jmh.annotations.Scope;
32 import org.openjdk.jmh.annotations.State;
33 import org.openjdk.jmh.annotations.Warmup;
34
35 import java.lang.foreign.Arena;
36 import java.lang.foreign.Linker;
37 import java.lang.foreign.FunctionDescriptor;
38 import java.lang.foreign.MemorySegment;
39 import java.lang.invoke.MethodHandle;
40 import java.lang.invoke.MethodType;
41 import java.util.concurrent.TimeUnit;
42
43 import static java.lang.invoke.MethodHandles.lookup;
44
45 @BenchmarkMode(Mode.AverageTime)
46 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
47 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
48 @State(Scope.Benchmark)
49 @OutputTimeUnit(TimeUnit.MICROSECONDS)
50 @Fork(value = 3, jvmArgsAppend = { "--enable-native-access=ALL-UNNAMED", "--enable-preview" })
51 public class LinkUpcall extends CLayouts {
52
53 static final Linker LINKER = Linker.nativeLinker();
54 static final MethodHandle BLANK;
55 static final FunctionDescriptor BLANK_DESC = FunctionDescriptor.ofVoid();
56
57 static {
58 try {
59 BLANK = lookup().findStatic(LinkUpcall.class, "blank", MethodType.methodType(void.class));
60 } catch (ReflectiveOperationException e) {
61 throw new ExceptionInInitializerError(e);
62 }
63 }
64
65 @Benchmark
66 public MemorySegment link_blank() {
67 try (Arena arena = Arena.ofConfined()) {
68 return LINKER.upcallStub(BLANK, BLANK_DESC, arena);
69 }
70 }
|
30 import org.openjdk.jmh.annotations.OutputTimeUnit;
31 import org.openjdk.jmh.annotations.Scope;
32 import org.openjdk.jmh.annotations.State;
33 import org.openjdk.jmh.annotations.Warmup;
34
35 import java.lang.foreign.Arena;
36 import java.lang.foreign.Linker;
37 import java.lang.foreign.FunctionDescriptor;
38 import java.lang.foreign.MemorySegment;
39 import java.lang.invoke.MethodHandle;
40 import java.lang.invoke.MethodType;
41 import java.util.concurrent.TimeUnit;
42
43 import static java.lang.invoke.MethodHandles.lookup;
44
45 @BenchmarkMode(Mode.AverageTime)
46 @Warmup(iterations = 5, time = 500, timeUnit = TimeUnit.MILLISECONDS)
47 @Measurement(iterations = 10, time = 500, timeUnit = TimeUnit.MILLISECONDS)
48 @State(Scope.Benchmark)
49 @OutputTimeUnit(TimeUnit.MICROSECONDS)
50 @Fork(value = 3, jvmArgsAppend = { "--enable-native-access=ALL-UNNAMED" })
51 public class LinkUpcall extends CLayouts {
52
53 static final Linker LINKER = Linker.nativeLinker();
54 static final MethodHandle BLANK;
55 static final FunctionDescriptor BLANK_DESC = FunctionDescriptor.ofVoid();
56
57 static {
58 try {
59 BLANK = lookup().findStatic(LinkUpcall.class, "blank", MethodType.methodType(void.class));
60 } catch (ReflectiveOperationException e) {
61 throw new ExceptionInInitializerError(e);
62 }
63 }
64
65 @Benchmark
66 public MemorySegment link_blank() {
67 try (Arena arena = Arena.ofConfined()) {
68 return LINKER.upcallStub(BLANK, BLANK_DESC, arena);
69 }
70 }
|