package net.kennux.cubicworld.microbenchmark; import com.badlogic.gdx.math.Vector3; import net.kennux.cubicworld.serialization.BitReader; import net.kennux.cubicworld.serialization.BitWriter; import net.kennux.cubicworld.serialization.Serializer; import net.kennux.cubicworld.test.SerializerTest; import net.kennux.cubicworld.test.serializer.SerializerTestClass; public class SerializationBenchmark extends AMicroBenchmark { public static void main(String[] args) { SerializationBenchmark benchmark = new SerializationBenchmark(); benchmark.benchmark(); } private SerializerTestClass testClass = new SerializerTestClass(); private byte[] data; public SerializationBenchmark() { testClass.b = (byte)123; testClass.bA = new byte[] { 12, 32, 45 }; testClass.bool = true; testClass.c = 'a'; testClass.f = 2.5776f; testClass.i = 1337; testClass.l = 13371l; testClass.s = (short) 133; testClass.str = "LEET"; testClass.v3 = new Vector3(10, 13, 37); BitWriter writer = new BitWriter(); testClass.serialize(writer); this.data = writer.getPacket(); // Warmup writer = new BitWriter(); BitReader reader = new BitReader(data); Serializer.serialize(writer, testClass); Serializer.deserialize(reader, SerializerTestClass.class); } @MicroBenchmark(name = "Procedural serialize", iterations = 10000) public void proceduralSerialize() { BitWriter writer = new BitWriter(); testClass.serialize(writer); } @MicroBenchmark(name = "Procedural deserialize", iterations = 10000) public void proceduralDeserialize() { BitReader reader = new BitReader(data); SerializerTestClass.deserialize(reader); } @MicroBenchmark(name = "Annotation-driven serialize", iterations = 10000) public void annotationDrivenSerialize() { BitWriter writer = new BitWriter(); Serializer.serialize(writer, testClass); } @MicroBenchmark(name = "Annotation-driven deserialize", iterations = 10000) public void annotationDrivenDeserialize() { BitReader reader = new BitReader(data); Serializer.deserialize(reader, SerializerTestClass.class); } }