Http2PseudoHeadersLookupBenchmark Class — netty Architecture
Architecture documentation for the Http2PseudoHeadersLookupBenchmark class in Http2PseudoHeadersLookupBenchmark.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 098bd603_5fdc_d6b3_c285_95fcd39a73b6["Http2PseudoHeadersLookupBenchmark"] 90a9f25f_2549_d5c0_24f2_4cf845450104["Http2PseudoHeadersLookupBenchmark.java"] 098bd603_5fdc_d6b3_c285_95fcd39a73b6 -->|defined in| 90a9f25f_2549_d5c0_24f2_4cf845450104 73539fe4_5f80_0052_8f36_a55371f1a1e6["init()"] 098bd603_5fdc_d6b3_c285_95fcd39a73b6 -->|method| 73539fe4_5f80_0052_8f36_a55371f1a1e6 0726e9ec_824e_6605_25b3_0f8d338fdaad["getAsciiStringPseudoHeader()"] 098bd603_5fdc_d6b3_c285_95fcd39a73b6 -->|method| 0726e9ec_824e_6605_25b3_0f8d338fdaad abfee9fa_9774_8f70_e49a_891dcdc07b82["getStringPseudoHeader()"] 098bd603_5fdc_d6b3_c285_95fcd39a73b6 -->|method| abfee9fa_9774_8f70_e49a_891dcdc07b82 d5447a20_892a_2cfe_6e3c_b3e6cb0638c8["addAsciiStringInHttp2Headers()"] 098bd603_5fdc_d6b3_c285_95fcd39a73b6 -->|method| d5447a20_892a_2cfe_6e3c_b3e6cb0638c8 86d7b419_7fcc_f579_a4c2_f53d8255d7d7["addStringInHttp2Headers()"] 098bd603_5fdc_d6b3_c285_95fcd39a73b6 -->|method| 86d7b419_7fcc_f579_a4c2_f53d8255d7d7
Relationship Graph
Source Code
microbench/src/main/java/io/netty/handler/codec/http2/Http2PseudoHeadersLookupBenchmark.java lines 37–121
@State(Scope.Benchmark)
@Warmup(iterations = 10, time = 200, timeUnit = TimeUnit.MILLISECONDS)
@Measurement(iterations = 10, time = 200, timeUnit = TimeUnit.MILLISECONDS)
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class Http2PseudoHeadersLookupBenchmark extends AbstractMicrobenchmark {
@Param({ "true", "false" })
public boolean same;
private AsciiString[] asciiStrings;
private String[] strings;
private DefaultHttp2Headers headers;
@Setup
public void init() {
// this benchmark is assuming a good happy path:
// 1. ascii strings have hashCode cached
// 2. String doesn't have AsciiString::hashCode cached -> cannot be compared directly with AsciiStrings!
// 3. the call-sites are never observing the 2 types together
PseudoHeaderName[] pseudoHeaderNames = PseudoHeaderName.values();
asciiStrings = new AsciiString[pseudoHeaderNames.length];
strings = new String[pseudoHeaderNames.length];
for (int i = 0; i < pseudoHeaderNames.length; i++) {
PseudoHeaderName pseudoHeaderName = pseudoHeaderNames[i];
asciiStrings[i] = same? pseudoHeaderName.value() : new AsciiString(pseudoHeaderName.value().array(), true);
byte[] chars = asciiStrings[i].array();
strings[i] = same? pseudoHeaderName.value().toString() : new String(chars, 0, 0, chars.length);
// force hashCode caching
asciiStrings[i].hashCode();
pseudoHeaderName.hashCode();
pseudoHeaderName.toString().hashCode();
strings[i].hashCode();
}
this.headers = new DefaultHttp2Headers();
}
@Benchmark
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public void getAsciiStringPseudoHeader(Blackhole bh) {
for (AsciiString asciiString : asciiStrings) {
bh.consume(PseudoHeaderName.getPseudoHeader(asciiString));
}
}
@Benchmark
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public void getStringPseudoHeader(Blackhole bh) {
for (String string : strings) {
bh.consume(PseudoHeaderName.getPseudoHeader(string));
}
}
@Benchmark
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public void addAsciiStringInHttp2Headers(Blackhole bh) {
DefaultHttp2Headers headers = this.headers;
for (AsciiString asciiString : asciiStrings) {
boolean hasPrefix = PseudoHeaderName.hasPseudoHeaderFormat(asciiString);
if (hasPrefix) {
boolean isPseudoHeader = PseudoHeaderName.isPseudoHeader(asciiString);
if (isPseudoHeader) {
bh.consume(headers.add(asciiString, "0"));
headers.clear();
}
}
}
}
@Benchmark
@CompilerControl(CompilerControl.Mode.DONT_INLINE)
public void addStringInHttp2Headers(Blackhole bh) {
DefaultHttp2Headers headers = this.headers;
for (String asciiString : strings) {
boolean hasPrefix = PseudoHeaderName.hasPseudoHeaderFormat(asciiString);
if (hasPrefix) {
boolean isPseudoHeader = PseudoHeaderName.isPseudoHeader(asciiString);
if (isPseudoHeader) {
bh.consume(headers.add(asciiString, "0"));
headers.clear();
}
Defined In
Source
Frequently Asked Questions
What is the Http2PseudoHeadersLookupBenchmark class?
Http2PseudoHeadersLookupBenchmark is a class in the netty codebase, defined in microbench/src/main/java/io/netty/handler/codec/http2/Http2PseudoHeadersLookupBenchmark.java.
Where is Http2PseudoHeadersLookupBenchmark defined?
Http2PseudoHeadersLookupBenchmark is defined in microbench/src/main/java/io/netty/handler/codec/http2/Http2PseudoHeadersLookupBenchmark.java at line 37.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free