|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2007
Сообщений: 30
|
Неплохой вариант у Inils в блоге - http://www.flasher.ru/forum/blog.php?b=35&page=2 показывает в какой момент времени был вызван trace. Хотя я сам еще не смог его оценить ( и соответственно свою проблему из первого поста еще не решил), так как под последней FD он еще не заточен.
|
|
|||||
За не имением лучше(я пока не нашел), могу предложить следующий способ. Есть класс:
package { /** * ... * @author Denis 'Jack' Vinogradsky */ public class PerfomencTestSystem { private static var _tests:Object = new Object(); public function PerfomencTestSystem() { } private static function getTest(name:String):PerfomencTestUnit { var o:Object = _tests[name]; if (o) return o as PerfomencTestUnit; var ret:PerfomencTestUnit = new PerfomencTestUnit(name); _tests[name] = ret; return ret; } public static function testLoop(name:String, loopCount:int, f:Function):void { startTest(name); for (var i:int = 0; i < loopCount; i++) f(); stopTest(name); } public static function startTest(name:String):void { getTest(name).start(); } public static function stopTest(name:String):void { getTest(name).stop(); } public static function traceResult():void { trace(getResult()); } public static function getResult():String { var s:String = ""; s+="name\ttime\tcount\taverage time\n" var arr:Array = new Array(); var p:PerfomencTestUnit; for each(p in _tests) arr.push(p); arr.sortOn("time", Array.NUMERIC); for each(p in arr) { s+=p.toString()+"\n" } return s; } } } import flash.utils.getTimer; class PerfomencTestUnit extends Object { public function PerfomencTestUnit(name:String) { this.name = name; } public var name:String; public var count:int = 0; public var time:int = 0; private var startTime:int = 0; public function show():void { trace(toString()); } public function toString():String { return (name+"\t" +time +"\t"+ count+"\t"+time/count); } public function start():void { count++; startTime=getTimer(); } public function stop():void { time += getTimer() - startTime; } } public function update():void { //Сообщаем что запустилась функиця update PerfomencTestSystem.startTest("update"); //Сообщаем что запустилась функиця updateRpg PerfomencTestSystem.startTest("updateRpg"); updateRpg(); //Сообщаем что заверщилось выполнение функици updateRpg PerfomencTestSystem.stopTest("updateRpg"); PerfomencTestSystem.startTest("updatePhisics"); updatePhisics(); PerfomencTestSystem.stopTest("updatePhisics"); PerfomencTestSystem.startTest("draw"); draw(); PerfomencTestSystem.stopTest("draw"); //Сообщаем что заверщилось выполнение функици update PerfomencTestSystem.stopTest("update"); } В консоль выведется сколько раз и сколько времени выполнялся кусок кода обернутый в "именованный блок", в PerfomencTestSystem.startTest, PerfomencTestSystem.stopTest. Нормальные profiler-ы на c# и c++ делают это автоматически, как бы оборачивая все функции приложения. Для AS3 я пока этого не нашел... Вот, пользуюсь своим классом. Не так удобно, но лучше чем ничего... Добавлено через 12 минут Пример результата: name time count average time updatePhisics 192 100 1.92 updateRpg 3809 100 38.09 draw 401 100 4.01 update 4404 100 44.04 Т.е. функция update выполнялась в течении 4404 миллисекунд, 100 раз. В среднем по 44 миллисекунды длился 1 вызов. Дольше всего внутри работала функция updateRpg... теперь можно пойти внутрь, и там чего нибудь обернуть. Как то так... P.S. Пример синтетический, а не реальный, если что Внутри функций просто работал trace в цикле, что бы создать "тормозов"...
__________________
Искренне Ваш, Джек. Последний раз редактировалось JackFromChaos; 12.01.2011 в 19:24. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Боже, что с английским?
|
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Скорее позорно
|
|
|||||
Профайлер в Flex/Flash Builder делает тоже самое без насилования кода. Обратите также внимание на пакет flash.sampler
|
|
|||||
Ну, это я переживу... То что английский я скорее не знаю, чем знаю, для меня не секрет...
Добавлено через 1 минуту Цитата:
Про flash.sampler слышу впервые, надо почитать...
__________________
Искренне Ваш, Джек. Последний раз редактировалось JackFromChaos; 12.01.2011 в 19:33. |
|
|||||
Et cetera
Регистрация: Sep 2002
Сообщений: 30,784
|
Димка, а ты Performance test в профайлере билдера не запускал ни разу что ли?
|
|
|||||
Регистрация: Feb 2007
Сообщений: 30
|
Перформанс тест это как раз то что надо.
Тем кто не знает как это, разобраться очень легко. Я скажем так "нашел" русский adobe flash builder 4 , и в нем кликнув на меню "справка" , был очень удивлен, увидев там отличное описание "как пользоваться профайлером, тестом производительности" на русском языке) |
Часовой пояс GMT +4, время: 17:24. |
|
« Предыдущая тема | Следующая тема » |
|
|