1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package net.sf.jour.timer;
22
23
24
25
26
27
28
29
30
31 /***
32 * A simple interface for measuring time intervals.
33 *
34 * @author vlads
35 * @version $Revision: 1.1 $ ($Author: vlads $)
36 */
37 public class StatisticsItem {
38
39 public long count;
40
41 public double time_min;
42 public double time_max;
43
44 private double time_total;
45 private double time_total_squares;
46
47 public boolean ignoreFirst;
48
49 public StatisticsItem() {
50 reset();
51 this.ignoreFirst = false;
52 }
53
54 public StatisticsItem(boolean ignoreFirst) {
55 reset();
56 this.ignoreFirst = ignoreFirst;
57 }
58
59 public void reset() {
60 time_total = 0;
61 time_min = 0;
62 time_max = 0;
63 count = 0;
64 time_total_squares = 0;
65 }
66
67 public long getCount() {
68 return count;
69 }
70
71 public double getAvg() {
72 if (count == 0) {
73 return 0;
74 }
75 if (count == 1) {
76 return time_total;
77 }
78
79 if (ignoreFirst) {
80
81 return time_total/(count - 1);
82 } else {
83 return time_total/count;
84 }
85 }
86
87 public void add(double millis) {
88 count ++;
89
90 time_total += millis;
91 time_total_squares += millis * millis;
92
93 if (((time_min > millis) || (time_min == 0)) && (millis != 0)) {
94 time_min = millis;
95 }
96 if (time_max < millis) {
97 time_max = millis;
98 }
99 }
100
101 public double getStandardDeviation() {
102 if (count <= 1) {
103 return 0;
104 }
105 double num = time_total_squares - (time_total*time_total) / count;
106 double sd = Math.sqrt(num/(count - 1));
107 return sd;
108 }
109
110 }
111