Update Caliper dependency; disable automatic result upload (#2019)

This commit is contained in:
Marcono1234 2021-11-22 19:01:26 +01:00 committed by GitHub
parent 0313de8206
commit 16b42ff580
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 80 additions and 46 deletions

View File

@ -39,7 +39,7 @@
<dependency>
<groupId>com.google.caliper</groupId>
<artifactId>caliper</artifactId>
<version>0.5-rc1</version>
<version>1.0-beta-3</version>
</dependency>
</dependencies>

View File

@ -15,15 +15,13 @@
*/
package com.google.gson.metrics;
import com.google.caliper.BeforeExperiment;
import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Field;
import com.google.caliper.Runner;
import com.google.caliper.SimpleBenchmark;
import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
/**
* Caliper based micro benchmarks for Gson
*
@ -31,17 +29,17 @@ import com.google.gson.stream.JsonReader;
* @author Jesse Wilson
* @author Joel Leitch
*/
public class BagOfPrimitivesDeserializationBenchmark extends SimpleBenchmark {
public class BagOfPrimitivesDeserializationBenchmark {
private Gson gson;
private String json;
public static void main(String[] args) {
Runner.main(BagOfPrimitivesDeserializationBenchmark.class, args);
NonUploadingCaliperRunner.run(BagOfPrimitivesDeserializationBenchmark.class, args);
}
@Override
protected void setUp() throws Exception {
@BeforeExperiment
void setUp() throws Exception {
this.gson = new Gson();
BagOfPrimitives bag = new BagOfPrimitives(10L, 1, false, "foo");
this.json = gson.toJson(bag);

View File

@ -15,6 +15,10 @@
*/
package com.google.gson.metrics;
import com.google.caliper.BeforeExperiment;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
import java.io.IOException;
import java.io.StringReader;
import java.lang.reflect.Field;
@ -22,29 +26,23 @@ import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.List;
import com.google.caliper.Runner;
import com.google.caliper.SimpleBenchmark;
import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import com.google.gson.stream.JsonReader;
/**
* Caliper based micro benchmarks for Gson
*
* @author Inderjeet Singh
*/
public class CollectionsDeserializationBenchmark extends SimpleBenchmark {
public class CollectionsDeserializationBenchmark {
private static final Type LIST_TYPE = new TypeToken<List<BagOfPrimitives>>(){}.getType();
private Gson gson;
private String json;
public static void main(String[] args) {
Runner.main(CollectionsDeserializationBenchmark.class, args);
NonUploadingCaliperRunner.run(CollectionsDeserializationBenchmark.class, args);
}
@Override
protected void setUp() throws Exception {
@BeforeExperiment
void setUp() throws Exception {
this.gson = new Gson();
List<BagOfPrimitives> bags = new ArrayList<BagOfPrimitives>();
for (int i = 0; i < 100; ++i) {

View File

@ -0,0 +1,21 @@
package com.google.gson.metrics;
import com.google.caliper.runner.CaliperMain;
class NonUploadingCaliperRunner {
private static String[] concat(String first, String... others) {
if (others.length == 0) {
return new String[] { first };
} else {
String[] result = new String[others.length + 1];
result[0] = first;
System.arraycopy(others, 0, result, 1, others.length);
return result;
}
}
public static void run(Class<?> c, String[] args) {
// Disable result upload; Caliper uploads results to webapp by default, see https://github.com/google/caliper/issues/356
CaliperMain.main(c, concat("-Cresults.upload.options.url=", args));
}
}

View File

@ -24,24 +24,27 @@ import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.MapperFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.json.JsonMapper;
import com.google.caliper.BeforeExperiment;
import com.google.caliper.Param;
import com.google.caliper.Runner;
import com.google.caliper.SimpleBenchmark;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParser;
import com.google.gson.annotations.SerializedName;
import com.google.gson.reflect.TypeToken;
import java.io.CharArrayReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringWriter;
import java.lang.reflect.Type;
import java.net.URL;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Locale;
import java.util.zip.ZipEntry;
import java.util.zip.ZipFile;
/**
* Measure Gson and Jackson parsing and binding performance.
@ -50,7 +53,7 @@ import java.util.List;
* That file contains Twitter feed data, which is representative of what
* applications will be parsing.
*/
public final class ParseBenchmark extends SimpleBenchmark {
public final class ParseBenchmark {
@Param Document document;
@Param Api api;
@ -105,8 +108,9 @@ public final class ParseBenchmark extends SimpleBenchmark {
private char[] text;
private Parser parser;
@Override protected void setUp() throws Exception {
text = resourceToString("/" + document.name() + ".json").toCharArray();
@BeforeExperiment
void setUp() throws Exception {
text = resourceToString(document.name() + ".json").toCharArray();
parser = api.newParser();
}
@ -116,25 +120,39 @@ public final class ParseBenchmark extends SimpleBenchmark {
}
}
private static String resourceToString(String path) throws Exception {
InputStream in = ParseBenchmark.class.getResourceAsStream(path);
if (in == null) {
throw new IllegalArgumentException("No such file: " + path);
private static File getResourceFile(String path) throws Exception {
URL url = ParseBenchmark.class.getResource(path);
if (url == null) {
throw new IllegalArgumentException("Resource " + path + " does not exist");
}
File file = new File(url.toURI());
if (!file.isFile()) {
throw new IllegalArgumentException("Resource " + path + " is not a file");
}
return file;
}
Reader reader = new InputStreamReader(in, "UTF-8");
char[] buffer = new char[8192];
StringWriter writer = new StringWriter();
int count;
while ((count = reader.read(buffer)) != -1) {
writer.write(buffer, 0, count);
private static String resourceToString(String fileName) throws Exception {
ZipFile zipFile = new ZipFile(getResourceFile("/ParseBenchmarkData.zip"));
try {
ZipEntry zipEntry = zipFile.getEntry(fileName);
Reader reader = new InputStreamReader(zipFile.getInputStream(zipEntry));
char[] buffer = new char[8192];
StringWriter writer = new StringWriter();
int count;
while ((count = reader.read(buffer)) != -1) {
writer.write(buffer, 0, count);
}
reader.close();
return writer.toString();
} finally {
zipFile.close();
}
reader.close();
return writer.toString();
}
public static void main(String[] args) throws Exception {
Runner.main(ParseBenchmark.class, args);
NonUploadingCaliperRunner.run(ParseBenchmark.class, args);
}
interface Parser {
@ -257,7 +275,7 @@ public final class ParseBenchmark extends SimpleBenchmark {
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.configure(MapperFeature.AUTO_DETECT_FIELDS, true)
.build();
mapper.setDateFormat(new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy"));
mapper.setDateFormat(new SimpleDateFormat("EEE MMM dd HH:mm:ss Z yyyy", Locale.ENGLISH));
}
@Override

View File

@ -15,9 +15,8 @@
*/
package com.google.gson.metrics;
import com.google.caliper.BeforeExperiment;
import com.google.caliper.Param;
import com.google.caliper.Runner;
import com.google.caliper.SimpleBenchmark;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
@ -28,7 +27,7 @@ import com.google.gson.GsonBuilder;
* @author Jesse Wilson
* @author Joel Leitch
*/
public class SerializationBenchmark extends SimpleBenchmark {
public class SerializationBenchmark {
private Gson gson;
private BagOfPrimitives bag;
@ -36,11 +35,11 @@ public class SerializationBenchmark extends SimpleBenchmark {
private boolean pretty;
public static void main(String[] args) {
Runner.main(SerializationBenchmark.class, args);
NonUploadingCaliperRunner.run(SerializationBenchmark.class, args);
}
@Override
protected void setUp() throws Exception {
@BeforeExperiment
void setUp() throws Exception {
this.gson = pretty ? new GsonBuilder().setPrettyPrinting().create() : new Gson();
this.bag = new BagOfPrimitives(10L, 1, false, "foo");
}