Home / Class/ HpackEncoderBenchmarkUniqueValues Class — netty Architecture

HpackEncoderBenchmarkUniqueValues Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  2d9d1287_c63f_dcba_fd05_9eab3f019b5f["HpackEncoderBenchmarkUniqueValues"]
  89e2b136_270c_0ccc_c758_49af13878d16["HpackEncoderBenchmarkUniqueValues.java"]
  2d9d1287_c63f_dcba_fd05_9eab3f019b5f -->|defined in| 89e2b136_270c_0ccc_c758_49af13878d16
  8a6b096e_6668_b615_1479_0246c1079565["setup()"]
  2d9d1287_c63f_dcba_fd05_9eab3f019b5f -->|method| 8a6b096e_6668_b615_1479_0246c1079565
  d697d6a2_13d7_2557_b11d_772432285850["encode()"]
  2d9d1287_c63f_dcba_fd05_9eab3f019b5f -->|method| d697d6a2_13d7_2557_b11d_772432285850
  3e6ce29c_73ee_88de_57c3_bffef8fa5d69["generateRandomPaths()"]
  2d9d1287_c63f_dcba_fd05_9eab3f019b5f -->|method| 3e6ce29c_73ee_88de_57c3_bffef8fa5d69
  02609e34_11d3_fca6_9a90_91b009312990["AsciiString()"]
  2d9d1287_c63f_dcba_fd05_9eab3f019b5f -->|method| 02609e34_11d3_fca6_9a90_91b009312990

Relationship Graph

Source Code

microbench/src/main/java/io/netty/handler/codec/http2/HpackEncoderBenchmarkUniqueValues.java lines 39–113

@Fork(5)
@Threads(1)
@State(Scope.Benchmark)
@Warmup(iterations = 5)
@Measurement(iterations = 5)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(Mode.AverageTime)
public class HpackEncoderBenchmarkUniqueValues extends AbstractMicrobenchmark {

    @Param({"fewHeaders", "manyPaths", "tracesWithUniqueValues"})
    private String type;

    private final AsciiString[] PATHS = generateRandomPaths(20);

    private final Random r = new Random();

    private final Http2Headers[] http2Headers = new Http2Headers[1000];

    private final HpackEncoder[] hpackEncoder = new HpackEncoder[1000];

    private final ByteBuf output = Unpooled.buffer(10, 10000);

    @Setup
    public void setup() throws Http2Exception {
        for (int i = 0; i < http2Headers.length; i++) {
            DefaultHttp2Headers headers = new DefaultHttp2Headers();
            if (type.equals("tracesWithUniqueValues")) {
                headers.add(AsciiString.of("traceid"), randomAsciiString(20));
            }
            headers.add(AsciiString.of("key1"), AsciiString.of("value1"));
            headers.add(AsciiString.of("key12"), AsciiString.of("value12"));
            headers.add(AsciiString.of("key123"), AsciiString.of("value123"));
            if (type.equals("manyPaths")) {
                headers.add(AsciiString.of(":path"), AsciiString.of("/path/to/" + PATHS[r.nextInt(PATHS.length)]));
            }
            headers.add(AsciiString.of(":method"), AsciiString.of("POST"));
            headers.add(AsciiString.of("content-encoding"), AsciiString.of("grpc-encoding"));
            http2Headers[i] = headers;
        }

        for (int i = 0; i < hpackEncoder.length; i++) {
            hpackEncoder[i] = new HpackEncoder();
            for (Http2Headers headers: http2Headers) {
                output.clear();
                hpackEncoder[i].encodeHeaders(3, output, headers, Http2HeadersEncoder.NEVER_SENSITIVE);
            }
        }
    }

    @Benchmark
    public void encode(Blackhole bh) throws Exception {
        output.clear();

        Http2Headers headers = http2Headers[r.nextInt(http2Headers.length)];

        // select between many encoders to prevent the encoder state from staying in the cpu L1 cache.
        HpackEncoder encoder = hpackEncoder[r.nextInt(hpackEncoder.length)];
        encoder.encodeHeaders(3, output, headers, Http2HeadersEncoder.NEVER_SENSITIVE);

        bh.consume(output);
    }

    private static AsciiString[] generateRandomPaths(int size) {
        AsciiString[] paths = new AsciiString[size];
        for (int i = 0; i < size; i++) {
            paths[i] = randomAsciiString(20);
        }
        return paths;
    }

    private static AsciiString randomAsciiString(int length) {
        return AsciiString.of(HpackHeader.createHeaders(1, 10, length, true).get(0).value);
    }

}

Frequently Asked Questions

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

Analyze Your Own Codebase

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

Try Supermodel Free