01: /*
02: * Copyright (c) 2001 Silvere Martin-Michiellot All Rights Reserved.
03: *
04: * Silvere Martin-Michiellot grants you ("Licensee") a non-exclusive,
05: * royalty free, license to use, modify and redistribute this
06: * software in source and binary code form,
07: * provided that i) this copyright notice and license appear on all copies of
08: * the software; and ii) Licensee does not utilize the software in a manner
09: * which is disparaging to Silvere Martin-Michiellot.
10: *
11: * This software is provided "AS IS," without a warranty of any kind. ALL
12: * EXPRESS OR IMPLIED CONDITIONS, REPRESENTATIONS AND WARRANTIES, INCLUDING ANY
13: * IMPLIED WARRANTY OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE OR
14: * NON-INFRINGEMENT, ARE HEREBY EXCLUDED. Silvere Martin-Michiellot
15: * AND ITS LICENSORS SHALL NOT BE LIABLE FOR ANY DAMAGES
16: * SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING
17: * OR DISTRIBUTING THE SOFTWARE OR ITS DERIVATIVES. IN NO EVENT WILL
18: * Silvere Martin-Michiellot OR ITS LICENSORS BE LIABLE
19: * FOR ANY LOST REVENUE, PROFIT OR DATA, OR FOR DIRECT,
20: * INDIRECT, SPECIAL, CONSEQUENTIAL, INCIDENTAL OR PUNITIVE DAMAGES, HOWEVER
21: * CAUSED AND REGARDLESS OF THE THEORY OF LIABILITY, ARISING OUT OF THE USE OF
22: * OR INABILITY TO USE SOFTWARE, EVEN IF Silvere Martin-Michiellot HAS BEEN
23: * ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.
24: *
25: * This software is not designed or intended for use in on-line control of
26: * aircraft, air traffic, aircraft navigation or aircraft communications; or in
27: * the design, construction, operation or maintenance of any nuclear
28: * facility. Licensee represents and warrants that it will not use or
29: * redistribute the Software for such purposes.
30: *
31: * @Author: Silvere Martin-Michiellot
32: *
33: */
34:
35: package com.db.utils.timers;
36:
37: // This code is repackaged after the code from Joerg Plewe
38: // Site http://www.hardcode.de/
39: // Email plewe@hardcode.de
40:
41: /**
42: * Measure the accuracy of the timer
43: */
44:
45: //
46: // This classes 'measure' method has to be run at highest thread priority!
47: //
48: public class TimerAccuracy {
49:
50: static public long minRes = -1;
51: static public long maxRes = -1;
52:
53: final static public long measure(long _timeToMeasure) {
54:
55: // Max./min. ticker difference
56: maxRes = 0;
57: minRes = 999999;
58:
59: // Get current ms ticker
60: long ms = System.currentTimeMillis();
61:
62: // Calculate time to stop
63: long EndMs = ms + _timeToMeasure;
64:
65: while (ms < EndMs) {
66: long oldms = ms;
67:
68: ms = System.currentTimeMillis();
69:
70: long diff = ms - oldms;
71:
72: if (diff > maxRes)
73: maxRes = diff;
74:
75: if (diff > 0 && diff < minRes)
76: minRes = diff;
77: }
78:
79: System.out.println("Worst timer resolution: " + maxRes);
80: System.out.println("Best timer resolution: " + minRes);
81:
82: return minRes;
83:
84: }
85:
86: }
|