Package com.google.common.base
Class Stopwatch
- java.lang.Object
-
- com.google.common.base.Stopwatch
-
@GwtCompatible(emulated=true) public final class Stopwatch extends java.lang.Object
An object that measures elapsed time in nanoseconds. It is useful to measure elapsed time using this class instead of direct calls toSystem.nanoTime()
for a few reasons:- An alternate time source can be substituted, for testing or performance reasons.
- As documented by
nanoTime
, the value returned has no absolute meaning, and can only be interpreted as relative to another timestamp returned bynanoTime
at a different time.Stopwatch
is a more effective abstraction because it exposes only these relative values, not the absolute ones.
Basic usage:
Stopwatch stopwatch = Stopwatch.
createStarted
(); doSomething(); stopwatch.stop
(); // optional long millis = stopwatch.elapsed(MILLISECONDS); log.info("time: " + stopwatch); // formatted string like "12.3 ms"Stopwatch 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.
- Since:
- 10.0
- Author:
- Kevin Bourrillion
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description static Stopwatch
createStarted()
Creates (and starts) a new stopwatch usingSystem.nanoTime()
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 usingSystem.nanoTime()
as its time source.static Stopwatch
createUnstarted(Ticker ticker)
Creates (but does not start) a new stopwatch, using the specified time source.long
elapsed(java.util.concurrent.TimeUnit desiredUnit)
Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit, with any fraction rounded down.long
elapsedMillis()
Deprecated.Usestopwatch.elapsed(MILLISECONDS)
instead.long
elapsedTime(java.util.concurrent.TimeUnit desiredUnit)
Deprecated.Useelapsed(TimeUnit)
instead.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.java.lang.String
toString()
Returns a string representation of the current elapsed time.java.lang.String
toString(int significantDigits)
Deprecated.UsetoString()
instead.
-
-
-
Constructor Detail
-
Stopwatch
public Stopwatch()
-
Stopwatch
public Stopwatch(Ticker ticker)
-
-
Method Detail
-
createUnstarted
@CheckReturnValue public static Stopwatch createUnstarted()
Creates (but does not start) a new stopwatch usingSystem.nanoTime()
as its time source.- Since:
- 15.0
-
createUnstarted
@CheckReturnValue public static Stopwatch createUnstarted(Ticker ticker)
Creates (but does not start) a new stopwatch, using the specified time source.- Since:
- 15.0
-
createStarted
@CheckReturnValue public static Stopwatch createStarted()
Creates (and starts) a new stopwatch usingSystem.nanoTime()
as its time source.- Since:
- 15.0
-
createStarted
@CheckReturnValue public static Stopwatch createStarted(Ticker ticker)
Creates (and starts) a new stopwatch, using the specified time source.- Since:
- 15.0
-
isRunning
@CheckReturnValue public boolean isRunning()
-
start
public Stopwatch start()
Starts the stopwatch.- Returns:
- this
Stopwatch
instance - Throws:
java.lang.IllegalStateException
- 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:
java.lang.IllegalStateException
- 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
@CheckReturnValue public long elapsed(java.util.concurrent.TimeUnit desiredUnit)
Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit, with any fraction rounded down.Note that the overhead of measurement can be more than a microsecond, so it is generally not useful to specify
TimeUnit.NANOSECONDS
precision here.- Since:
- 14.0 (since 10.0 as
elapsedTime()
)
-
elapsedTime
@Deprecated public long elapsedTime(java.util.concurrent.TimeUnit desiredUnit)
Deprecated.Useelapsed(TimeUnit)
instead. This method is scheduled to be removed in Guava release 16.0.Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit, with any fraction rounded down.Note that the overhead of measurement can be more than a microsecond, so it is generally not useful to specify
TimeUnit.NANOSECONDS
precision here.
-
elapsedMillis
@Deprecated public long elapsedMillis()
Deprecated.Usestopwatch.elapsed(MILLISECONDS)
instead. This method is scheduled to be removed in Guava release 16.0.Returns the current elapsed time shown on this stopwatch, expressed in milliseconds, with any fraction rounded down. This is identical toelapsed(TimeUnit.MILLISECONDS)
.
-
toString
@GwtIncompatible("String.format()") public java.lang.String toString()
Returns a string representation of the current elapsed time.- Overrides:
toString
in classjava.lang.Object
-
toString
@Deprecated @GwtIncompatible("String.format()") public java.lang.String toString(int significantDigits)
Deprecated.UsetoString()
instead. This method is scheduled to be removed in Guava release 15.0.Returns a string representation of the current elapsed time, choosing an appropriate unit and using the specified number of significant figures. For example, at the instant whenelapsed(NANOSECONDS)
would return {1234567},toString(4)
returns"1.235 ms"
.
-
-