package perf; import java.math.BigDecimal; import java.math.BigInteger; import java.util.*; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.ObjectWriter; /* Test modified from json-parsers-benchmark, to be able to profile * Jackson implementation. */ public class ManualWritePerfWithAllTypes extends ObjectWriterTestBase<ManualWritePerfWithAllTypes.AllTypes, ManualWritePerfWithAllTypes.AllTypes> { @Override protected int targetSizeMegs() { return 15; } public static void main(String[] args) throws Exception { if (args.length != 0) { System.err.println("Usage: java ..."); System.exit(1); } ObjectMapper m = new ObjectMapper(); AllTypes input1 = AllTypes.bigObject(); AllTypes input2 = AllTypes.bigObject(); new ManualWritePerfWithAllTypes().test(m, "AllTypes/small-1", input1, AllTypes.class, "AllTypes/small-2", input2, AllTypes.class); } @Override protected double testSer(int REPS, Object value, ObjectWriter writer) throws Exception { final NopOutputStream out = new NopOutputStream(); long start = System.nanoTime(); byte[] output = null; while (--REPS >= 0) { output = writer.writeValueAsBytes(value); } hash = output.length; long nanos = System.nanoTime() - start; out.close(); return _msecsFromNanos(nanos); } // Value type for test public static class AllTypes { enum FooEnum { FOO, BAR; } protected String ignoreMe; public String ignoreMe2; public String ignoreMe3; public int myInt; public boolean myBoolean; public short myShort; public long myLong; public String string; public String string2; public BigDecimal bigDecimal; public BigInteger bigInteger; public Date date; public float myFloat; public double myDouble; public byte myByte; public FooEnum foo; public FooEnum bar; public long someDate = new Date().getTime (); public AllTypes allType; public List<AllTypes> allTypes = new ArrayList<AllTypes>(); static AllTypes _small() { AllTypes small = new AllTypes(); small.ignoreMe = "THIS WILL NOT PASS"; small.ignoreMe2 = "THIS WILL NOT PASS EITHER"; small.ignoreMe3 = "THIS WILL NOT PASS TOO"; small.bigDecimal = new BigDecimal("1.235678900"); small.date = new Date(); small.bar = FooEnum.BAR; small.foo = FooEnum.FOO; small.string = "Hi Mom"; small.myDouble = 1.2345d; small.myFloat = 1.0f; small.myShort = (short)1; small.myByte = (byte)1; return small; } public static AllTypes smallObject() { AllTypes small = _small(); small.allType = _small(); small.allType.string = "Hi Dad"; small.allTypes = Arrays.asList(_small(), _small()); return small; } public static AllTypes bigObject() { AllTypes big = new AllTypes(); final List<AllTypes> list = new ArrayList<AllTypes>(); for (int index = 0; index < 10000; index++) { AllTypes item = new AllTypes(); item.ignoreMe = "THIS WILL NOT PASS"; item.ignoreMe2 = "THIS WILL NOT PASS EITHER"; item.ignoreMe3 = "THIS WILL NOT PASS TOO"; item.bigDecimal = new BigDecimal("1.235678900"); item.date = new Date (); item.bar = FooEnum.BAR; item.foo = FooEnum.FOO; item.string = "Hi Mom" + System.currentTimeMillis(); item.myDouble = 1.2345d; item.myFloat = 1.0f; item.myShort = (short)1; item.myByte = (byte)1; list.add(item); } big.allTypes = list; return big; } } }