1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.debug;
35
36 import info.magnolia.context.MgnlContext;
37
38 import java.util.Iterator;
39 import java.util.Map;
40
41 import org.apache.commons.collections4.Factory;
42 import org.apache.commons.collections4.MapUtils;
43 import org.apache.commons.collections4.map.LinkedMap;
44
45
46
47
48 public class PerformanceTestStatus {
49
50 private static final String ATTRIBUTE_NAME = PerformanceTestStatus.class.getName();
51
52
53
54
55 static class TestStatus {
56 long start = -1;
57 long total = -1;
58 }
59
60 Map states = MapUtils.lazyMap(new LinkedMap(), new Factory() {
61 @Override
62 public Object create() {
63 return new TestStatus();
64 }
65 });
66
67 public void start(String key) {
68 getTestStatus(key).start = System.currentTimeMillis();
69 }
70
71 private TestStatus getTestStatus(String key) {
72 return ((TestStatus) states.get(key));
73 }
74
75 public void stop(String key) {
76 TestStatus status = getTestStatus(key);
77 status.total += System.currentTimeMillis() - status.start;
78 }
79
80 public static PerformanceTestStatus getInstance() {
81 if (!MgnlContext.hasAttribute(ATTRIBUTE_NAME)) {
82 MgnlContext.setAttribute(ATTRIBUTE_NAME, new PerformanceTestStatus());
83 }
84 return (PerformanceTestStatus) MgnlContext.getAttribute(ATTRIBUTE_NAME);
85 }
86
87 @Override
88 public String toString() {
89 StringBuffer str = new StringBuffer();
90 final Iterator it = states.entrySet().iterator();
91 while (it.hasNext()) {
92 Map.Entry entry = (Map.Entry) it.next();
93 final TestStatus testStatus = (TestStatus) entry.getValue();
94 final String value = testStatus.total >= 0 ? String.valueOf(testStatus.total) : "(not stopped yet)";
95 str.append(entry.getKey());
96 str.append(": ");
97 str.append(value);
98 if (it.hasNext()) {
99 str.append(", ");
100 }
101 }
102 return str.toString();
103 }
104
105 }