aboutsummaryrefslogtreecommitdiffstats
path: root/benchmarks
diff options
context:
space:
mode:
authorBogdan Drutu <bdrutu@google.com>2017-03-17 20:19:17 -0700
committerGitHub <noreply@github.com>2017-03-17 20:19:17 -0700
commit0ed88a869a1d414dd067796c7b7a360970e247f8 (patch)
tree4c4658a07ee57ff3c2e213404323a7f4f754f995 /benchmarks
parent1435c7fdf4be28ef724350558be6984f39d386c8 (diff)
downloadplatform_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.xml92
-rw-r--r--benchmarks/src/main/java/com/google/instrumentation/trace/HttpPropagationUtilBenchmark.java122
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));
+ }
+}