public final class IgniteStopwatch extends Object
System.nanoTime() for a few reasons:
nanoTime, the value returned has no absolute meaning, and can only
be interpreted as relative to another timestamp returned by nanoTime 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
Duration duration = stopwatch.elapsed();
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(IgniteTicker) or createStarted(IgniteTicker) 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();
}
});
| Modifier and Type | Method and Description |
|---|---|
static IgniteStopwatch |
createStarted()
Creates (and starts) a new stopwatch using
System.nanoTime() as its time source. |
static IgniteStopwatch |
createStarted(IgniteTicker ticker)
Creates (and starts) a new stopwatch, using the specified time source.
|
static IgniteStopwatch |
createUnstarted()
Creates (but does not start) a new stopwatch using
System.nanoTime() as its time source. |
static IgniteStopwatch |
createUnstarted(IgniteTicker ticker)
Creates (but does not start) a new stopwatch, using the specified time source.
|
Duration |
elapsed()
Returns the current elapsed time shown on this stopwatch as a
Duration. |
long |
elapsed(TimeUnit desiredUnit)
Returns the current elapsed time shown on this stopwatch, expressed in the desired time unit,
with any fraction rounded down.
|
boolean |
isRunning()
|
static void |
logTime(IgniteLogger log,
String operationName,
IgniteThrowableRunner operation)
Execution given operation and calculation it time.
|
IgniteStopwatch |
reset()
Sets the elapsed time for this stopwatch to zero, and places it in a stopped state.
|
IgniteStopwatch |
start()
Starts the stopwatch.
|
IgniteStopwatch |
stop()
Stops the stopwatch.
|
public static IgniteStopwatch createUnstarted()
System.nanoTime() as its time source.public static IgniteStopwatch createUnstarted(IgniteTicker ticker)
public static IgniteStopwatch createStarted()
System.nanoTime() as its time source.public static IgniteStopwatch createStarted(IgniteTicker ticker)
public static void logTime(IgniteLogger log, String operationName, IgniteThrowableRunner operation) throws IgniteCheckedException
log - Logger fol logging.operationName - Operation name for logging.operation - Operation for execution.IgniteCheckedException - If failed.public boolean isRunning()
public IgniteStopwatch start()
Stopwatch instanceIllegalStateException - if the stopwatch is already running.public IgniteStopwatch stop()
Stopwatch instanceIllegalStateException - if the stopwatch is already stopped.public IgniteStopwatch reset()
Stopwatch instancepublic long elapsed(TimeUnit desiredUnit)
Note: the overhead of measurement can be more than a microsecond, so it is generally
not useful to specify TimeUnit.NANOSECONDS precision here.
It is generally not a good idea to use an ambiguous, unitless long to represent
elapsed time. Therefore, we recommend using elapsed() instead, which returns a
strongly-typed Duration instance.
public Duration elapsed()
Duration. Unlike elapsed(TimeUnit), this method does not lose any precision due to rounding.
Follow @ApacheIgnite
Ignite Database and Caching Platform : ver. 2.9.0 Release Date : October 15 2020