001: package org.apache.lucene.benchmark.stats;
002:
003: /**
004: * Copyright 2005 The Apache Software Foundation
005: *
006: * Licensed under the Apache License, Version 2.0 (the "License");
007: * you may not use this file except in compliance with the License.
008: * You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS,
014: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */
018:
019: /**
020: * This class holds a data point measuring speed of processing.
021: *
022: * @author Andrzej Bialecki <ab@getopt.org>
023: */
024: public class TimeData {
025: /** Name of the data point - usually one of a data series with the same name */
026: public String name;
027: /** Number of records processed. */
028: public long count = 0;
029: /** Elapsed time in milliseconds. */
030: public long elapsed = 0L;
031:
032: private long delta = 0L;
033: /** Free memory at the end of measurement interval. */
034: public long freeMem = 0L;
035: /** Total memory at the end of measurement interval. */
036: public long totalMem = 0L;
037:
038: public TimeData() {
039: };
040:
041: public TimeData(String name) {
042: this .name = name;
043: }
044:
045: /** Start counting elapsed time. */
046: public void start() {
047: delta = System.currentTimeMillis();
048: }
049:
050: /** Stop counting elapsed time. */
051: public void stop() {
052: count++;
053: elapsed += (System.currentTimeMillis() - delta);
054: }
055:
056: /** Record memory usage. */
057: public void recordMemUsage() {
058: freeMem = Runtime.getRuntime().freeMemory();
059: totalMem = Runtime.getRuntime().totalMemory();
060: }
061:
062: /** Reset counters. */
063: public void reset() {
064: count = 0;
065: elapsed = 0L;
066: delta = elapsed;
067: }
068:
069: protected Object clone() {
070: TimeData td = new TimeData(name);
071: td.name = name;
072: td.elapsed = elapsed;
073: td.count = count;
074: td.delta = delta;
075: td.freeMem = freeMem;
076: td.totalMem = totalMem;
077: return td;
078: }
079:
080: /** Get rate of processing, defined as number of processed records per second. */
081: public double getRate() {
082: double rps = (double) count * 1000.0
083: / (double) (elapsed > 0 ? elapsed : 1); // assume atleast 1ms for any countable op
084: return rps;
085: }
086:
087: /** Get a short legend for toString() output. */
088: public static String getLabels() {
089: return "# count\telapsed\trec/s\tfreeMem\ttotalMem";
090: }
091:
092: public String toString() {
093: return toString(true);
094: }
095:
096: /**
097: * Return a tab-seprated string containing this data.
098: * @param withMem if true, append also memory information
099: * @return The String
100: */
101: public String toString(boolean withMem) {
102: StringBuffer sb = new StringBuffer();
103: sb.append(count + "\t" + elapsed + "\t" + getRate());
104: if (withMem)
105: sb.append("\t" + freeMem + "\t" + totalMem);
106: return sb.toString();
107: }
108: }
|