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 }