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);
Source
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