// Copyright (c) 2014, the Dart project authors. Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

/**
 * A `CountedStopwatch` is a [Stopwatch] that counts the number of times the
 * stop method has been invoked.
 */
class CountedStopwatch extends Stopwatch {
  /**
   * The number of times the [stop] method has been invoked.
   */
  int stopCount = 0;

  /**
   * Initialize a newly created stopwatch.
   */
  CountedStopwatch();

  /**
   * The average number of millisecond that were recorded each time the [start]
   * and [stop] methods were invoked.
   */
  int get averageMilliseconds => elapsedMilliseconds ~/ stopCount;

  @override
  void reset() {
    super.reset();
    stopCount = 0;
  }

  @override
  void stop() {
    super.stop();
    stopCount++;
  }
}
