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;
}
}
}