package io.gatling.jsonbenchmark.serialization;
import data.media.MediaContent;
import io.gatling.jsonbenchmark.serialization.model.StringPerformance;
import org.boon.core.Sys;
import org.boon.json.*;
import org.openjdk.jmh.annotations.GenerateMicroBenchmark;
import org.openjdk.jmh.annotations.OutputTimeUnit;
import org.openjdk.jmh.annotations.State;
import org.openjdk.jmh.logic.BlackHole;
import java.util.concurrent.TimeUnit;
@State
public class MainBoonSerializer {
private final JsonSerializer serializer = new JsonSerializerFactory()
.setSerializeAsSupport(false).useFieldsOnly().create();
private final JsonParserAndMapper parser = new JsonParserFactory().create();
private static Object object = Sys.contextToHold();
private Object serialize(AllTypes alltype) throws Exception {
return serializer.serialize ( alltype );
}
private Object roundTrip(AllTypes alltype) throws Exception {
return parser.parse ( AllTypes.class, serializer.serialize( alltype ).readForRecycle() );
}
private Object roundTrip(Class<?> cls, Object object) throws Exception {
return parser.parse ( cls, serializer.serialize( object ).toString() );
}
private Object mediaContentRoundTrip(MediaContent mediaContent) throws Exception {
return parser.parse ( MediaContent.class, serializer.serialize( mediaContent ).readForRecycle() );
}
private Object parseOnly(String json) throws Exception {
return parser.parse( json );
}
private Object serializeOnly(Object object) throws Exception {
return serializer.serialize( object );
}
private Object mediaContentOutput(MediaContent mediaContent) throws Exception {
return serializer.serialize( mediaContent );
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void mediaContentRoundTrip(BlackHole bh) throws Exception {
bh.consume(mediaContentRoundTrip ( TestObjects.MEDIA_CONTENT ));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void mediaContentOutput(BlackHole bh) throws Exception {
bh.consume(mediaContentOutput ( TestObjects.MEDIA_CONTENT ));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void serializeSmall(BlackHole bh) throws Exception {
bh.consume(serialize(TestObjects.OBJECT));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void roundTriper(BlackHole bh) throws Exception {
bh.consume(roundTrip ( TestObjects.OBJECT ));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void serializeBig(BlackHole bh) throws Exception {
bh.consume(serialize(TestObjects.BIG_OBJECT));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void roundTripBig(BlackHole bh) throws Exception {
bh.consume(roundTrip ( TestObjects.BIG_OBJECT ));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void stringPerf(BlackHole bh) throws Exception {
bh.consume(roundTrip (StringPerformance.class, TestObjects.STRING_PERF ));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void stringPerfParser(BlackHole bh) throws Exception {
bh.consume(parseOnly (TestObjects.STRING_PERF_STRING ));
}
@GenerateMicroBenchmark
@OutputTimeUnit(TimeUnit.SECONDS)
public void stringPerfSerializer(BlackHole bh) throws Exception {
bh.consume(serializeOnly (TestObjects.STRING_PERF));
}
}