Skip to content

Instantly share code, notes, and snippets.

@fenixkim
Created September 19, 2012 15:56
Show Gist options
  • Save fenixkim/3750454 to your computer and use it in GitHub Desktop.
Save fenixkim/3750454 to your computer and use it in GitHub Desktop.
HI-Res-Stats AS3 class from Mr.doob
/**
* stats.as
* https://github.com/mrdoob/Hi-ReS-Stats
*
* Released under MIT license:
* http://www.opensource.org/licenses/mit-license.php
*
* How to use:
*
* addChild( new Stats() );
*
**/
package net.hires.debug {
import flash.display.BitmapData;
import flash.display.Sprite;
import flash.events.Event;
import flash.events.MouseEvent;
import flash.geom.Matrix;
import flash.geom.Rectangle;
import flash.system.System;
import flash.text.StyleSheet;
import flash.text.TextField;
import flash.utils.getTimer;
public class Stats extends Sprite {
protected const WIDTH : uint = 70;
protected const HEIGHT : uint = 100;
protected var xml : XML;
protected var text : TextField;
protected var style : StyleSheet;
protected var timer : uint;
protected var fps : uint;
protected var ms : uint;
protected var ms_prev : uint;
protected var mem : Number;
protected var mem_max : Number;
protected var graph : BitmapData;
protected var rectangle : Rectangle;
protected var fps_graph : uint;
protected var mem_graph : uint;
protected var mem_max_graph : uint;
protected var colors : Colors = new Colors();
/**
* <b>Stats</b> FPS, MS and MEM, all in one.
*/
public function Stats() : void {
mem_max = 0;
xml = <xml><fps>FPS:</fps><ms>MS:</ms><mem>MEM:</mem><memMax>MAX:</memMax></xml>;
style = new StyleSheet();
style.setStyle('xml', {fontSize:'9px', fontFamily:'_sans', leading:'-2px'});
style.setStyle('fps', {color: hex2css(colors.fps)});
style.setStyle('ms', {color: hex2css(colors.ms)});
style.setStyle('mem', {color: hex2css(colors.mem)});
style.setStyle('memMax', {color: hex2css(colors.memmax)});
text = new TextField();
text.width = WIDTH;
text.height = 50;
text.styleSheet = style;
text.condenseWhite = true;
text.selectable = false;
text.mouseEnabled = false;
rectangle = new Rectangle(WIDTH - 1, 0, 1, HEIGHT - 50);
addEventListener(Event.ADDED_TO_STAGE, init, false, 0, true);
addEventListener(Event.REMOVED_FROM_STAGE, destroy, false, 0, true);
}
private function init(e : Event) : void {
graphics.beginFill(colors.bg);
graphics.drawRect(0, 0, WIDTH, HEIGHT);
graphics.endFill();
addChild(text);
graph = new BitmapData(WIDTH, HEIGHT - 50, false, colors.bg);
graphics.beginBitmapFill(graph, new Matrix(1, 0, 0, 1, 0, 50));
graphics.drawRect(0, 50, WIDTH, HEIGHT - 50);
addEventListener(MouseEvent.CLICK, onClick);
addEventListener(Event.ENTER_FRAME, update);
}
private function destroy(e : Event) : void {
graphics.clear();
while(numChildren > 0)
removeChildAt(0);
graph.dispose();
removeEventListener(MouseEvent.CLICK, onClick);
removeEventListener(Event.ENTER_FRAME, update);
}
private function update(e : Event) : void {
timer = getTimer();
if( timer - 1000 > ms_prev ) {
ms_prev = timer;
mem = Number((System.totalMemory * 0.000000954).toFixed(3));
mem_max = mem_max > mem ? mem_max : mem;
fps_graph = Math.min(graph.height, ( fps / stage.frameRate ) * graph.height);
mem_graph = Math.min(graph.height, Math.sqrt(Math.sqrt(mem * 5000))) - 2;
mem_max_graph = Math.min(graph.height, Math.sqrt(Math.sqrt(mem_max * 5000))) - 2;
graph.scroll(-1, 0);
graph.fillRect(rectangle, colors.bg);
graph.setPixel(graph.width - 1, graph.height - fps_graph, colors.fps);
graph.setPixel(graph.width - 1, graph.height - ( ( timer - ms ) >> 1 ), colors.ms);
graph.setPixel(graph.width - 1, graph.height - mem_graph, colors.mem);
graph.setPixel(graph.width - 1, graph.height - mem_max_graph, colors.memmax);
xml.fps = "FPS: " + fps + " / " + stage.frameRate;
xml.mem = "MEM: " + mem;
xml.memMax = "MAX: " + mem_max;
fps = 0;
}
fps++;
xml.ms = "MS: " + (timer - ms);
ms = timer;
text.htmlText = xml;
}
private function onClick(e : MouseEvent) : void {
mouseY / height > .5 ? stage.frameRate-- : stage.frameRate++;
xml.fps = "FPS: " + fps + " / " + stage.frameRate;
text.htmlText = xml;
}
// .. Utils
private function hex2css( color : int ) : String {
return "#" + color.toString(16);
}
}
}
class Colors {
public var bg : uint = 0x000033;
public var fps : uint = 0xffff00;
public var ms : uint = 0x00ff00;
public var mem : uint = 0x00ffff;
public var memmax : uint = 0xff0070;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment