Advertisement
Guest User

Untitled

a guest
Sep 15th, 2009
288
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.32 KB | None | 0 0
  1. package com.micro.bench;
  2.  
  3. import java.util.*;
  4.  
  5. public class Timer {
  6.  
  7.     private static final String ZEROES = "000000000000";
  8.     private static final String BLANKS = "            ";
  9.  
  10.     private long startTime = 0;
  11.     private String msg = null;
  12.  
  13.     private Map<String, Long> currentMeasure = new LinkedHashMap<String, Long>();
  14.     private Map<String, List<Long>> pastMeasures = new LinkedHashMap<String, List<Long>>();
  15.  
  16.     public void start(String msg) {
  17.         if (startTime != 0) {
  18.             throw new IllegalStateException("Already started");
  19.         }
  20.         startTime = System.currentTimeMillis();
  21.         this.msg = msg;
  22.     }
  23.  
  24.     public void stop() {
  25.         long now = System.currentTimeMillis();
  26.  
  27.         Long value = currentMeasure.get(msg);
  28.  
  29.         if (value == null) {
  30.             value = 0L;
  31.         }
  32.  
  33.         value += now - startTime;
  34.         currentMeasure.put(msg, value);
  35.  
  36.         startTime = 0;
  37.         msg = null;
  38.     }
  39.  
  40.     public void flush() {
  41.         for (String event : currentMeasure.keySet()) {
  42.             List<Long> list = pastMeasures.get(event);
  43.             if (list == null) {
  44.                 list = new ArrayList<Long>();
  45.                 pastMeasures.put(event, list);
  46.             }
  47.             list.add(currentMeasure.get(event));
  48.             currentMeasure.put(event, 0L);
  49.         }
  50.     }
  51.  
  52.     public String toString() {
  53.         StringBuilder sb = new StringBuilder("Statistics: \n");
  54.         sb.append("     total|")
  55.                 .append("    amount|")
  56.                 .append("      last|")
  57.                 .append("    last 5|")
  58.                 .append("   last 10|")
  59.                 .append("       avg|")
  60.                 .append("       dev|")
  61.                 .append("         operation\n");
  62.         for (String event : pastMeasures.keySet()) {
  63.             List<Long> data = pastMeasures.get(event);
  64.             sb.append(format(getSummary(data))).append("|");
  65.             sb.append(format(data.size())).append("|");
  66.             sb.append(format(data.get(data.size() - 1))).append("|");
  67.             sb.append(format(getAverage(data, 5))).append("|");
  68.             sb.append(format(getAverage(data, 10))).append("|");
  69.             sb.append(format(getAverage(data))).append("|");
  70.             sb.append(format(getStandardDeviation(data))).append("|      .. ");
  71.             sb.append(event).append("\n");
  72.         }
  73.         return sb.toString();
  74.     }
  75.  
  76.     private static String format(double num) {
  77.         return format(num, 2, 10);
  78.     }
  79.  
  80.     private static String format(double val, int n, int w) {
  81.  
  82.         if (Double.isNaN(val)) {
  83.             return BLANKS.substring(0, w - "NaN".length()) + "NaN";
  84.         }
  85.  
  86.         //  rounding
  87.         double incr = 0.5;
  88.         for (int j = n; j > 0; j--) {
  89.             incr /= 10;
  90.         }
  91.         val += incr;
  92.  
  93.         String s = Double.toString(val);
  94.         int n1 = s.indexOf('.');
  95.         int n2 = s.length() - n1 - 1;
  96.  
  97.         if (n > n2) {
  98.             s = s + ZEROES.substring(0, n - n2);
  99.         } else if (n2 > n) {
  100.             s = s.substring(0, n1 + n + 1);
  101.         }
  102.  
  103.         if (w > 0 & w > s.length()) {
  104.             s = BLANKS.substring(0, w - s.length()) + s;
  105.         } else if (w < 0 & (-w) > s.length()) {
  106.             w = -w;
  107.             s = s + BLANKS.substring(0, w - s.length());
  108.         }
  109.         return s;
  110.     }
  111.  
  112.     private static long getSummary(List<Long> data, int last) {
  113.         long sum = 0L;
  114.         int start = Math.max(0, data.size() - last);
  115.         for (int i = start; i < data.size(); i++) {
  116.             sum += data.get(i);
  117.         }
  118.         return sum;
  119.     }
  120.  
  121.     private static long getSummary(List<Long> data) {
  122.         long sum = 0L;
  123.         for (Long item : data) {
  124.             sum = sum + item;
  125.         }
  126.         return sum;
  127.     }
  128.  
  129.     private static double getAverage(List<Long> data, int last) {
  130.         return getSummary(data, last) / last;
  131.     }
  132.  
  133.     private static double getAverage(List<Long> data) {
  134.         return (double) getSummary(data) / data.size();
  135.     }
  136.  
  137.     private static double getStandardDeviation(List<Long> data) {
  138.         double avg = getAverage(data);
  139.         double stdev = 0L;
  140.         for (Long v : data) {
  141.             stdev += Math.pow(avg - v, 2);
  142.         }
  143.         return Math.sqrt(stdev) / (data.size() - 1);
  144.     }
  145. }
  146.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement