Home / Class/ DataFrameHeader Class — netty Architecture

DataFrameHeader Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  04abad0f_8793_fb74_8fcd_e6ba7ef5d1b8["DataFrameHeader"]
  e1e4d882_21be_606e_52ad_16ef439ff80f["Http2FrameWriterDataBenchmark.java"]
  04abad0f_8793_fb74_8fcd_e6ba7ef5d1b8 -->|defined in| e1e4d882_21be_606e_52ad_16ef439ff80f
  1c7370c4_c604_5d40_5979_39169e4dbcf6["DataFrameHeader()"]
  04abad0f_8793_fb74_8fcd_e6ba7ef5d1b8 -->|method| 1c7370c4_c604_5d40_5979_39169e4dbcf6
  f58afd80_2dcc_b205_a069_6d6dd9a94949["ByteBuf()"]
  04abad0f_8793_fb74_8fcd_e6ba7ef5d1b8 -->|method| f58afd80_2dcc_b205_a069_6d6dd9a94949
  b4a421ea_c751_7b9f_d674_8b2936b52696["release()"]
  04abad0f_8793_fb74_8fcd_e6ba7ef5d1b8 -->|method| b4a421ea_c751_7b9f_d674_8b2936b52696

Relationship Graph

Source Code

microbench/src/main/java/io/netty/handler/codec/http2/Http2FrameWriterDataBenchmark.java lines 197–240

        private static final class DataFrameHeader {
            private final int streamId;
            private final ByteBuf buffer;
            private final Http2Flags flags = new Http2Flags();
            private int prevData;
            private int prevPadding;
            private ByteBuf frameHeader;

            DataFrameHeader(ChannelHandlerContext ctx, int streamId) {
                // All padding will be put at the end, so in the worst case we need 3 headers:
                // a repeated no-padding frame of maxFrameSize, a frame that has part data and part
                // padding, and a frame that has the remainder of the padding.
                buffer = ctx.alloc().buffer(3 * DATA_FRAME_HEADER_LENGTH);
                this.streamId = streamId;
            }

            /**
             * Gets the frame header buffer configured for the current frame.
             */
            ByteBuf slice(int data, int padding, boolean endOfStream) {
                // Since we're reusing the current frame header whenever possible, check if anything changed
                // that requires a new header.
                if (data != prevData || padding != prevPadding
                        || endOfStream != flags.endOfStream() || frameHeader == null) {
                    // Update the header state.
                    prevData = data;
                    prevPadding = padding;
                    flags.paddingPresent(padding > 0);
                    flags.endOfStream(endOfStream);
                    frameHeader = buffer.slice(buffer.readerIndex(), DATA_FRAME_HEADER_LENGTH).writerIndex(0);
                    buffer.setIndex(buffer.readerIndex() + DATA_FRAME_HEADER_LENGTH,
                            buffer.writerIndex() + DATA_FRAME_HEADER_LENGTH);

                    int payloadLength = data + padding;
                    writeFrameHeaderInternal(frameHeader, payloadLength, DATA, flags, streamId);
                    writePaddingLength(frameHeader, padding);
                }
                return frameHeader.slice();
            }

            void release() {
                buffer.release();
            }
        }

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free