* @param flag\r
* @return\r
*/\r
- protected abstract TimeTaken newTimeTaken(String name, int flag);\r
+ protected abstract TimeTaken newTimeTaken(String name, int flag, Object ... values);\r
\r
-// @Override\r
- public final TimeTaken start(String name, int flag) {\r
- TimeTaken tt = newTimeTaken(name,flag);\r
+ @Override\r
+ public final TimeTaken start(String name, int flag, Object ... values) {\r
+ TimeTaken tt = newTimeTaken(name,flag, values);\r
trail.add(tt);\r
return tt;\r
}\r
\r
-// @Override\r
+ @Override\r
public final void checkpoint(String name) {\r
TimeTaken tt = newTimeTaken(name,CHECKPOINT);\r
tt.done();\r
trail.add(tt);\r
}\r
\r
+ @Override\r
public final void checkpoint(String name, int additionalFlag) {\r
TimeTaken tt = newTimeTaken(name,CHECKPOINT|additionalFlag);\r
trail.add(tt);\r
- tt.done();\r
}\r
\r
@Override\r
@Override\r
public Metric auditTrail(LogTarget lt, int indent, StringBuilder sb, int ... flags) {\r
Metric metric = new Metric();\r
- int last = (metric.entries = trail.size()) -1;\r
+ metric.entries = trail.size();\r
+ int last = (metric.entries) -1;\r
metric.buckets = flags.length==0?EMPTYF:new float[flags.length];\r
- if(last>=0) {\r
+ if (last>=0) {\r
TimeTaken first = trail.get(0);\r
// If first entry is sub, then it's actually the last "end" as well\r
// otherwise, check end\r
//long end = (first.flag&SUB)==SUB?first.end():trail.get(last).end();\r
- long end = trail.get(last).end();\r
+ long end = 0L;\r
+ for(int i=last;end==0L && i>=0;--i) {\r
+ end= trail.get(i).end();\r
+ }\r
metric.total = (end - first.start) / 1000000f;\r
+ } else {\r
+ metric.total=0L;\r
}\r
\r
- if(sb==null) {\r
- for(TimeTaken tt : trail) {\r
+ if (sb==null) {\r
+ for (TimeTaken tt : trail) {\r
float ms = tt.millis();\r
- for(int i=0;i<flags.length;++i) {\r
- if(tt.flag == flags[i]) metric.buckets[i]+=ms;\r
+ for (int i=0;i<flags.length;++i) {\r
+ if (tt.flag == flags[i]) metric.buckets[i]+=ms;\r
}\r
}\r
- } else if(!lt.isLoggable()) {\r
+ } else if (!lt.isLoggable()) {\r
boolean first = true;\r
- for(TimeTaken tt : trail) {\r
+ for (TimeTaken tt : trail) {\r
float ms = tt.millis();\r
- for(int i=0;i<flags.length;++i) {\r
- if(tt.flag == flags[i]) metric.buckets[i]+=ms;\r
+ for (int i=0;i<flags.length;++i) {\r
+ if (tt.flag == flags[i]) metric.buckets[i]+=ms;\r
}\r
- if((tt.flag&ALWAYS)==ALWAYS) {\r
- if(first) first = false;\r
+ if ((tt.flag&ALWAYS)==ALWAYS) {\r
+ if (first) first = false;\r
else sb.append('/');\r
sb.append(tt.name);\r
}\r
} \r
} else {\r
- Stack<Long> stack = new Stack<Long>();\r
- for(TimeTaken tt : trail) {\r
+ Stack<Long> stack = new Stack<>();\r
+ for (TimeTaken tt : trail) {\r
// Create Indentation based on SUB\r
- while(!stack.isEmpty() && tt.end()>stack.peek()) {\r
+ while (!stack.isEmpty() && tt.end()>stack.peek()) {\r
--indent;\r
stack.pop();\r
}\r
- for(int i=0;i<indent;++i) {\r
+ for (int i=0;i<indent;++i) {\r
+ sb.append(" ");\r
+ }\r
+ if((tt.flag & CHECKPOINT)==CHECKPOINT) {\r
+ // Checkpoint\r
sb.append(" ");\r
+ } else {\r
+ float ms=tt.millis();\r
+ // Add time values to Metric\r
+ for (int i=0;i<flags.length;++i) {\r
+ if ((tt.flag & flags[i]) == flags[i]) {\r
+ metric.buckets[i]+=ms;\r
+ }\r
+ }\r
}\r
tt.output(sb);\r
sb.append('\n');\r
- if((tt.flag&SUB)==SUB) {\r
+ if ((tt.flag&SUB)==SUB) {\r
stack.push(tt.end());\r
++indent;\r
}\r
\r
- // Add time values to Metric\r
- float ms = tt.millis();\r
- for(int i=0;i<flags.length;++i) {\r
- if(tt.flag == flags[i]) metric.buckets[i]+=ms;\r
- }\r
}\r
}\r
return metric;\r
Object o;\r
try {\r
o = slot.get(state);\r
- } catch(ArrayIndexOutOfBoundsException e) {\r
+ } catch (ArrayIndexOutOfBoundsException e) {\r
// Env State Size has changed because of dynamic Object creation... Rare event, but needs to be covered\r
Object[] temp = ((StoreImpl) delegate).newTransState();\r
System.arraycopy(state, 0, temp, 0, state.length);\r