Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 12.01.2011, 00:19
dimarik вне форума Посмотреть профиль Отправить личное сообщение для dimarik Найти все сообщения от dimarik
  № 11  
Ответить с цитированием
dimarik
.
 
Аватар для dimarik

модератор форума
Регистрация: Sep 2003
Адрес: Москва
Сообщений: 4,630
Записей в блоге: 20
А какой профайлер считает время исполнения процедур?
__________________
Воспитан в TimeZero. Работаю в Mail.ru.

Старый 12.01.2011, 15:35
formid вне форума Посмотреть профиль Отправить личное сообщение для formid Найти все сообщения от formid
  № 12  
Ответить с цитированием
formid

Регистрация: Feb 2007
Сообщений: 30
Неплохой вариант у Inils в блоге - http://www.flasher.ru/forum/blog.php?b=35&page=2 показывает в какой момент времени был вызван trace. Хотя я сам еще не смог его оценить ( и соответственно свою проблему из первого поста еще не решил), так как под последней FD он еще не заточен.

Старый 12.01.2011, 19:08
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 13  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
За не имением лучше(я пока не нашел), могу предложить следующий способ. Есть класс:
Код AS3:
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;
	}
 
}
Пример использования. Например у нас есть толстая функция update игровой логики. Мы знаем, что она тормозит, но не знаем, что именно в ней тормозит. Делаем следующее
Код AS3:
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");
 
}
Затем где нибудь запускаем функцию, например по горячей клавише:
Код AS3:
PerfomencTestSystem.traceResult();
В консоль выведется сколько раз и сколько времени выполнялся кусок кода обернутый в "именованный блок", в 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.
Старый 12.01.2011, 19:23
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 14  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Боже, что с английским?

Старый 12.01.2011, 19:25
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 15  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от etc Посмотреть сообщение
Боже, что с английским?
Это принципиально?
__________________
Искренне Ваш, Джек.

Старый 12.01.2011, 19:28
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 16  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Скорее позорно

Старый 12.01.2011, 19:31
alatar вне форума Посмотреть профиль Отправить личное сообщение для alatar Найти все сообщения от alatar
  № 17  
Ответить с цитированием
alatar
 
Аватар для alatar

блогер
Регистрация: Dec 2008
Адрес: Israel, Natanya
Сообщений: 4,740
Записей в блоге: 11
Профайлер в Flex/Flash Builder делает тоже самое без насилования кода. Обратите также внимание на пакет flash.sampler

Старый 12.01.2011, 19:31
JackFromChaos вне форума Посмотреть профиль Отправить личное сообщение для JackFromChaos Найти все сообщения от JackFromChaos
  № 18  
Ответить с цитированием
JackFromChaos
 
Аватар для JackFromChaos

блогер
Регистрация: Jan 2008
Адрес: Донецк
Сообщений: 162
Записей в блоге: 2
Отправить сообщение для JackFromChaos с помощью Skype™
Цитата:
Сообщение от etc Посмотреть сообщение
Скорее позорно
Ну, это я переживу... То что английский я скорее не знаю, чем знаю, для меня не секрет...

Добавлено через 1 минуту
Цитата:
Сообщение от alatar Посмотреть сообщение
Профайлер в Flex/Flash Builder делает тоже самое без насилования кода. Обратите также внимание на пакет flash.sampler
Аха, спасиба... Я собирался, но руки не дошли... Раз так, обязательно посмотрю.(я про Flash Builder)
Про flash.sampler слышу впервые, надо почитать...
__________________
Искренне Ваш, Джек.


Последний раз редактировалось JackFromChaos; 12.01.2011 в 19:33.
Старый 12.01.2011, 19:35
etc вне форума Посмотреть профиль Найти все сообщения от etc
  № 19  
Ответить с цитированием
etc
Et cetera
 
Аватар для etc

Регистрация: Sep 2002
Сообщений: 30,784
Цитата:
Сообщение от dimarik Посмотреть сообщение
А какой профайлер считает время исполнения процедур?
Димка, а ты Performance test в профайлере билдера не запускал ни разу что ли?

Старый 14.01.2011, 15:10
formid вне форума Посмотреть профиль Отправить личное сообщение для formid Найти все сообщения от formid
  № 20  
Ответить с цитированием
formid

Регистрация: Feb 2007
Сообщений: 30
Перформанс тест это как раз то что надо.
Тем кто не знает как это, разобраться очень легко. Я скажем так "нашел" русский adobe flash builder 4 , и в нем кликнув на меню "справка" , был очень удивлен, увидев там отличное описание "как пользоваться профайлером, тестом производительности" на русском языке)

Создать новую тему Ответ Часовой пояс GMT +4, время: 02:33.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 02:33.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.