diff options
| author | Bogdan Drutu <bdrutu@google.com> | 2017-03-17 20:19:17 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-03-17 20:19:17 -0700 |
| commit | 0ed88a869a1d414dd067796c7b7a360970e247f8 (patch) | |
| tree | 4c4658a07ee57ff3c2e213404323a7f4f754f995 /benchmarks | |
| parent | 1435c7fdf4be28ef724350558be6984f39d386c8 (diff) | |
| download | platform_external_opencensus-java-0ed88a869a1d414dd067796c7b7a360970e247f8.tar.gz platform_external_opencensus-java-0ed88a869a1d414dd067796c7b7a360970e247f8.tar.bz2 platform_external_opencensus-java-0ed88a869a1d414dd067796c7b7a360970e247f8.zip | |
Update the name of the directory for benchmarks. (#152)
Diffstat (limited to 'benchmarks')
| -rw-r--r-- | benchmarks/pom.xml | 92 | ||||
| -rw-r--r-- | benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java | 122 |
2 files changed, 214 insertions, 0 deletions
diff --git a/benchmarks/pom.xml b/benchmarks/pom.xml new file mode 100644 index 00000000..92d0c7a9 --- /dev/null +++ b/benchmarks/pom.xml @@ -0,0 +1,92 @@ +<?xml version="1.0" encoding="UTF-8"?> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + + <modelVersion>4.0.0</modelVersion> + + <artifactId>census-benchmarks</artifactId> + + <name>Census Java Benchmarks</name> + <url>https://github.com/google/instrumentation-java</url> + + <parent> + <groupId>com.google.census</groupId> + <artifactId>census-parent</artifactId> + <version>0.1.0-SNAPSHOT</version> + </parent> + + <dependencies> + <dependency> + <groupId>com.google.census</groupId> + <artifactId>census-core</artifactId> + <version>0.1.0-SNAPSHOT</version> + </dependency> + <dependency> + <groupId>org.openjdk.jmh</groupId> + <artifactId>jmh-core</artifactId> + <version>1.18</version> + </dependency> + <dependency> + <groupId>org.openjdk.jmh</groupId> + <artifactId>jmh-generator-annprocess</artifactId> + <version>1.18</version> + </dependency> + </dependencies> + + <build> + <plugins> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-shade-plugin</artifactId> + <version>2.2</version> + <executions> + <execution> + <phase>package</phase> + <goals> + <goal>shade</goal> + </goals> + <configuration> + <finalName>benchmarks</finalName> + <transformers> + <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> + <mainClass>org.openjdk.jmh.Main</mainClass> + </transformer> + </transformers> + <filters> + <filter> + <!-- + Shading signed JARs will fail without this. + http://stackoverflow.com/questions/999489/invalid-signature-file-when-attempting-to-run-a-jar + --> + <artifact>*:*</artifact> + <excludes> + <exclude>META-INF/*.SF</exclude> + <exclude>META-INF/*.DSA</exclude> + <exclude>META-INF/*.RSA</exclude> + </excludes> + </filter> + </filters> + </configuration> + </execution> + </executions> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-compiler-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-jar-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-source-plugin</artifactId> + </plugin> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-javadoc-plugin</artifactId> + </plugin> + </plugins> + </build> +</project> diff --git a/benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java b/benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java new file mode 100644 index 00000000..9214bc06 --- /dev/null +++ b/benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java @@ -0,0 +1,122 @@ +/* + * Copyright 2017, Google Inc. + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.instrumentation.trace; + +import com.google.common.io.BaseEncoding; +import java.util.concurrent.TimeUnit; +import org.openjdk.jmh.annotations.Benchmark; +import org.openjdk.jmh.annotations.BenchmarkMode; +import org.openjdk.jmh.annotations.Mode; +import org.openjdk.jmh.annotations.OutputTimeUnit; +import org.openjdk.jmh.annotations.Scope; +import org.openjdk.jmh.annotations.Setup; +import org.openjdk.jmh.annotations.State; + +/** Benchmarks for {@link HttpPropagationUtil}. */ +@State(Scope.Benchmark) +public class HttpPropagationUtilBenchmark { + private static final byte[] traceIdBytes = + new byte[] {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 'a'}; + private byte[] spanContextBytes; + private String spanContextString; + private static final TraceId traceId = TraceId.fromBytes(traceIdBytes); + private static final byte[] spanIdBytes = new byte[] {(byte) 0xFF, 0, 0, 0, 0, 0, 0, 0}; + private static final SpanId spanId = SpanId.fromBytes(spanIdBytes); + private static final byte[] traceOptionsBytes = new byte[] {0, 0, 0, 1}; + private static final TraceOptions traceOptions = TraceOptions.fromBytes(traceOptionsBytes); + private SpanContext spanContext; + private String spanContextStringHttp; + + @Setup + public void setUp() throws Exception { + spanContext = new SpanContext(traceId, spanId, traceOptions); + spanContextStringHttp = HttpPropagationUtil.toHttpHeaderValue(spanContext); + spanContextBytes = new byte[16 + 8 + 4]; + traceId.copyBytesTo(spanContextBytes, 0); + spanId.copyBytesTo(spanContextBytes, 16); + traceOptions.copyBytesTo(spanContextBytes, 24); + spanContextString = BaseEncoding.base16().lowerCase().encode(spanContextBytes); + } + + /** + * This benchmark attempts to measure performance of {@link + * HttpPropagationUtil#toHttpHeaderValue(SpanContext)}. + */ + @Benchmark + @BenchmarkMode(Mode.SampleTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public String toHttpHeaderValueSpanContext() { + return HttpPropagationUtil.toHttpHeaderValue(spanContext); + } + + /** + * This benchmark attempts to measure performance of {@link + * HttpPropagationUtil#fromHttpHeaderValue(CharSequence)}. + */ + @Benchmark + @BenchmarkMode(Mode.SampleTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public SpanContext fromHttpHeaderValueSpanContext() { + return HttpPropagationUtil.fromHttpHeaderValue(spanContextStringHttp); + } + + /** + * This benchmark attempts to measure performance of {@link + * HttpPropagationUtil#toHttpHeaderValue(SpanContext)} then {@link + * HttpPropagationUtil#fromHttpHeaderValue(CharSequence)}. + */ + @Benchmark + @BenchmarkMode(Mode.SampleTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public SpanContext toFromHttpFormatSpanContext() { + return HttpPropagationUtil.fromHttpHeaderValue( + HttpPropagationUtil.toHttpHeaderValue(spanContext)); + } + + /** + * This benchmark attempts to measure performance of base16 encoding from {@link + * HttpPropagationUtil#toHttpHeaderValue(SpanContext)}. + */ + @Benchmark + @BenchmarkMode(Mode.SampleTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public String base16EncodeSpanContext() { + return BaseEncoding.base16().lowerCase().encode(spanContextBytes); + } + + /** + * This benchmark attempts to measure performance of base16 decoding from {@link + * HttpPropagationUtil#fromHttpHeaderValue(CharSequence)}. + */ + @Benchmark + @BenchmarkMode(Mode.SampleTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public byte[] base16DecodeSpanContext() { + return BaseEncoding.base16().lowerCase().decode(spanContextString); + } + + /** + * This benchmark attempts to measure performance of base16 encoding and decoding from {@link + * HttpPropagationUtil#toHttpHeaderValue(SpanContext)} then {@link + * HttpPropagationUtil#fromHttpHeaderValue(CharSequence)}. + */ + @Benchmark + @BenchmarkMode(Mode.SampleTime) + @OutputTimeUnit(TimeUnit.NANOSECONDS) + public byte[] base16EncodeDecodeSpanContext() { + return BaseEncoding.base16() + .lowerCase() + .decode(BaseEncoding.base16().lowerCase().encode(spanContextBytes)); + } +} |
