Simple class that create a bar at the top of a SWF file to display Frame Per Second and Memory usage, click on the bar to hide it and type “fps” to get it back.

Version 1.0.1

demo

docs

download source

package com.soundstep.utils {

    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.events.KeyboardEvent;
    import flash.system.System;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.utils.getTimer;

	/**
	 * <b>Author:</b> Romuald Quantin - <a href="http://www.soundstep.com/" target="_blank">www.soundstep.com</a><br />
	 * <b>Class version:</b> 1.0.1<br />
	 * <b>Actionscript version:</b> 3.0<br />
	 * <b>Copyright:</b> Free to use and change (except to include in a framework), an notification email will be welcome for a commercial use (just for information).<br />
	 * <b>Date:</b> 04-2008<br /><br />
	 * <b>Usage:</b> Create a bar at the top of a swf file to display Frame Per Second and Memory usage.
	 * @example
	 * <listing version="3.0">addChild(new FPS());</listing>
	 * <listing version="3.0">addChild(new FPS(0xFF0000, 0xFFFF00, 0x000000, .5, FPS.MEMORY_MEGABYTES, true));</listing>
	 */
	
    public class FPS extends Sprite {
		
		//------------------------------------
		// private, protected properties
		//------------------------------------
		
		private var _barColor:uint;
		private var _bgColor:uint;
		private var _textColor:uint;
		private var _bgAlpha:uint;
        private var _bar:Sprite = new Sprite();
        private var _bg:Sprite = new Sprite();
        private var _text:TextField = new TextField();
        private var _time:Number;
        private var _frameTime:Number;
        private var _prevFrameTime:Number = getTimer();
        private var _secondTime:Number;
        private var _prevSecondTime:Number = getTimer();
        private var _frames:Number = 0;
        private var _fps:String = "...";
        private var _other:String = "";
        private var _memory:String;
        private var _typeMemory:uint;
        private var _arrayKey:Array;
		
		//------------------------------------
		// public properties
		//------------------------------------
		
		public static const MEMORY_BYTES:uint = 1;
		public static const MEMORY_KILOBYTES:uint = 2;
		public static const MEMORY_MEGABYTES:uint = 3;
		
		//------------------------------------
		// constructor
		//------------------------------------
        
		/**
		 * Constructor
		 * @param bgColor background color
		 * @param barColor color of the bar that displays the information
		 * @param textColor text color that displays the information
		 * @param bgAlpha alpha of the background
		 * @param typeMemory type of the memory displayed (bytes, kilobytes, megabytes)
		 */
        public function FPS(bgColor:uint = 0xCCCCCC, barColor:uint = 0xFFFFFF, textColor:uint = 0x333333, bgAlpha:Number = 1, typeMemory:uint = 2, barVisible:Boolean = true) {
			buttonMode = true;
			mouseChildren = false;
			_bgColor = bgColor;
			_barColor = barColor;
			_textColor = textColor;
			_bgAlpha = bgAlpha;
            _typeMemory = typeMemory;
            visible = barVisible;
			addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
			addEventListener(MouseEvent.CLICK, clickHandler, false, 0, true);
        }
		
		//
		// PRIVATE, PROTECTED
		//________________________________________________________________________________________________
		
		private function init(e:Event):void {
			stage.addEventListener(KeyboardEvent.KEY_DOWN, keyHandler, false, 0, true);
			removeEventListener(Event.ADDED_TO_STAGE, init, false);
            _bg.graphics.beginFill(_bgColor, 1);
            _bg.graphics.drawRect(0, 0, stage.stageWidth, 10);
            _bg.graphics.endFill();
            _bg.alpha = _bgAlpha;
            addChild(_bg);
            _bar.graphics.beginFill(_barColor, 1);
            _bar.graphics.drawRect(0, 0, 25, 10);
            _bar.graphics.endFill();
            addChild(_bar);
            _text.autoSize=TextFieldAutoSize.LEFT;
            _text.textColor = _textColor;
            _text.selectable = false;
            addChild(_text);
            scaleX = 2;
            scaleY = 2;
            addEventListener(Event.ENTER_FRAME, onEnterFrame, false, 0, true);
		}
		
		private function clickHandler(e:MouseEvent):void {
			if (e.target == e.currentTarget) {
				e.stopImmediatePropagation();
				visible = false;
			}
		}
		
        private function onEnterFrame(e:Event):void {
            _time = getTimer();
            _frameTime = _time - _prevFrameTime;
            _secondTime = _time - _prevSecondTime;
            if(_secondTime >= 1000){
                _fps = _frames.toString();
                _frames = 0;
                _prevSecondTime = _time;
			}
			else _frames++;
            _prevFrameTime = _time;
            if(_typeMemory == FPS.MEMORY_BYTES){
                _memory = flash.system.System.totalMemory.toPrecision(4);
                _memory = convert(Number(_memory)) + " bytes";
            }
			else if(_typeMemory == FPS.MEMORY_KILOBYTES){
                _memory = (flash.system.System.totalMemory / 1000).toPrecision(4);
                _memory = convert(Number(_memory)) + " kbs";
            }
			else if (_typeMemory ==  FPS.MEMORY_MEGABYTES){
                _memory = (flash.system.System.totalMemory / 1000000).toPrecision(4);
                _memory = convert(Number(_memory)) + " mbs";
            }
            _text.htmlText = "<font face=\"arial\" size=\"5\"> Framerate: "+ _fps +" fps / "+ _frameTime +"ms - Memory: "+ _memory +" - "+ _other.toString() +"</font>";
            _bar.scaleX = _bar.scaleX - ((_bar.scaleX - (_frameTime/10)) / 5);
        }
        
        private function convert(value:Number):Number {
        	return Math.round(value * Math.pow(10, 2)) / Math.pow(10, 2);
        }
        
        private function keyHandler(e:KeyboardEvent):void {
        	if (e.keyCode == 70) {
        		_arrayKey = []
        		_arrayKey.push(e.keyCode);
        	}
        	else if (_arrayKey.length == 1 && e.keyCode == 80) {
        		_arrayKey.push(e.keyCode);
        	}
        	else if (_arrayKey.length == 2 && e.keyCode == 83) {
        		visible = true;
        	}
        }

		// PUBLIC
		//________________________________________________________________________________________________
		
		/**
		 * Add a value to show in the bar
		 * @param value
		 */
        public function add(value:String):void {
            _other = value;
		}
		
		public function get memory():uint {
			return _typeMemory;
		}
		
		public function set memory(typeMemory:uint):void {
			_typeMemory = typeMemory;
		}
	}
}

Share and Enjoy!

    © soundstep.com
    Stay in Touch via Social Networks.