Skip to content

Commit c875b97

Browse files
darxriggsfabienrenaud
authored andcommitted
Add benchmarking for qson
see https://github.com/quarkusio/qson The library only supports access via getters & setters. The library does not support arrays, therefore the "Clients" tests are disabled.
1 parent 8fc89df commit c875b97

File tree

13 files changed

+56
-0
lines changed

13 files changed

+56
-0
lines changed

README.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ It covers the following libraries:
3030
* [mjson](https://github.com/bolerio/mjson)
3131
* [underscore-java](https://github.com/javadev/underscore-java)
3232
* [purejson](https://senthilganeshs.github.io/jsonp/)
33+
* [qson](https://github.com/quarkusio/qson)
3334

3435
When available, both databinding and 'stream' (custom packing and unpacking) implementations are tested.
3536
Two different kinds of [models](/src/main/java/com/github/fabienrenaud/jjb/model/) are evaluated with payloads of 1, 10, 100 and 1000 KB size:

build.gradle

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ dependencies {
9090
implementation group: 'io.avaje', name: 'avaje-jsonb', version: '1.0-RC4'
9191
implementation group: 'io.avaje', name: 'avaje-jsonb-jackson', version: '1.0-RC4'
9292
annotationProcessor group: 'io.avaje', name: 'avaje-jsonb-generator', version: '1.0-RC4'
93+
// qson
94+
implementation group: 'io.quarkus.qson', name: 'qson-generator', version: '1.1.1.Final'
9395

9496
// Test
9597
testImplementation group: 'junit', name: 'junit', version: '4.13.2'

src/main/java/com/github/fabienrenaud/jjb/JsonBench.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,4 +126,8 @@ public Object avajejsonb_jackson() throws Exception {
126126
public Object avajejsonb() throws Exception {
127127
return null;
128128
}
129+
130+
public Object qson() throws Exception {
131+
return null;
132+
}
129133
}

src/main/java/com/github/fabienrenaud/jjb/databind/Deserialization.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,4 +137,9 @@ public Object jsoniter() throws Exception {
137137
return com.jsoniter.JsonIterator.deserialize(JSON_SOURCE().nextByteArray(), JSON_SOURCE().pojoType());
138138
}
139139

140+
@Benchmark
141+
@Override
142+
public Object qson() throws Exception {
143+
return JSON_SOURCE().provider().qson().read(JSON_SOURCE().nextByteArray(), JSON_SOURCE().pojoType());
144+
}
140145
}

src/main/java/com/github/fabienrenaud/jjb/databind/Serialization.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -170,4 +170,11 @@ public Object jsoniter() throws Exception {
170170
return baos;
171171
}
172172

173+
@Benchmark
174+
@Override
175+
public Object qson() throws Exception {
176+
ByteArrayOutputStream baos = JsonUtils.byteArrayOutputStream();
177+
JSON_SOURCE().provider().qson().writeStream(JSON_SOURCE().nextPojo(), baos);
178+
return baos;
179+
}
173180
}

src/main/java/com/github/fabienrenaud/jjb/provider/ClientsJsonProvider.java

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import flexjson.transformer.AbstractTransformer;
2929
import io.avaje.jsonb.jackson.JacksonAdapter;
3030
import io.avaje.jsonb.stream.JsonStream;
31+
import io.quarkus.qson.generator.QsonMapper;
3132
import jodd.json.TypeJsonSerializer;
3233
import jodd.typeconverter.TypeConverterManager;
3334
import org.apache.johnzon.core.JsonProviderImpl;
@@ -144,6 +145,8 @@ public void toJson(com.squareup.moshi.JsonWriter writer, @Nullable OffsetDateTim
144145
}
145146
}).build().adapter(Clients.class);
146147

148+
private final QsonMapper qson = new QsonMapper();
149+
147150
/*
148151
* DSL-json
149152
*/
@@ -276,6 +279,11 @@ public com.squareup.moshi.JsonAdapter<Clients> moshi() {
276279
return moshi;
277280
}
278281

282+
@Override
283+
public QsonMapper qson() {
284+
return qson;
285+
}
286+
279287
private static final ThreadLocal<JSONSerializer> FLEXJSON_SER = ThreadLocal.withInitial(() -> new JSONSerializer()
280288
.transform(FLEX_IDENTITY, UUID.class)
281289
.transform(FLEX_IDENTITY, LocalDate.class)

src/main/java/com/github/fabienrenaud/jjb/provider/JsonProvider.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import com.owlike.genson.Genson;
88
import flexjson.JSONDeserializer;
99
import flexjson.JSONSerializer;
10+
import io.quarkus.qson.generator.QsonMapper;
1011
import org.apache.johnzon.mapper.Mapper;
1112

1213
import javax.json.bind.Jsonb;
@@ -54,4 +55,6 @@ public interface JsonProvider<T> {
5455
io.avaje.jsonb.JsonType<T> avajeJsonb_jackson();
5556

5657
io.avaje.jsonb.JsonType<T> avajeJsonb_default();
58+
59+
QsonMapper qson();
5760
}

src/main/java/com/github/fabienrenaud/jjb/provider/UsersJsonProvider.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@
1717
import io.avaje.jsonb.JsonType;
1818
import io.avaje.jsonb.stream.JsonStream;
1919
import io.avaje.jsonb.jackson.JacksonAdapter;
20+
import io.quarkus.qson.generator.QsonMapper;
2021
import org.apache.johnzon.core.JsonProviderImpl;
2122
import org.apache.johnzon.mapper.Mapper;
2223
import org.eclipse.yasson.JsonBindingProvider;
@@ -45,6 +46,7 @@ public class UsersJsonProvider implements JsonProvider<Users> {
4546
private final org.boon.json.ObjectMapper boon = org.boon.json.JsonFactory.create();
4647
private final org.apache.johnzon.mapper.Mapper johnzon;
4748
private final com.squareup.moshi.JsonAdapter<Users> moshi = new Moshi.Builder().build().adapter(Users.class);
49+
private final QsonMapper qson = new QsonMapper();
4850

4951
/*
5052
* DSL-json
@@ -169,6 +171,11 @@ public JsonType<Users> avajeJsonb_default() {
169171

170172
private static final ThreadLocal<flexjson.JSONSerializer> FLEXJSON_SER = ThreadLocal.withInitial(flexjson.JSONSerializer::new);
171173

174+
@Override
175+
public QsonMapper qson() {
176+
return qson;
177+
}
178+
172179
private static final ThreadLocal<jodd.json.JsonParser> JODD_DESER = ThreadLocal.withInitial(jodd.json.JsonParser::new);
173180

174181
private static final ThreadLocal<jodd.json.JsonSerializer> JODD_SER = ThreadLocal.withInitial(jodd.json.JsonSerializer::new);

src/main/java/com/github/fabienrenaud/jjb/support/BenchSupport.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@ public enum BenchSupport {
3535
new Libapi(Library.MINIMALJSON, Api.STREAM),
3636
new Libapi(Library.MJSON, Api.STREAM),
3737
new Libapi(Library.UNDERSCORE_JAVA, Api.STREAM),
38+
new Libapi(Library.QSON, Api.DATABIND),
3839
new Libapi(Library.PUREJSON, Api.STREAM)
3940
),
4041
CLIENTS(

src/main/java/com/github/fabienrenaud/jjb/support/Library.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public enum Library {
3131
JSONITER,
3232
MINIMALJSON,
3333
MJSON,
34+
QSON,
3435
UNDERSCORE_JAVA,
3536
PUREJSON;
3637

0 commit comments

Comments
 (0)