Home / Class/ HpackUtilBenchmark Class — netty Architecture

HpackUtilBenchmark Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  6fbca480_1d41_a552_c2e8_0045d9099068["HpackUtilBenchmark"]
  6c1cb4fb_5472_fece_efc2_b99b613e68a4["HpackUtilBenchmark.java"]
  6fbca480_1d41_a552_c2e8_0045d9099068 -->|defined in| 6c1cb4fb_5472_fece_efc2_b99b613e68a4
  818ae7d2_7151_b7e1_50e3_43311a1b12c6["setup()"]
  6fbca480_1d41_a552_c2e8_0045d9099068 -->|method| 818ae7d2_7151_b7e1_50e3_43311a1b12c6
  92eb2e9e_19bb_2429_5659_8e4c8557ed1d["oldEquals()"]
  6fbca480_1d41_a552_c2e8_0045d9099068 -->|method| 92eb2e9e_19bb_2429_5659_8e4c8557ed1d
  be919473_c157_01ab_9fd8_5f5e954db131["newEquals()"]
  6fbca480_1d41_a552_c2e8_0045d9099068 -->|method| be919473_c157_01ab_9fd8_5f5e954db131
  2a679bc3_c774_a6d8_2d4f_3ce419720ebc["HpackEncoder()"]
  6fbca480_1d41_a552_c2e8_0045d9099068 -->|method| 2a679bc3_c774_a6d8_2d4f_3ce419720ebc

Relationship Graph

Source Code

microbench/src/main/java/io/netty/handler/codec/http2/HpackUtilBenchmark.java lines 37–113

@Threads(1)
@Warmup(iterations = 5)
@Measurement(iterations = 5)
public class HpackUtilBenchmark extends AbstractMicrobenchmark {
    @Param
    public HpackHeadersSize size;

    private List<HpackHeader> hpackHeaders;

    @Setup(Level.Trial)
    public void setup() {
        hpackHeaders = HpackBenchmarkUtil.headers(size, false);
    }

    @Benchmark
    public int oldEquals() {
        int count = 0;
        for (int i = 0; i < hpackHeaders.size(); ++i) {
            HpackHeader hpackHeader = hpackHeaders.get(i);
            if (oldEquals(hpackHeader.name, hpackHeader.name)) {
                ++count;
            }
        }
        return count;
    }

    @Benchmark
    public int newEquals() {
        int count = 0;
        for (int i = 0; i < hpackHeaders.size(); ++i) {
            HpackHeader hpackHeader = hpackHeaders.get(i);
            if (newEquals(hpackHeader.name, hpackHeader.name)) {
                ++count;
            }
        }
        return count;
    }

    private static boolean oldEquals(CharSequence s1, CharSequence s2) {
        if (s1.length() != s2.length()) {
            return false;
        }
        char c = 0;
        for (int i = 0; i < s1.length(); i++) {
            c |= s1.charAt(i) ^ s2.charAt(i);
        }
        return c == 0;
    }

    private static boolean newEquals(CharSequence s1, CharSequence s2) {
        if (s1 instanceof AsciiString && s2 instanceof AsciiString) {
            if (s1.length() != s2.length()) {
                return false;
            }
            AsciiString s1Ascii = (AsciiString) s1;
            AsciiString s2Ascii = (AsciiString) s2;
            return PlatformDependent.equalsConstantTime(s1Ascii.array(), s1Ascii.arrayOffset(),
                                                        s2Ascii.array(), s2Ascii.arrayOffset(), s1.length()) != 0;
        }

        return ConstantTimeUtils.equalsConstantTime(s1, s2) != 0;
    }

    static HpackEncoder newTestEncoder() {
        HpackEncoder hpackEncoder = new HpackEncoder();
        ByteBuf buf = Unpooled.buffer();
        try {
            hpackEncoder.setMaxHeaderTableSize(buf, MAX_HEADER_TABLE_SIZE);
            hpackEncoder.setMaxHeaderListSize(MAX_HEADER_LIST_SIZE);
        } catch (Http2Exception e) {
            throw new Error("max size not allowed?", e);
        } finally  {
            buf.release();
        }
        return hpackEncoder;
    }
}

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free