Home / Class/ VarintDecodingBenchmark Class — netty Architecture

VarintDecodingBenchmark Class — netty Architecture

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

Entity Profile

Dependency Diagram

graph TD
  f083df4b_1f17_0498_9ee1_c9dd1d401573["VarintDecodingBenchmark"]
  f116556f_1b44_6dd1_8b28_55c99fd83a3c["VarintDecodingBenchmark.java"]
  f083df4b_1f17_0498_9ee1_c9dd1d401573 -->|defined in| f116556f_1b44_6dd1_8b28_55c99fd83a3c
  598f5b25_6a52_52e1_2144_0c2a5de1a7c0["init()"]
  f083df4b_1f17_0498_9ee1_c9dd1d401573 -->|method| 598f5b25_6a52_52e1_2144_0c2a5de1a7c0
  091879d0_a1de_111d_a8d3_371faaffe800["ByteBuf()"]
  f083df4b_1f17_0498_9ee1_c9dd1d401573 -->|method| 091879d0_a1de_111d_a8d3_371faaffe800
  8ea74eed_880e_f756_20e9_c0ae0c8202bc["oldReadRawVarint32()"]
  f083df4b_1f17_0498_9ee1_c9dd1d401573 -->|method| 8ea74eed_880e_f756_20e9_c0ae0c8202bc
  1bee8094_9c37_8867_6865_0c83bfe3eeb2["readRawVarint32()"]
  f083df4b_1f17_0498_9ee1_c9dd1d401573 -->|method| 1bee8094_9c37_8867_6865_0c83bfe3eeb2

Relationship Graph

Source Code

microbench/src/main/java/io/netty/handler/codec/protobuf/VarintDecodingBenchmark.java lines 36–195

@State(Scope.Benchmark)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@BenchmarkMode(org.openjdk.jmh.annotations.Mode.AverageTime)
@Fork(2)
@Warmup(iterations = 10, time = 400, timeUnit = java.util.concurrent.TimeUnit.MILLISECONDS)
@Measurement(iterations = 5, time = 400, timeUnit = java.util.concurrent.TimeUnit.MILLISECONDS)
public class VarintDecodingBenchmark extends AbstractMicrobenchmark {

    private static final int SEED = 0;

    // Ryzen 7950X is exceptionally good to predict branches, so we need to use A LOT of inputs!
    @Param({ "1", "128", "128000" })
    int inputs;

    public enum InputDistribution {
        SMALL,
        LARGE,
        MEDIUM,
        ALL
    }

    @Param
    InputDistribution inputDistribution;
    ByteBuf[] data;
    int index;

    @Setup
    public void init() {
        ByteBuf[] dataSet;
        switch (inputDistribution) {
        case SMALL:
            dataSet = new ByteBuf[] {
                    generateData(1, 1),
                    generateData(2, 2),
                    generateData(3, 3)
            };
            break;
        case LARGE:
            dataSet = new ByteBuf[] {
                    generateData(5, 5)
            };
            if (inputs > 1) {
                System.exit(1);
            }
            break;
        case MEDIUM:
            dataSet = new ByteBuf[] {
                    generateData(1, 5),
                    generateData(2, 5),
                    generateData(3, 5),
                    generateData(4, 5)
            };
            break;
        case ALL:
            dataSet = new ByteBuf[] {
                    generateData(1, 1),
                    generateData(2, 2),
                    generateData(3, 3),
                    generateData(1, 5),
                    generateData(2, 5),
                    generateData(3, 5),
                    generateData(4, 5),
                    generateData(5, 5)
            };
            break;
        default:
            throw new RuntimeException("Unknown distribution");
        }
        data = new ByteBuf[inputs];
        Random rnd = new Random(SEED);
        for (int i = 0; i < inputs; i++) {
            data[i] = dataSet[rnd.nextInt(dataSet.length)];
        }
        index = 0;
    }

    public static ByteBuf generateData(int varintLength, int capacity) {
        byte[] bytes = new byte[capacity];
        for (int i = 0; i < (varintLength - 1); i++) {
            bytes[i] = (byte) 150;
        }

Frequently Asked Questions

What is the VarintDecodingBenchmark class?
VarintDecodingBenchmark is a class in the netty codebase, defined in microbench/src/main/java/io/netty/handler/codec/protobuf/VarintDecodingBenchmark.java.
Where is VarintDecodingBenchmark defined?
VarintDecodingBenchmark is defined in microbench/src/main/java/io/netty/handler/codec/protobuf/VarintDecodingBenchmark.java at line 36.

Analyze Your Own Codebase

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

Try Supermodel Free