1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package io.netty.util.concurrent;
17
18 import io.netty.channel.nio.NioEventLoopGroup;
19 import io.netty.microbench.util.AbstractMicrobenchmark;
20 import org.openjdk.jmh.annotations.Benchmark;
21 import org.openjdk.jmh.annotations.Level;
22 import org.openjdk.jmh.annotations.Measurement;
23 import org.openjdk.jmh.annotations.Scope;
24 import org.openjdk.jmh.annotations.Setup;
25 import org.openjdk.jmh.annotations.State;
26 import org.openjdk.jmh.annotations.TearDown;
27 import org.openjdk.jmh.annotations.Threads;
28 import org.openjdk.jmh.annotations.Warmup;
29
30 import java.util.concurrent.TimeUnit;
31
32 @Warmup(iterations = 5, time = 3, timeUnit = TimeUnit.SECONDS)
33 @Measurement(iterations = 10, time = 3, timeUnit = TimeUnit.SECONDS)
34 @State(Scope.Benchmark)
35 public class ScheduledFutureTaskDeadlineBenchmark extends AbstractMicrobenchmark {
36 @State(Scope.Thread)
37 public static class ThreadState {
38
39 AbstractScheduledEventExecutor eventLoop;
40 ScheduledFutureTask<?> future;
41
42 @Setup(Level.Trial)
43 public void reset() {
44 eventLoop = (AbstractScheduledEventExecutor) new NioEventLoopGroup(1).next();
45 future = (ScheduledFutureTask<?>) eventLoop.schedule(new Runnable() {
46 @Override
47 public void run() {
48 }
49 }, 100, TimeUnit.DAYS);
50 }
51
52 @TearDown(Level.Trial)
53 public void shutdown() {
54 future.cancel(true);
55 eventLoop.parent().shutdownGracefully().awaitUninterruptibly();
56 }
57 }
58
59 @Benchmark
60 @Threads(1)
61 public long requestDeadline(final ThreadState threadState) {
62 return threadState.future.delayNanos();
63 }
64 }