Dart API Referencedart:coreStopwatch

Stopwatch class

A simple Stopwatch interface to measure elapsed time.

class Stopwatch {
 // The _start and _stop fields capture the time when [start] and [stop]
 // are called respectively.
 // If _start is null, then the [Stopwatch] has not been started yet.
 // If _stop is null, then the [Stopwatch] has not been stopped yet,
 // or is running.
 int _start;
 int _stop;

 /**
  * Creates a [Stopwatch] in stopped state with a zero elapsed count.
  *
  * The following example shows how to start a [Stopwatch]
  * immediately after allocation.
  *
  *     Stopwatch stopwatch = new Stopwatch()..start();
  */
 Stopwatch() : _start = null, _stop = null {}

 /**
  * Starts the [Stopwatch].
  *
  * The [elapsed] count is increasing monotonically. If the [Stopwatch] has
  * been stopped, then calling start again restarts it without resetting the
  * [elapsed] count.
  *
  * If the [Stopwatch] is currently running, then calling start does nothing.
  */
 void start() {
   if (isRunning) return;
   if (_start == null) {
     // This stopwatch has never been started.
     _start = _now();
   } else {
     // Restart this stopwatch. Prepend the elapsed time to the current
     // start time.
     _start = _now() - (_stop - _start);
     _stop = null;
   }
 }

 /**
  * Stops the [Stopwatch].
  *
  * The [elapsedTicks] count stops increasing after this call. If the
  * [Stopwatch] is currently not running, then calling this method has no
  * effect.
  */
 void stop() {
   if (!isRunning) return;
   _stop = _now();
 }

 /**
  * Resets the [elapsed] count to zero.
  *
  * This method does not stop or start the [Stopwatch].
  */
 void reset() {
   if (_start == null) return;
   // If [_start] is not null, then the stopwatch had already been started. It
   // may running right now.
   _start = _now();
   if (_stop != null) {
     // The watch is not running. So simply set the [_stop] to [_start] thus
     // having an elapsed time of 0.
     _stop = _start;
   }
 }

 /**
  * Returns the elapsed number of clock ticks since calling [start] while the
  * [Stopwatch] is running.
  *
  * Returns the elapsed number of clock ticks between calling [start] and
  * calling [stop].
  *
  * Returns 0 if the [Stopwatch] has never been started.
  *
  * The elapsed number of clock ticks increases by [frequency] every second.
  */
 int get elapsedTicks {
   if (_start == null) {
     return 0;
   }
   return (_stop == null) ? (_now() - _start) : (_stop - _start);
 }

 /**
  * Returns the [elapsedTicks] counter converted to a [Duration].
  */
 Duration get elapsed {
   return new Duration(microseconds: elapsedMicroseconds);
 }

 /**
  * Returns the [elapsedTicks] counter converted to microseconds.
  */
 int get elapsedMicroseconds {
   return (elapsedTicks * 1000000) ~/ frequency;
 }

 /**
  * Returns the [elapsedTicks] counter converted to milliseconds.
  */
 int get elapsedMilliseconds {
   return (elapsedTicks * 1000) ~/ frequency;
 }

 /**
  * Returns the frequency of the elapsed counter in Hz.
  */
 int get frequency => _frequency();

 /**
  * Returns wether the [StopWatch] is currently running.
  */
 bool get isRunning => _start != null && _stop == null;

 external static int _frequency();
 external static int _now();
}

Constructors

new Stopwatch() #

Creates a Stopwatch in stopped state with a zero elapsed count.

The following example shows how to start a Stopwatch immediately after allocation.

Stopwatch stopwatch = new Stopwatch()..start();
Stopwatch() : _start = null, _stop = null {}

Properties

final Duration elapsed #

Returns the elapsedTicks counter converted to a Duration.

Duration get elapsed {
 return new Duration(microseconds: elapsedMicroseconds);
}

final int elapsedMicroseconds #

Returns the elapsedTicks counter converted to microseconds.

int get elapsedMicroseconds {
 return (elapsedTicks * 1000000) ~/ frequency;
}

final int elapsedMilliseconds #

Returns the elapsedTicks counter converted to milliseconds.

int get elapsedMilliseconds {
 return (elapsedTicks * 1000) ~/ frequency;
}

final int elapsedTicks #

Returns the elapsed number of clock ticks since calling start while the Stopwatch is running.

Returns the elapsed number of clock ticks between calling start and calling stop.

Returns 0 if the Stopwatch has never been started.

The elapsed number of clock ticks increases by frequency every second.

int get elapsedTicks {
 if (_start == null) {
   return 0;
 }
 return (_stop == null) ? (_now() - _start) : (_stop - _start);
}

final int frequency #

Returns the frequency of the elapsed counter in Hz.

int get frequency => _frequency();

final bool isRunning #

Returns wether the StopWatch is currently running.

bool get isRunning => _start != null && _stop == null;

Methods

void reset() #

Resets the elapsed count to zero.

This method does not stop or start the Stopwatch.

void reset() {
 if (_start == null) return;
 // If [_start] is not null, then the stopwatch had already been started. It
 // may running right now.
 _start = _now();
 if (_stop != null) {
   // The watch is not running. So simply set the [_stop] to [_start] thus
   // having an elapsed time of 0.
   _stop = _start;
 }
}

void start() #

Starts the Stopwatch.

The elapsed count is increasing monotonically. If the Stopwatch has been stopped, then calling start again restarts it without resetting the elapsed count.

If the Stopwatch is currently running, then calling start does nothing.

void start() {
 if (isRunning) return;
 if (_start == null) {
   // This stopwatch has never been started.
   _start = _now();
 } else {
   // Restart this stopwatch. Prepend the elapsed time to the current
   // start time.
   _start = _now() - (_stop - _start);
   _stop = null;
 }
}

void stop() #

Stops the Stopwatch.

The elapsedTicks count stops increasing after this call. If the Stopwatch is currently not running, then calling this method has no effect.

void stop() {
 if (!isRunning) return;
 _stop = _now();
}