1 57 package performance; 58 59 import java.text.DecimalFormat ; 60 import java.util.ArrayList ; 61 import java.util.Collections ; 62 import java.util.HashMap ; 63 import java.util.Iterator ; 64 65 70 public class Monitor { 71 72 static HashMap timers = new HashMap (); 73 74 public static void start(String s) { 75 Timer t = (Timer)timers.get( s ); 76 if ( t == null ) { 77 t = new Timer(); 78 timers.put( s, t ); 79 } 80 t.start(); 81 } 82 83 public static void stop(String s) { 84 Timer t = (Timer)timers.get( s ); 85 t.stop(); 86 } 87 88 public static void pause(String s) { 89 Timer t = (Timer)timers.get( s ); 90 if ( t != null ) { 91 t.pause(); 92 } 93 } 94 95 public static void resume(String s) { 96 Timer t = (Timer)timers.get( s ); 97 if ( t != null ) { 98 t.resume(); 99 } 100 } 101 102 public static void clear() { 103 timers = new HashMap (); 104 } 105 106 public static HashMap getAvgResults() { 107 Timer t; 108 String testName; 109 HashMap results = new HashMap (); 110 for (Iterator i = timers.keySet().iterator(); i.hasNext(); ) { 111 testName = (String )i.next(); 112 t = (Timer)timers.get( testName ); 113 float f1 = t.getAvgTime(); 114 Float f = new Float ( t.getAvgTime() ); 115 results.put( testName, new Float ( t.getAvgTime() ) ); 116 } 117 return results; 118 } 119 120 public static void printResults() { 121 Timer t; 122 String testName; 123 float value; 124 ArrayList l = new ArrayList (); 125 for (Iterator i = timers.keySet().iterator(); i.hasNext(); ) { 126 l.add( i.next() ); 127 } 128 129 Collections.sort( l ); 130 DecimalFormat formatter = new DecimalFormat ("#0.00000"); 131 132 System.out.println( "\n=== Monitor Results ===\n" ); 133 for (Iterator i = l.iterator(); i.hasNext(); ) { 134 testName = (String )i.next(); 135 t = (Timer)timers.get( testName ); 136 System.out.println( pad(testName,40) + 138 " value=" + lpad(formatter.format( t.getAvgTime() ),8) + " msecs" + 139 ", samples= " + lpad( ""+t.getIterations(), 8 ) ); 140 } 141 System.out.println(); 142 } 143 144 public static String pad(String s, int pad) { 145 if ( s==null ) s = ""; 146 StringBuffer sb = new StringBuffer ( pad ); 147 for (int i = 0; i < (pad-s.length()); i++) { 148 sb = sb.append( " " ); 149 } 150 return s + sb.toString(); 151 } 152 153 public static String lpad(String s, int pad) { 154 if ( s==null ) s = ""; 155 StringBuffer sb = new StringBuffer ( pad ); 156 for (int i = 0; i < (pad-s.length()); i++) { 157 sb = sb.append( " " ); 158 } 159 return sb.toString() + s; 160 } 161 162 } 163 164 class Timer { 165 166 long start; 167 long interval; 168 long totalTime; 169 int startCount; 170 long minimumInterval, errorInterval; 171 static final long CLOCK_ACCURACY = 10; 173 public Timer() { 174 interval = 0; 175 totalTime = 0; 176 startCount = 0; 177 minimumInterval = Long.MAX_VALUE; 178 errorInterval = Long.MAX_VALUE; 179 } 180 181 public void start() { 182 interval = 0; 183 startCount +=1; 184 totalTime += interval; 185 start = System.currentTimeMillis(); 186 } 187 188 public void pause() { 189 interval += System.currentTimeMillis() - start; 190 start = 0; 191 } 192 193 public void resume() { 194 start = System.currentTimeMillis(); 195 } 196 197 public void stop() { 198 long thisInterval = System.currentTimeMillis() - start; 199 if ( thisInterval > errorInterval ) { 200 startCount-=1; } else { 202 interval += thisInterval; 203 totalTime += thisInterval; 204 if ( startCount > 1 && minimumInterval > 0 && interval < minimumInterval ) { 205 minimumInterval = interval; 206 errorInterval = minimumInterval + CLOCK_ACCURACY; 207 startCount = 0; 208 totalTime = 0; 209 } 210 } 211 } 212 213 public long getInterval() { 214 return interval; 215 } 216 217 public float getAvgTime() { 218 return (float)totalTime / startCount; 219 } 220 221 public int getIterations() { 222 return startCount; 223 } 224 225 }
| Popular Tags
|