Skip to content

Commit aab8a2b

Browse files
committed
benchmark to test jackson smile parsing
See FasterXML/jackson-dataformats-binary#342
1 parent a8faf40 commit aab8a2b

File tree

3 files changed

+68
-2
lines changed

3 files changed

+68
-2
lines changed

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ subprojects {
9494
profilers = ['stack', 'gc']
9595
includeTests = false
9696
duplicateClassesStrategy = DuplicatesStrategy.WARN
97-
includes = ['.*Caching.*']
97+
includes = ['.*DecodeShortAscii.*']
9898
}
9999

100100
checkstyle {

dependencies.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ com.amazonaws:aws-java-sdk-core = 1.12.335
33
com.amazonaws:aws-java-sdk-cloudwatch = 1.12.335
44
com.fasterxml.jackson.core:jackson-core = 2.14.0
55
com.fasterxml.jackson.core:jackson-databind = 2.14.0
6-
com.fasterxml.jackson.dataformat:jackson-dataformat-smile = 2.14.0
6+
com.fasterxml.jackson.dataformat:jackson-dataformat-smile = 2.14.1-SNAPSHOT
77
com.github.ben-manes.caffeine:caffeine = 2.9.3
88
com.google.inject.extensions:guice-servlet = 5.1.0
99
com.google.inject:guice = 5.1.0
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package com.netflix.spectator.atlas;
2+
3+
import com.fasterxml.jackson.core.JsonFactory;
4+
import com.fasterxml.jackson.core.JsonGenerator;
5+
import com.fasterxml.jackson.core.JsonParser;
6+
import com.fasterxml.jackson.core.JsonToken;
7+
import com.fasterxml.jackson.dataformat.smile.SmileFactory;
8+
import org.openjdk.jmh.annotations.Benchmark;
9+
import org.openjdk.jmh.annotations.Scope;
10+
import org.openjdk.jmh.annotations.Setup;
11+
import org.openjdk.jmh.annotations.State;
12+
import org.openjdk.jmh.infra.Blackhole;
13+
14+
import java.io.ByteArrayOutputStream;
15+
import java.util.Random;
16+
17+
@State(Scope.Thread)
18+
public class DecodeShortAsciiValues {
19+
20+
private static int N = 100;
21+
22+
private JsonFactory factory;
23+
private byte[] inputData;
24+
25+
private static String randomShortAsciiString() {
26+
Random r = new Random();
27+
final int length = r.nextInt(64);
28+
final char[] buf = new char[length];
29+
for (int i = 0; i < length; ++i) {
30+
buf[i] = (char) (r.nextInt('~' - ' ') + ' ');
31+
}
32+
return new String(buf);
33+
}
34+
35+
@Setup
36+
public void setup() throws Exception {
37+
factory = new SmileFactory();
38+
39+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
40+
try (JsonGenerator gen = factory.createGenerator(baos)) {
41+
gen.writeStartArray();
42+
for (int i = 0; i < N; ++i) {
43+
gen.writeString(randomShortAsciiString());
44+
}
45+
gen.writeEndArray();
46+
}
47+
inputData = baos.toByteArray();
48+
}
49+
50+
@Benchmark
51+
public void parse(Blackhole bh) throws Exception {
52+
String[] strings = new String[N];
53+
try (JsonParser parser = factory.createParser(inputData)) {
54+
parser.nextToken();
55+
int i = 0;
56+
while (parser.nextToken() != JsonToken.END_ARRAY) {
57+
strings[i++] = parser.getText();
58+
}
59+
}
60+
bh.consume(strings);
61+
}
62+
63+
public static void main(String[] args) {
64+
System.out.println(randomShortAsciiString());
65+
}
66+
}

0 commit comments

Comments
 (0)