Mega Code Archive

 
Categories / Flash ActionScript / Development
 

Stopwatch

/*  * hexagon framework - Multi-Purpose ActionScript 3 Framework.  * Copyright (C) 2007 Hexagon Star Softworks  *       __    __  *    __/  \__/  \__    __  *   /  \__/HEXAGON \__/  \  *   \__/  \__/ FRAMEWORK_/  *            \__/  \__/  *  * ``The contents of this file are subject to the Mozilla Public License  * Version 1.1 (the "License"); you may not use this file except in  * compliance with the License. You may obtain a copy of the License at  * http://www.mozilla.org/MPL/  *  * Software distributed under the License is distributed on an "AS IS"  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the  * License for the specific language governing rights and limitations  * under the License.  */ package com.hexagonstar.util.debug {   import flash.utils.getTimer;      /**    * Stopwatch stops the time.    *     * Instantiate this class as follows:    *   import com.hexagonstar.util.StopWatch;    *   var stopWatch:StopWatch = new StopWatch();    *     * This will create a still standing stopwatch. You can start    * and stop the stopwatch to record time as you please.    *   stopWatch.start();    *   // Do something    *   stopWatch.stop();    *     * The recored time is available in milliseconds and seconds.    *   trace(stopWatch.getTimeInMilliSeconds() + " ms");    *   trace(stopWatch.getTimeInSeconds() + " s");    *     */   public class StopWatch   {     private var _started:Boolean = false;     private var _startTimeKeys:Array;     private var _stopTimeKeys:Array;     private var _title:String;          /**       * Constructs a new StopWatch instance.      */     public function StopWatch()     {       reset();     }          /**      * Resets the stopwatch total running time.      */     public function reset():void     {       _startTimeKeys = new Array();       _stopTimeKeys = new Array();       _started = false;     }          /**      * Starts the time recording process.      */     public function start(title:String = ""):void     {       if (!hasStarted())       {         _title = title;         _started = true;         _startTimeKeys.push(getTimer());       }     }          /**      * Stops the time recording process if the process has been started before.      */     public function stop():void     {       if (hasStarted())       {         var stopTime:uint = getTimer();         _stopTimeKeys[_startTimeKeys.length - 1] = stopTime;         _started = false;       }     }          /**      * Returns whether this stopwatch has been started.      *       * @return           true if this stopwatch has been started else false.      */     public function hasStarted():Boolean     {       return _started;     }          /**      * Calculates and returns the elapsed time in milliseconds.      * This stopwatch will not be stopped by calling this method. If this stopwatch      * is still running it takes the current time as stoptime for the result.      *       * @return           the elapsed time in milliseconds.      */     public function getTimeInMilliSeconds():int     {       if (hasStarted())       {         _stopTimeKeys[_startTimeKeys.length - 1] = getTimer();       }       var result:int = 0;       for (var i:int = 0; i < _startTimeKeys.length; i++)       {         result += (_stopTimeKeys[i] - _startTimeKeys[i]);       }       return result;         }          /**      * Calculates and returns the elapsed time in seconds.      * This stopwatch will not be stopped by calling this method. If this stopwatch      * is still running it takes the current time as stoptime for the result.      *       * @return           the elapsed time in seconds.      */     public function getTimeInSeconds():Number     {       return getTimeInMilliSeconds() / 1000;     }          /**      * Generates a string representation of this stopwatch that includes all start and      * stop times in milliseconds.      *       * @return           the string representation of this stopwatch.      */     public function toString():String     {       var result:String = "\n ********** [STOPWATCH] **********";       if (_title != "") result += "\n  " + _title;       for(var i:int = 0; i < _startTimeKeys.length; i++)       {         result += "\n  started [" + _startTimeKeys[i]           + "ms] stopped [" + _stopTimeKeys[i] + "ms]";       }       if (i == 0) result += "\n  never started.";       else result += "\n  total runnning time: " + getTimeInMilliSeconds() + "ms";       result += "\n *********************************";       return result;     }   } }