下面列出了怎么用org.openjdk.jmh.annotations.BenchmarkMode的API类实例代码及写法,或者点击链接到github查看源代码。
/** Benchmark for measuring HttpTraceContext extract. */
@Benchmark
@BenchmarkMode({Mode.AverageTime})
@Fork(1)
@Measurement(iterations = 15, time = 1)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
@OperationsPerInvocation(COUNT)
@Nullable
public Context measureExtract() {
Context result = null;
for (int i = 0; i < COUNT; i++) {
result = httpTraceContext.extract(Context.ROOT, carriers.get(i), getter);
}
return result;
}
/** Perform the write operation. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public Context doWrite(ContextState state, Blackhole bh) {
return state.context.withValues(
state.key1, state.val,
state.key2, state.val,
state.key3, state.val,
state.key4, state.val);
}
/** Perform the read operation. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public void testContextLookup(ContextState state, Blackhole bh) {
for (Context.Key<?> key : state.keys) {
for (Context ctx : state.contexts) {
bh.consume(key.get(ctx));
}
}
}
/**
* Checkstyle.
*/
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public void grpcHeaders_serverHandler(Blackhole bh) {
serverHandler(bh, new GrpcHttp2RequestHeaders(4));
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
public void http2Remove(Blackhole bh) {
for (AsciiString name : http2Names) {
bh.consume(http2Headers.remove(name));
}
}
/**
* This will encode the random metadata fields, and repeatedly lookup the default other headers.
*/
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public ByteBuf encodeClientHeaders() throws Exception {
scratchBuffer.clear();
Http2Headers headers =
Utils.convertClientHeaders(metadata, scheme, defaultPath, authority, Utils.HTTP_METHOD,
userAgent);
headersEncoder.encodeHeaders(1, headers, scratchBuffer);
return scratchBuffer;
}
/** Foo bar. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public AsciiString old() {
return new AsciiString("/" + method.getFullMethodName());
}
/** Foo bar. */
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public AsciiString direct() {
return new AsciiString(directBytes, false);
}
/**
* Javadoc comment.
*/
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public byte[][] marshalOld() {
Metadata m = new Metadata();
m.put(
GrpcUtil.MESSAGE_ACCEPT_ENCODING_KEY,
InternalDecompressorRegistry.getRawAdvertisedMessageEncodings(reg));
return TransportFrameUtil.toHttp2Headers(m);
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public long getAndSetAndGetGeneration() {
long oldGeneration = generator.getGeneration();
generator.setGeneration(oldGeneration + 1);
return generator.getGeneration();
}
/**
* Adding custom call options, overwritting existing keys.
*/
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public CallOptions withOptionDuplicates() {
CallOptions opts = allOpts;
for (int i = 1; i < shuffledCustomOptions.size(); i++) {
opts = opts.withOption(shuffledCustomOptions.get(i), "value2");
}
return opts;
}
@Benchmark
@BenchmarkMode({Mode.AverageTime})
@Fork(1)
@Measurement(iterations = 15, time = 1)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
public void measureSpanBuilding() {
span = tracer.spanBuilder("span").startSpan();
}
/**
* Queue many runnables, to better see queuing/consumption cost instead of just context switch.
*/
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public void manyRunnables() throws Exception {
incrRunnable.val = 0;
for (int i = 0; i < 500; i++) {
executor.execute(incrRunnable);
}
executor.execute(phaserRunnable);
phaser.arriveAndAwaitAdvance();
if (incrRunnable.val != 500) {
throw new AssertionError();
}
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
public int decodeMaxInt() throws Http2Exception {
int v = decodeULE128(intMaxBuf, 0);
intMaxBuf.readerIndex(0);
return v;
}
/**
* Javadoc comment.
*/
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public StatsTraceContext newClientContext() {
return StatsTraceContext.newClientContext(CallOptions.DEFAULT, emptyMetadata);
}
@Benchmark
@BenchmarkMode({Mode.AverageTime})
@Fork(1)
@Measurement(iterations = 15, time = 1)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
public void measureGetCurrentSpan() {
tracer.getCurrentSpan();
}
/**
* Javadoc comment.
*/
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public String messageDecodePlain() {
return Status.MESSAGE_KEY.parseBytes(
"Unexpected RST in stream".getBytes(Charset.forName("US-ASCII")));
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
public int defaultTrailers() {
Http2Headers headers = new DefaultHttp2Headers(false);
for (int i = 0; i < headerCount; ++i) {
headers.add(headerNames[i], headerValues[i]);
}
return iterate(headers);
}
/**
* Javadoc comment.
*/
@Benchmark
@BenchmarkMode(Mode.SampleTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public Status codeDecode() {
return Status.CODE_KEY.parseBytes("15".getBytes(Charset.forName("US-ASCII")));
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
@Measurement(iterations = 1)
public void searchBenchmark() throws SpellCheckException {
for (String query : queries) {
totalMatches += spellChecker.lookup(query, Verbosity.valueOf(verbosity), maxEditDistance)
.size();
}
}
@Benchmark
@BenchmarkMode(Mode.All)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void put() {
ThreadLocalRandom random = ThreadLocalRandom.current();
byte[] key = BytesUtil.writeUtf8("benchmark_" + random.nextInt(KEY_COUNT));
super.kvStore.put(key, VALUE_BYTES, null);
}
/** Benchmark for measuring inject with default trace state and sampled trace options. */
@Benchmark
@BenchmarkMode({Mode.AverageTime})
@Fork(1)
@Measurement(iterations = 15, time = 1)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
@OperationsPerInvocation(COUNT)
public Map<String, String> measureInject() {
for (int i = 0; i < COUNT; i++) {
httpTraceContext.inject(contexts.get(i), carrier, setter);
}
return carrier;
}
@Benchmark
@BenchmarkMode(Mode.All)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void put() {
ThreadLocalRandom random = ThreadLocalRandom.current();
byte[] key = BytesUtil.writeUtf8("benchmark_" + random.nextInt(KEY_COUNT));
this.kvStore.bPut(key, VALUE_BYTES);
}
@Benchmark
@BenchmarkMode(Mode.All)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public void int64() {
byte[] bytes = new byte[8];
putLong(bytes, 0, SMALL_VAL);
getLong(bytes, 0);
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
public DefaultHttpHeaders httpPut() {
DefaultHttpHeaders headers = new DefaultHttpHeaders(false);
for (int i = 0; i < httpNames.length; i++) {
headers.add(httpNames[i], httpValues[i]);
}
return headers;
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
public void http2Get(Blackhole bh) {
for (AsciiString name : http2Names) {
bh.consume(http2Headers.get(name));
}
}
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public void fastpathEncode() {
// fast ptah
AsciiStringUtil.unsafeEncode(PEER_STR);
}
@Benchmark
@BenchmarkMode(Mode.AverageTime)
public void encode(Blackhole bh) throws Exception {
HpackEncoder hpackEncoder = HpackUtilBenchmark.newTestEncoder();
output.clear();
hpackEncoder.encodeHeaders(3 /*randomly chosen*/, output, http2Headers, sensitivityDetector);
bh.consume(output);
}
@SuppressWarnings("all")
@Benchmark
@BenchmarkMode(Mode.Throughput)
@OutputTimeUnit(TimeUnit.MILLISECONDS)
public void defaultToUtf8Bytes() {
Utils.getBytes(str);
}
/** Benchmark just the scope lifecycle. */
@Benchmark
@BenchmarkMode({Mode.AverageTime})
@Fork(1)
@Measurement(iterations = 15, time = 1)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
@Warmup(iterations = 5, time = 1)
public void measureScopeLifecycle() {
try (io.opentelemetry.context.Scope ignored = tracer.withSpan(span)) {
// no-op
}
}