Home / Class/ DefaultChannelPipelineDuplexHandlerBenchmark Class — netty Architecture

DefaultChannelPipelineDuplexHandlerBenchmark Class — netty Architecture

Architecture documentation for the DefaultChannelPipelineDuplexHandlerBenchmark class in DefaultChannelPipelineDuplexHandlerBenchmark.java from the netty codebase.

Entity Profile

Dependency Diagram

graph TD
  191ff36a_e081_3fd5_1f17_c0403ac3c58c["DefaultChannelPipelineDuplexHandlerBenchmark"]
  fd389e7d_8a70_7b19_be15_b97c13e5f34e["DefaultChannelPipelineDuplexHandlerBenchmark.java"]
  191ff36a_e081_3fd5_1f17_c0403ac3c58c -->|defined in| fd389e7d_8a70_7b19_be15_b97c13e5f34e
  11581a31_8819_da8a_47ac_bcf90616fc72["setup()"]
  191ff36a_e081_3fd5_1f17_c0403ac3c58c -->|method| 11581a31_8819_da8a_47ac_bcf90616fc72
  b0dc5979_f987_2166_ca66_b24c65210162["tearDown()"]
  191ff36a_e081_3fd5_1f17_c0403ac3c58c -->|method| b0dc5979_f987_2166_ca66_b24c65210162
  96b42531_105f_e832_54c4_850e7f7533d9["propagateEvent()"]
  191ff36a_e081_3fd5_1f17_c0403ac3c58c -->|method| 96b42531_105f_e832_54c4_850e7f7533d9
  418d8b37_6da8_9e80_54d7_db0077698b43["parallelPropagateEvent()"]
  191ff36a_e081_3fd5_1f17_c0403ac3c58c -->|method| 418d8b37_6da8_9e80_54d7_db0077698b43

Relationship Graph

Source Code

microbench/src/main/java/io/netty/microbench/channel/DefaultChannelPipelineDuplexHandlerBenchmark.java lines 36–121

@Warmup(iterations = 5, time = 1)
@Measurement(iterations = 5, time = 1)
@State(Scope.Thread)
public class DefaultChannelPipelineDuplexHandlerBenchmark extends AbstractMicrobenchmark {

    private ChannelPipeline pipeline;
    private EmbeddedChannel channel;

    @Param({"true", "false"})
    private boolean duplex;

    @Setup
    public void setup() {
        channel = new EmbeddedChannel() {
            @Override
            public void runPendingTasks() {
                // NO-OP to reduce noise on flush
            }
        };
        // disabling auto-read to reduce noise on flush
        channel.config().setAutoRead(false);
        pipeline = channel.pipeline();
        pipeline.addLast(new ChannelInboundHandlerAdapter() {
            @Override
            public void channelReadComplete(final ChannelHandlerContext ctx) {
                ctx.fireChannelReadComplete();
            }
        });
        // Duplex handlers implements both out/in interfaces causing a scalability issue
        // see https://bugs.openjdk.org/browse/JDK-8180450
        if (duplex) {
            pipeline.addLast(new ChannelDuplexHandler() {
                @Override
                public void channelReadComplete(final ChannelHandlerContext ctx) {
                    ctx.fireChannelReadComplete();
                }

                @Override
                public void flush(final ChannelHandlerContext ctx) {
                    ctx.flush();
                }
            });
            pipeline.addLast(new ChannelDuplexHandler() {
                @Override
                public void channelReadComplete(final ChannelHandlerContext ctx) {
                    ctx.flush();
                }
            });
        } else {
            pipeline.addLast(new ChannelInboundHandlerAdapter() {
                @Override
                public void channelReadComplete(final ChannelHandlerContext ctx) {
                    ctx.fireChannelReadComplete();
                }
            });
            pipeline.addLast(new ChannelOutboundHandlerAdapter() {
                @Override
                public void flush(final ChannelHandlerContext ctx) {
                    ctx.flush();
                }
            });
            pipeline.addLast(new ChannelInboundHandlerAdapter() {
                @Override
                public void channelReadComplete(final ChannelHandlerContext ctx) {
                    ctx.flush();
                }
            });
        }
    }

    @TearDown
    public void tearDown() {
        pipeline.channel().close();
    }

    @Benchmark
    public void propagateEvent(Blackhole hole) {
        hole.consume(pipeline.fireChannelReadComplete());
    }

    @Benchmark

Frequently Asked Questions

What is the DefaultChannelPipelineDuplexHandlerBenchmark class?
DefaultChannelPipelineDuplexHandlerBenchmark is a class in the netty codebase, defined in microbench/src/main/java/io/netty/microbench/channel/DefaultChannelPipelineDuplexHandlerBenchmark.java.
Where is DefaultChannelPipelineDuplexHandlerBenchmark defined?
DefaultChannelPipelineDuplexHandlerBenchmark is defined in microbench/src/main/java/io/netty/microbench/channel/DefaultChannelPipelineDuplexHandlerBenchmark.java at line 36.

Analyze Your Own Codebase

Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.

Try Supermodel Free