| // Copyright (c) 2016, 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. | 
 |  | 
 | library fasta.ticker; | 
 |  | 
 | class Ticker { | 
 |   final Stopwatch sw = new Stopwatch()..start(); | 
 |  | 
 |   bool isVerbose; | 
 |  | 
 |   late Duration previousTick; | 
 |  | 
 |   Ticker({this.isVerbose = true}) { | 
 |     previousTick = sw.elapsed; | 
 |   } | 
 |  | 
 |   void logMs(Object message) { | 
 |     log((Duration elapsed, Duration sinceStart) { | 
 |       print("$sinceStart: $message in ${elapsed.inMilliseconds}ms."); | 
 |     }); | 
 |   } | 
 |  | 
 |   void log(void f(Duration elapsed, Duration sinceStart)) { | 
 |     Duration elapsed = sw.elapsed; | 
 |     try { | 
 |       if (isVerbose) f(elapsed - previousTick, elapsed); | 
 |     } finally { | 
 |       previousTick = sw.elapsed; | 
 |     } | 
 |   } | 
 |  | 
 |   void reset() { | 
 |     sw.reset(); | 
 |     previousTick = sw.elapsed; | 
 |   } | 
 | } |