/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* JFlex 1.8.2 *
* Copyright (C) 1998-2018 Gerwin Klein <lsf@jflex.de> *
* All rights reserved. *
* *
* License: BSD *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
package jflex.performance;
Very simple timer for code generation time statistics.
Not very exact, measures user time, not processor time.
Author: Gerwin Klein Version: JFlex 1.8.2
/**
* Very simple timer for code generation time statistics.
*
* <p>Not very exact, measures user time, not processor time.
*
* @author Gerwin Klein
* @version JFlex 1.8.2
*/
public class Timer {
/* the timer stores start and stop time from currentTimeMillis() */
private long startTime, stopTime;
/* flag if the timer is running (if stop time is valid) */
private boolean running;
Construct a new timer that starts immediately. /** Construct a new timer that starts immediately. */
public Timer() {
startTime = System.currentTimeMillis();
running = true;
}
Start the timer. If it is already running, the old start time is lost. /** Start the timer. If it is already running, the old start time is lost. */
public void start() {
startTime = System.currentTimeMillis();
running = true;
}
Stop the timer. /** Stop the timer. */
public void stop() {
stopTime = System.currentTimeMillis();
running = false;
}
Return the number of milliseconds the timer has been running.
(up till now, if it still runs, up to the stop time if it has been stopped)
Returns: a long.
/**
* Return the number of milliseconds the timer has been running.
*
* <p>(up till now, if it still runs, up to the stop time if it has been stopped)
*
* @return a long.
*/
public long diff() {
if (running) return System.currentTimeMillis() - startTime;
else return stopTime - startTime;
}
Return a string representation of the timer.
See Also: Returns: a string displaying the diff-time in readable format (h m s ms)
/**
* Return a string representation of the timer.
*
* @return a string displaying the diff-time in readable format (h m s ms)
* @see Timer#diff
*/
@Override
public String toString() {
long diff = diff();
long millis = diff % 1000;
long secs = (diff / 1000) % 60;
long mins = (diff / (1000 * 60)) % 60;
long hs = (diff / (1000 * 3600)) % 24;
long days = diff / (1000 * 3600 * 24);
if (days > 0) return days + "d " + hs + "h " + mins + "m " + secs + "s " + millis + "ms";
if (hs > 0) return hs + "h " + mins + "m " + secs + "s " + millis + "ms";
if (mins > 0) return mins + "m " + secs + "s " + millis + "ms";
if (secs > 0) return secs + "s " + millis + "ms";
return millis + "ms";
}
}