Home / Class/ Http2FrameWriterDataBenchmark Class — netty Architecture

Http2FrameWriterDataBenchmark Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  c16761e9_de49_e80d_59c3_563c6abfc477["Http2FrameWriterDataBenchmark"]
  e1e4d882_21be_606e_52ad_16ef439ff80f["Http2FrameWriterDataBenchmark.java"]
  c16761e9_de49_e80d_59c3_563c6abfc477 -->|defined in| e1e4d882_21be_606e_52ad_16ef439ff80f
  34dc6735_19b7_0c17_3789_7ee5fa3bf7c7["setup()"]
  c16761e9_de49_e80d_59c3_563c6abfc477 -->|method| 34dc6735_19b7_0c17_3789_7ee5fa3bf7c7
  2df8753f_2da7_0d9b_ead7_f61d8968f5a7["teardown()"]
  c16761e9_de49_e80d_59c3_563c6abfc477 -->|method| 2df8753f_2da7_0d9b_ead7_f61d8968f5a7
  fbc2060f_cfaa_dd25_658b_e43071ad1994["newWriter()"]
  c16761e9_de49_e80d_59c3_563c6abfc477 -->|method| fbc2060f_cfaa_dd25_658b_e43071ad1994
  896968bd_96b5_2308_fdcf_1798aaba45dd["oldWriter()"]
  c16761e9_de49_e80d_59c3_563c6abfc477 -->|method| 896968bd_96b5_2308_fdcf_1798aaba45dd

Relationship Graph

Source Code

microbench/src/main/java/io/netty/handler/codec/http2/Http2FrameWriterDataBenchmark.java lines 55–242

@Fork(1)
@Warmup(iterations = 5)
@Measurement(iterations = 5)
@State(Scope.Benchmark)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class Http2FrameWriterDataBenchmark extends AbstractMicrobenchmark {
    @Param({ "64", "1024", "4096", "16384", "1048576", "4194304" })
    public int payloadSize;

    @Param({ "0", "100", "255" })
    public int padding;

    @Param({ "true", "false" })
    public boolean pooled;

    private ByteBuf payload;
    private ChannelHandlerContext ctx;
    private Http2DataWriter writer;
    private Http2DataWriter oldWriter;

    @Setup(Level.Trial)
    public void setup() {
        writer = new DefaultHttp2FrameWriter();
        oldWriter = new OldDefaultHttp2FrameWriter();
        payload = pooled ? ByteBufAllocator.DEFAULT.buffer(payloadSize) : Unpooled.buffer(payloadSize);
        payload.writeZero(payloadSize);
        ctx = new EmbeddedChannelWriteReleaseHandlerContext(
                pooled ? ByteBufAllocator.DEFAULT : UnpooledByteBufAllocator.DEFAULT,
                new ChannelInboundHandlerAdapter()) {
            @Override
            protected void handleException(Throwable t) {
                handleUnexpectedException(t);
            }
        };
    }

    @TearDown(Level.Trial)
    public void teardown() throws Exception {
        if (payload != null) {
            payload.release();
        }
        if (ctx != null) {
            ctx.close();
        }
    }

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    public void newWriter() {
        writer.writeData(ctx, 3, payload.retain(), padding, true, ctx.voidPromise());
        ctx.flush();
    }

    @Benchmark
    @BenchmarkMode(Mode.AverageTime)
    public void oldWriter() {
        oldWriter.writeData(ctx, 3, payload.retain(), padding, true, ctx.voidPromise());
        ctx.flush();
    }

    private static final class OldDefaultHttp2FrameWriter implements Http2DataWriter {
        private static final ByteBuf ZERO_BUFFER =
                unreleasableBuffer(directBuffer(MAX_UNSIGNED_BYTE).writeZero(MAX_UNSIGNED_BYTE)).asReadOnly();
        private final int maxFrameSize = DEFAULT_MAX_FRAME_SIZE;
        @Override
        public ChannelFuture writeData(ChannelHandlerContext ctx, int streamId, ByteBuf data,
                                       int padding, boolean endStream, ChannelPromise promise) {
            final Http2CodecUtil.SimpleChannelPromiseAggregator promiseAggregator =
                    new Http2CodecUtil.SimpleChannelPromiseAggregator(promise, ctx.channel(), ctx.executor());
            final DataFrameHeader header = new DataFrameHeader(ctx, streamId);
            boolean needToReleaseHeaders = true;
            boolean needToReleaseData = true;
            try {
                checkPositive(streamId, "streamId");
                verifyPadding(padding);

                boolean lastFrame;
                int remainingData = data.readableBytes();
                do {
                    // Determine how much data and padding to write in this frame. Put all padding at the end.
                    int frameDataBytes = min(remainingData, maxFrameSize);

Frequently Asked Questions

What is the Http2FrameWriterDataBenchmark class?
Http2FrameWriterDataBenchmark is a class in the netty codebase, defined in microbench/src/main/java/io/netty/handler/codec/http2/Http2FrameWriterDataBenchmark.java.
Where is Http2FrameWriterDataBenchmark defined?
Http2FrameWriterDataBenchmark is defined in microbench/src/main/java/io/netty/handler/codec/http2/Http2FrameWriterDataBenchmark.java at line 55.

Analyze Your Own Codebase

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

Try Supermodel Free