blob: 44215d3a5645d7289e53f69821d54c9e5078c674 [file] [log] [blame]
cowtowncoder3f1dee82009-02-19 20:11:55 +00001import java.io.*;
2
3import org.codehaus.jackson.*;
4import org.codehaus.jackson.map.*;
cowtowncoder3f1dee82009-02-19 20:11:55 +00005
6public final class TestSerPerf
7{
8 /*
9 /////////////////////////////////////////////////////
10 // Bean classes
11 /////////////////////////////////////////////////////
12 */
13
cowtowncoder003228a2009-06-24 19:06:07 +000014 static class NonFinalBean {
cowtowncoder3f1dee82009-02-19 20:11:55 +000015 final NonFinalBean2 _bean = new NonFinalBean2();
16
17 public NonFinalBean2 getBean() { return _bean; }
18 public NonFinalBean2 getBean2() { return _bean; }
19 public NonFinalBean2 getBean3() { return _bean; }
20 public NonFinalBean2 getBean4() { return _bean; }
21 }
22
cowtowncoder003228a2009-06-24 19:06:07 +000023 static class NonFinalBean2 {
cowtowncoder3f1dee82009-02-19 20:11:55 +000024 public int getX() { return 3; }
25 public String getName() { return "foobar"; }
26 }
27
cowtowncoder003228a2009-06-24 19:06:07 +000028 final static class FinalBean {
cowtowncoder3f1dee82009-02-19 20:11:55 +000029 final FinalBean2 _bean = new FinalBean2();
30
31 public FinalBean2 getBean() { return _bean; }
32 public FinalBean2 getBean2() { return _bean; }
33 public FinalBean2 getBean3() { return _bean; }
34 public FinalBean2 getBean4() { return _bean; }
35 }
36
cowtowncoder003228a2009-06-24 19:06:07 +000037 final static class FinalBean2 {
38 public int getX() { return 3; }
39 public String getName() { return "foobar"; }
40 }
41
42 final static class FinalFieldBean {
43 private final FinalFieldBean2 _bean = new FinalFieldBean2();
44
45 public FinalFieldBean2 fieldBean = _bean;
46 public FinalFieldBean2 fieldBean2 = _bean;
47 public FinalFieldBean2 fieldBean3 = _bean;
48 public FinalFieldBean2 fieldBean4 = _bean;
49 }
50
51 final static class FinalFieldBean2 {
cowtowncoder87590182009-06-28 01:22:13 +000052 public int x = 3;
53 public String name = "foobar";
cowtowncoderb33abfc2009-02-21 00:19:08 +000054 }
cowtowncoder3f1dee82009-02-19 20:11:55 +000055
56 private final int REPS;
cowtowncoder003228a2009-06-24 19:06:07 +000057 private final ObjectMapper _mapper;
cowtowncoder3f1dee82009-02-19 20:11:55 +000058
59 final Object _finalBean = new FinalBean();
cowtowncoder003228a2009-06-24 19:06:07 +000060 final Object _finalFieldBean = new FinalFieldBean();
cowtowncoder3f1dee82009-02-19 20:11:55 +000061 final Object _nonFinalBean = new NonFinalBean();
62
cowtowncoder939cdad2009-12-10 07:26:29 +000063 private TestSerPerf()
cowtowncoder3f1dee82009-02-19 20:11:55 +000064 throws Exception
65 {
cowtowncoder003228a2009-06-24 19:06:07 +000066 _mapper = new ObjectMapper();
cowtowncoder3f1dee82009-02-19 20:11:55 +000067 // Let's try to guestimate suitable size... to get to 50 megs processed
cowtowncoder87590182009-06-28 01:22:13 +000068 REPS = 10000;
cowtowncoder3f1dee82009-02-19 20:11:55 +000069 }
70
71 public void test()
72 throws Exception
73 {
74 int i = 0;
75 int sum = 0;
76
77 ByteArrayOutputStream result = new ByteArrayOutputStream();
78
79 // Let's create tree from objects
80 testObjectSer(_finalBean, 1, result);
cowtowncoder003228a2009-06-24 19:06:07 +000081 final JsonNode _tree = _mapper.readTree(new JsonFactory().createJsonParser(result.toByteArray()));
cowtowncoder3f1dee82009-02-19 20:11:55 +000082
83 while (true) {
84 try { Thread.sleep(100L); } catch (InterruptedException ie) { }
cowtowncoder87590182009-06-28 01:22:13 +000085 int round = (i++ % 3);
cowtowncoder3f1dee82009-02-19 20:11:55 +000086
87 long curr = System.currentTimeMillis();
88 String msg;
89 boolean lf = (round == 0);
90
91 switch (round) {
92
93 case 0:
cowtowncoder003228a2009-06-24 19:06:07 +000094 msg = "Jackson, object+GET, final";
cowtowncoder3f1dee82009-02-19 20:11:55 +000095 sum += testObjectSer(_finalBean, REPS, result);
96 break;
97 case 1:
cowtowncoder003228a2009-06-24 19:06:07 +000098 msg = "Jackson, object+Field, final";
99 sum += testObjectSer(_finalFieldBean, REPS, result);
100 break;
101 case 2:
cowtowncoder3f1dee82009-02-19 20:11:55 +0000102 msg = "Jackson, tree";
103 sum += testTreeSer(_tree, REPS, result);
104 break;
cowtowncoder87590182009-06-28 01:22:13 +0000105
106 /*
107 case 4:
108 msg = "Jackson, object, nonfinal";
109 sum += testObjectSer(_nonFinalBean, REPS, result);
110 break;
111 */
112
113
cowtowncoder3f1dee82009-02-19 20:11:55 +0000114 default:
115 throw new Error("Internal error");
116 }
117
118 curr = System.currentTimeMillis() - curr;
119 if (lf) {
120 System.out.println();
121 }
122 System.out.println("Test '"+msg+"' -> "+curr+" msecs ("
123 +(sum & 0xFF)+").");
cowtowncoder3f1dee82009-02-19 20:11:55 +0000124 }
125 }
126
127 protected int testObjectSer(Object value, int reps, ByteArrayOutputStream result)
128 throws Exception
129 {
cowtowncoder3f1dee82009-02-19 20:11:55 +0000130 for (int i = 0; i < reps; ++i) {
131 result.reset();
cowtowncoder003228a2009-06-24 19:06:07 +0000132 _mapper.writeValue(result, value);
cowtowncoder3f1dee82009-02-19 20:11:55 +0000133 }
cowtowncoder003228a2009-06-24 19:06:07 +0000134 return _mapper.hashCode(); // just to get some non-optimizable number
cowtowncoder3f1dee82009-02-19 20:11:55 +0000135 }
136
cowtowncoder003228a2009-06-24 19:06:07 +0000137 protected int testTreeSer(JsonNode root, int reps, ByteArrayOutputStream result)
cowtowncoder3f1dee82009-02-19 20:11:55 +0000138 throws Exception
139 {
cowtowncoder3f1dee82009-02-19 20:11:55 +0000140 for (int i = 0; i < reps; ++i) {
141 result.reset();
cowtowncoder003228a2009-06-24 19:06:07 +0000142 _mapper.writeValue(result, root);
cowtowncoder3f1dee82009-02-19 20:11:55 +0000143 }
cowtowncoder003228a2009-06-24 19:06:07 +0000144 return _mapper.hashCode(); // just to get some non-optimizable number
cowtowncoder3f1dee82009-02-19 20:11:55 +0000145 }
146
147 public static void main(String[] args) throws Exception
148 {
149 new TestSerPerf().test();
150 }
151}