Index: observatory_pub_packages/analyzer/src/generated/utilities_general.dart |
=================================================================== |
--- observatory_pub_packages/analyzer/src/generated/utilities_general.dart (revision 0) |
+++ observatory_pub_packages/analyzer/src/generated/utilities_general.dart (working copy) |
@@ -0,0 +1,69 @@ |
+// 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 final int NANOS_PER_MILLI = 1000 * 1000; |
+ static final int NANOS_PER_MICRO = 1000; |
+ 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; |
+ int _startMicros; |
+ 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 |
+ _startMicros = _counter._sw.elapsedMicroseconds; |
+ _counter._sw.start(); |
+ } |
+ |
+ /** |
+ * Stops counting time and updates counter. |
+ */ |
+ int stop() { |
+ _counter._sw.stop(); |
+ int elapsed = (_counter._sw.elapsedMicroseconds - _startMicros) * |
+ TimeCounter.NANOS_PER_MICRO; |
+ // restore previous counter and resume it |
+ TimeCounter._current = _prev; |
+ if (_prev != null) { |
+ _prev._sw.start(); |
+ } |
+ // done |
+ return elapsed; |
+ } |
+} |