Class Stopwatch
-
- com.google.common.base.Stopwatch
-
@GwtCompatible(emulated=true) public final class Stopwatch extends
An object that accurately measures elapsed time: the measured duration between two successive readings of "now" in the same process.In contrast, wall time is a reading of "now" as given by a method like , best represented as an
Instant
. Such values can be subtracted to obtain aDuration
(such as byDuration.between
), but doing so does not give a reliable measurement of elapsed time, because wall time readings are inherently approximate, routinely affected by periodic clock corrections. Because this class (by default) uses , it is unaffected by these changes.Use this class instead of direct calls to for two reasons:
- The raw
long
values returned bynanoTime
are meaningless and unsafe to use in any other way than howStopwatch
uses them. - An alternative source of nanosecond ticks can be substituted, for example for testing or performance reasons, without affecting most of your code.
Basic usage:
Stopwatch stopwatch = Stopwatch.createStarted(); doSomething(); stopwatch.stop(); // optional Duration duration = stopwatch.elapsed(); log.info("time: " + stopwatch); // formatted string like "12.3 ms"
The state-changing methods are not idempotent; it is an error to start or stop a stopwatch that is already in the desired state.
When testing code that uses this class, use
createUnstarted(Ticker)
orcreateStarted(Ticker)
to supply a fake or mock ticker. This allows you to simulate any valid behavior of the stopwatch.Note: This class is not thread-safe.
Warning for Android users: a stopwatch with default behavior may not continue to keep time while the device is asleep. Instead, create one like this:
Stopwatch.createStarted( new Ticker() { public long read() { return android.os.SystemClock.elapsedRealtimeNanos(); } });
- Since:
- 10.0
- Author:
- Kevin Bourrillion
- The raw
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Modifier and Type Method Description static Stopwatch
createStarted()
Creates (and starts) a new stopwatch using as its time source.static Stopwatch
createStarted(Ticker ticker)
Creates (and starts) a new stopwatch, using the specified time source.static Stopwatch
createUnstarted()
Creates (but does not start) a new stopwatch using as its time source.static Stopwatch
createUnstarted(Ticker ticker)
Creates (but does not start) a new stopwatch, using the specified time source.elapsed()
Returns the current elapsed time shown on this stopwatch as a .long
desiredUnit)
Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit, with any fraction rounded down.boolean
isRunning()
Stopwatch
reset()
Sets the elapsed time for this stopwatch to zero, and places it in a stopped state.Stopwatch
start()
Starts the stopwatch.Stopwatch
stop()
Stops the stopwatch.toString()
Returns a string representation of the current elapsed time.
-
-
-
Method Detail
-
createUnstarted
public static Stopwatch createUnstarted()
Creates (but does not start) a new stopwatch using as its time source.- Since:
- 15.0
-
createUnstarted
public static Stopwatch createUnstarted(Ticker ticker)
Creates (but does not start) a new stopwatch, using the specified time source.- Since:
- 15.0
-
createStarted
public static Stopwatch createStarted()
Creates (and starts) a new stopwatch using as its time source.- Since:
- 15.0
-
createStarted
public static Stopwatch createStarted(Ticker ticker)
Creates (and starts) a new stopwatch, using the specified time source.- Since:
- 15.0
-
isRunning
public boolean isRunning()
-
start
public Stopwatch start()
Starts the stopwatch.- Returns:
- this
Stopwatch
instance - Throws:
- if the stopwatch is already running.
-
stop
public Stopwatch stop()
Stops the stopwatch. Future reads will return the fixed duration that had elapsed up to this point.- Returns:
- this
Stopwatch
instance - Throws:
- if the stopwatch is already stopped.
-
reset
public Stopwatch reset()
Sets the elapsed time for this stopwatch to zero, and places it in a stopped state.- Returns:
- this
Stopwatch
instance
-
elapsed
public long desiredUnit)
Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit, with any fraction rounded down.Note: the overhead of measurement can be more than a microsecond, so it is generally not useful to specify precision here.
It is generally not a good idea to use an ambiguous, unitless
long
to represent elapsed time. Therefore, we recommend usingelapsed()
instead, which returns a strongly-typedDuration
instance.- Since:
- 14.0 (since 10.0 as
elapsedTime()
)
-
elapsed
@GwtIncompatible public elapsed()
Returns the current elapsed time shown on this stopwatch as a . Unlikeelapsed(TimeUnit)
, this method does not lose any precision due to rounding.- Since:
- 22.0
-
toString
public toString()
Returns a string representation of the current elapsed time.- Overrides:
in class
- Returns:
- a string representation of the object.
-
-