package jelectrum; import java.util.TreeMap; import java.util.Map; import java.text.DecimalFormat; import java.io.PrintStream; public class TimeRecord { private TreeMap<String, Long> times=new TreeMap<String, Long>(); private TreeMap<String, Long> counts=new TreeMap<String, Long>(); public synchronized void addTime(long tm, String name) { addTime(tm, name, 1L); } public synchronized void addTime(long tm, String name, long count) { { Long prev = times.get(name); long p = 0; if (prev != null) p = prev; times.put(name, p + tm); } { Long prev = counts.get(name); long p = 0; if (prev != null) p = prev; counts.put(name, p + count); } } public synchronized void printReport(PrintStream out) { DecimalFormat df = new DecimalFormat("0.000"); for(Map.Entry<String, Long> me : times.entrySet()) { String name = me.getKey(); long nanosec = me.getValue(); double seconds = nanosec / 1e9; out.println(" " + name + " - " + df.format(seconds) + " seconds " + counts.get(name) + " calls"); } } public synchronized void reset() { times.clear(); counts.clear(); } private static TimeRecord shared; public static void setSharedRecord(TimeRecord s) { shared = s; } public static void record(long start, String name) { record(start, name, 1L); } public static void record(long start, String name, long count) { if (shared != null) { shared.addTime(System.nanoTime() - start, name, count); } } }