Forked from: zahir's 速度測定テンプレート2 diff:79 Math.PI zahir forked:1favorite:1lines:165license : MIT License modified : 2011-08-31 02:12:33 Embed Tweet // forked from zahir's 速度測定テンプレート2 package { import flash.display.Sprite; import flash.events.Event; import flash.events.MouseEvent; import flash.text.TextField; import flash.utils.getTimer; [SWF(width="465",height="465")] public class Instrumentation extends Sprite { private var event:Event; private var runsLen:int = 10; private var runCount:int = 0; private var t:TextField; private var recodes:Array; private const LOOP:int = 1e7; private function exec(first:Boolean = false):void { var i:int = 0; var time1:int; var time2:int; var count:int = 0; if(first) recodes = []; // ここから処理 // ここまで処理 /* TEMPLETE time1 = getTimer(); for(i=0;i<LOOP;i++) { } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "", time2, "" ); else (recodes[count++] as RecodeData).time = time2; //*/ var rad:Number = 0; var pi:Number = Math.PI; const PI:Number = Math.PI; const n:Number = PI / 180; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = i * Math.PI / 180; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "Math.PI/180", time2, "" ); else (recodes[count++] as RecodeData).time = time2; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = i * pi / 180; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "pi/180", time2, "" ); else (recodes[count++] as RecodeData).time = time2; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = i * PI / 180; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "PI/180", time2, "" ); else (recodes[count++] as RecodeData).time = time2; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = i * 0.01745; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "0.01745", time2, "" + pi / 180 ); else (recodes[count++] as RecodeData).time = time2; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = i * n; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "const = PI/180", time2, "" ); else (recodes[count++] as RecodeData).time = time2; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = Math.PI; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "Math.PI 代入だけ", time2, "" ); else (recodes[count++] as RecodeData).time = time2; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = pi; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "pi 代入だけ", time2, "" ); else (recodes[count++] as RecodeData).time = time2; time1 = getTimer(); for(i=0;i<LOOP;i++) { rad = PI; } time2 = getTimer() - time1; if(first) recodes[count++] = new RecodeData( "PI 代入だけ", time2, "" ); else (recodes[count++] as RecodeData).time = time2; runCount++; var _loop:String = LOOP.toString().replace( /([0-9]+?)(?=(?:[0-9]{3})+$)/g , "$1," ); t.text = "各 " + _loop + " 回ループ を " + runCount + " 回実行しました。\n\n"; if( recodes.length ) listUp(); t.appendText("clickで再計算"); if(event){ runsLen--; trace(runsLen); if(runsLen <= 0) return; dispatchEvent( event ); } } public function Instrumentation() { addChild( (t = new TextField() ) ).width = t.height = 465; addEventListener( MouseEvent.CLICK, onClick); /* ある程度回数を回したいとき用 addEventListener("ex", onRun); event = new Event("ex"); //*/ exec(true); } private function onClick( e:MouseEvent ):void { exec(); } private function onRun(e:Event):void { exec(); } private function listUp():void { var str:String = ""; var recode:Array = copy(); recode.sortOn( "time", Array.NUMERIC ); var max:int = (recode[ recode.length - 1 ] as RecodeData).time; for( var i:int = 0, len:int = recode.length; i<len; i++) { var data:RecodeData = recode[i] as RecodeData; var n:int = max / data.time * 100; str += data.title + " :: " + data.time + " ms\n\t\t最低速に比べて約 " + n + " %高速 \n"; if(data.message == "") str += "\n"; else str += "\t\t" + data.message + "\n\n"; } t.appendText( str ); } private function copy():Array { var arr:Array = []; for(var i:int = 0, len:int = recodes.length; i<len; i++){ arr[i] = recodes[i]; } return arr; } } } class RecodeData { private var count:int = 0; public var title:String = ""; private var _time:uint; public var message:String = ""; public function RecodeData( title:String, time:int, message:String = "" ) { this.title = title; this.time = time; this.message = message; } public function get time():int { return _time / count; } public function set time( value:int ):void { _time += value; count++; } } Code Fullscreen Preview Fullscreen takishiki exec copy appendText dispatchEvent replace sortOn Array.NUMERIC message Math.max time height width toString Math.PI addEventListener String MouseEvent.CLICK length TextField trace sort new page view favorite forked pv170 Math.ceil 9balls forked:0 favorite:1lines:142 (diff:43) tag: 最適化