00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 package org.objectweb.proactive.core.util.timer;
00032
00033 public class MicroTimer implements Timeable {
00034 private static boolean nativeMode;
00035
00036 static {
00037 try {
00038 System.loadLibrary("MicroTimer");
00039 nativeMode = true;
00040 } catch (Throwable e) {
00041 e.printStackTrace();
00042 System.err.println(
00043 "WARNING: couldn't load native lib, falling back to milliseconds");
00044 nativeMode = false;
00045 }
00046 }
00047
00048 private long[] startTime;
00049 private long[] endTime;
00050
00051 public native long[] currentTime();
00052
00053 public long startTime2;
00054 public long endTime2;
00055
00056 public MicroTimer() {
00057 }
00058
00059 public void start() {
00060 if (nativeMode) {
00061 this.startTime = currentTime();
00062 this.endTime = currentTime();
00063 } else {
00064 this.startTime2 = System.currentTimeMillis();
00065 this.endTime2 = this.startTime2;
00066 }
00067 }
00068
00073 public void stop() {
00074 if (MicroTimer.nativeMode) {
00075 this.endTime = currentTime();
00076 } else {
00077 this.endTime2 = System.currentTimeMillis();
00078 }
00079 }
00080
00086 public long getCumulatedTime() {
00087 if (nativeMode) {
00088 long[] tmp = this.updateCumulatedTime(startTime, endTime);
00089 return (tmp[0] * 1000000) + tmp[1];
00090 } else {
00091 return (endTime2 - startTime2);
00092 }
00093 }
00094
00095 protected long[] updateCumulatedTime(long[] t1, long[] t2) {
00096 long[] tmp = new long[2];
00097 tmp[0] = t2[0] - t1[0];
00098
00099 if ((t2[1] - t1[1]) < 0) {
00100
00101 tmp[0]--;
00102 tmp[1] = (t2[1] + 1000000) - t1[1];
00103 } else {
00104 tmp[1] += (t2[1] - t1[1]);
00105 }
00106 return tmp;
00107 }
00108
00109 public String getUnit() {
00110 if (nativeMode) {
00111 return "micros";
00112 } else {
00113 return "millis";
00114 }
00115 }
00116
00117 public static void main(String[] args) {
00118 MicroTimer micro = new MicroTimer();
00119 System.out.println("Test starting...");
00120 micro.start();
00121 try {
00122 Thread.sleep(1000);
00123 } catch (InterruptedException e) {
00124 e.printStackTrace();
00125 }
00126 micro.stop();
00127 System.out.println("After 1000ms : " + micro.getCumulatedTime() +
00128 micro.getUnit());
00129 }
00130 }