01: /*
02: This source file is part of Smyle, a database library.
03: For up-to-date information, see http://www.drjava.de/smyle
04: Copyright (C) 2001 Stefan Reich (doc@drjava.de)
05:
06: This library is free software; you can redistribute it and/or
07: modify it under the terms of the GNU Lesser General Public
08: License as published by the Free Software Foundation; either
09: version 2.1 of the License, or (at your option) any later version.
10:
11: This library is distributed in the hope that it will be useful,
12: but WITHOUT ANY WARRANTY; without even the implied warranty of
13: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14: Lesser General Public License for more details.
15:
16: You should have received a copy of the GNU Lesser General Public
17: License along with this library; if not, write to the Free Software
18: Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19:
20: For full license text, see doc/license/lgpl.txt in this distribution
21: */
22:
23: package drjava.util;
24:
25: import java.util.*;
26:
27: public abstract class Benchmark {
28: private Timer timer;
29: private double total, partStart;
30: private int repetitions = 1;
31: private String description = "total";
32: private Vector<String> partNames = new Vector<String>();
33: private Vector<Double> partTimes = new Vector<Double>();
34:
35: protected abstract void action();
36:
37: public Benchmark(Timer timer) {
38: this .timer = timer;
39: }
40:
41: public Benchmark() {
42: this .timer = new RealTimer();
43: }
44:
45: public double totalTime() {
46: return total;
47: }
48:
49: public void run() {
50: double startTime = timer.getMilliseconds();
51: partStart = startTime;
52: for (int i = 0; i < repetitions; i++)
53: action();
54: double endTime = timer.getMilliseconds();
55: total = (endTime - startTime) / repetitions;
56: }
57:
58: public void setRepetitions(int n) {
59: repetitions = n;
60: }
61:
62: public void setDescription(String description) {
63: this .description = description;
64: }
65:
66: String formatTime(double t) {
67: String time = String.valueOf(t);
68: if (time.endsWith(".0"))
69: time = time.substring(0, time.length() - 2);
70: return time + " ms";
71: }
72:
73: public String toString() {
74: StringBuffer buf = new StringBuffer(description + ": "
75: + formatTime(totalTime()));
76: for (int i = 0; i < partNames.size(); i++)
77: buf.append("\n-").append(partNames.get(i)).append(": ")
78: .append(formatTime(partTimes.get(i).doubleValue()));
79: return buf.toString();
80: }
81:
82: public void runAndPrint() {
83: run();
84: System.out.println(this );
85: }
86:
87: public void done(String partName) {
88: partNames.add(partName);
89: double time = timer.getMilliseconds();
90: partTimes.add(new Double(time - partStart));
91: partStart = time;
92: }
93: }
|