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