// 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.

// This code was auto-generated, is not intended to be edited, and is subject to
// significant change. Please see the README file for more information.

library engine.utilities.general;

/**
 * Helper for measuring how much time is spent doing some operation.
 */
class TimeCounter {
  Stopwatch _sw = new Stopwatch();

  /**
   * @return the number of milliseconds spent between [start] and [stop].
   */
  int get result => _sw.elapsedMilliseconds;

  /**
   * Starts counting time.
   *
   * @return the [TimeCounterHandle] that should be used to stop counting.
   */
  TimeCounter_TimeCounterHandle start() => new TimeCounter_TimeCounterHandle(this);
}

/**
 * The handle object that should be used to stop and update counter.
 */
class TimeCounter_TimeCounterHandle {
  final TimeCounter _counter;

  TimeCounter_TimeCounterHandle(this._counter) {
    _counter._sw.start();
  }

  /**
   * Stops counting time and updates counter.
   */
  void stop() {
    _counter._sw.stop();
  }
}
// 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.

// This code was auto-generated, is not intended to be edited, and is subject to
// significant change. Please see the README file for more information.

library engine.utilities.general;

/**
 * Helper for measuring how much time is spent doing some operation.
 */
class TimeCounter {
  static TimeCounter _current = null;
  final Stopwatch _sw = new Stopwatch();

  /**
   * @return the number of milliseconds spent between [start] and [stop].
   */
  int get result => _sw.elapsedMilliseconds;

  /**
   * Starts counting time.
   *
   * @return the [TimeCounterHandle] that should be used to stop counting.
   */
  TimeCounter_TimeCounterHandle start() {
    return new TimeCounter_TimeCounterHandle(this);
  }
}

/**
 * The handle object that should be used to stop and update counter.
 */
class TimeCounter_TimeCounterHandle {
  final TimeCounter _counter;
  TimeCounter _prev;

  TimeCounter_TimeCounterHandle(this._counter) {
    // if there is some counter running, pause it
    _prev = TimeCounter._current;
    if (_prev != null) {
      _prev._sw.stop();
    }
    TimeCounter._current = _counter;
    // start this counter
    _counter._sw.start();
  }

  /**
   * Stops counting time and updates counter.
   */
  void stop() {
    _counter._sw.stop();
    // restore previous counter and resume it
    TimeCounter._current = _prev;
    if (_prev != null) {
      _prev._sw.start();
    }
  }
}

Correct or pause previous TimeCounters.
Correct or pause previous TimeCounters.

R=brianwilkerson@google.com, jwren@google.com
BUG=

Review URL: https://codereview.chromium.org//225183020

git-svn-id: c93d8a2297af3b929165606efe145742a534bc71@34809 260f80e4-7a28-3924-810f-c04153c831b5
