1  
     8   
     9  import com.sekati.core.CoreObject;
    10  import com.sekati.events.FramePulse;
    11  
    12  
    21  class com.sekati.time.FPS extends CoreObject {
    22  
    23  	private var _this:FPS;
    24  	private var _frame:Number;
    25  	private var _currentFps:Number;
    26  	private var _currentTrend:String;
    27  	private var _averageFps:Number;
    28  	private var _averageTrend:String;
    29  	private var _now:Number;
    30  	private var _updateEachFrame:Number;
    31  	private var _cb:Function;
    32  
    33  	
    38  	public function FPS(cb:Function, updateEachFrame:Number) {
    39  		super( );
    40  		_this = this;
    41  		_frame = 1;
    42  		_cb = cb;
    43  		_updateEachFrame = (updateEachFrame != null) ? updateEachFrame : 1;
    44  		_now = getTimer( );
    45  		FramePulse.getInstance( ).addFrameListener( _this );		
    46  	}
    47  
    48  	
    51  	 
    52  	private function _onEnterFrame():Void {
    53  		var cur:Number = Math.round( 1000 / (getTimer( ) - _now) );
    54  		_currentTrend = (cur >= _currentFps) ? "+" : "-";
    55  		_currentFps = cur;
    56  		_now = getTimer( );
    57  		var avg:Number = Math.round( (_frame / (_now / 1000)) );
    58  		_averageTrend = (avg >= _averageFps) ? "+" : "-";	
    59  		_averageFps = avg;
    60  		
    61  		if(_frame % _updateEachFrame == 0) {
    62  			_cb( _currentFps, _averageFps, _currentTrend, _averageTrend );
    63  		}
    64  		_frame++;
    65  	}
    66  
    67  	
    71  	public function destroy():Void {
    72  		FramePulse.$.removeFrameListener( _this );
    73  		delete _this;
    74  		super.destroy( );
    75  	}	
    76  }