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

Вернуться   Форум Flasher.ru > Архив Flasher.ru > Flash > ActionScript

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему  
Старый 11.02.2003, 18:44
ilya_cat вне форума Посмотреть профиль Отправить личное сообщение для ilya_cat Посетить домашнюю страницу ilya_cat Найти все сообщения от ilya_cat
  № 1  
ilya_cat
 
Аватар для ilya_cat

Регистрация: Jun 1999
Адрес: Moscow
Сообщений: 136
Cool FlashMX и тайминги

Приветствую всех уважаемых флешеров.
Предлагаю Вам маленькое исследование по вопросу скорости работы flash.
Все указанные ниже цифры относятся к Celeron 433 (соотношение цифр сохраняется и на более скоростных машинах).
Итак...[list=1][*] Создайте пустой ролик с fps равным 100[*] Положите в первый кадр следующий текст:
Код:
var a=new Array();
var x;
maxx=500;
function calc() {
	for (x=0;x<maxx;x++) {
		a[x]=x;
	};
};
time=getTimer();
[*] Во второй и третий кадр положите следующее:
Код:
calc();
[*] В четвертый кадр положите следующее:
Код:
newtime=getTimer();
fps=(_currentframe-2)*Math.round(100000/(newtime-time))/100;
time=newtime;
[*] Создайте еще один слой, положите в него текстовое поле и привяжите к переменной fps - чтобы глядеть результат[*] Запустили.[/list=1]
Полученное условное значение fps у меня примерно равно 18.
А теперь фокус!
Меняем значение maxx на 100 и дублируем третий кадр восемь раз - у нас теперь десять вызовов calc().
Полученное условное значение fps у меня стало приближаться к 80.
И последний шаг - меняем значение maxx на 1000 и удаляем все кадры с вызовами calc(), кроме второго - у нас теперь только один вызов calc().
Полученное условное значение fps у меня стало около 8.
Заметьте - во всех случаях у нас 1000 проходов по массиву, а время обработки различается в десять раз.

Не правда ли, забавная картинка? При равном количестве математики увеличение числа кадров поднимает скорость, причем почти в линейной зависимости.
Для ленивых прилагаю исходные ролики, чтобы могли сразу проверить.
Вложения
Тип файла: zip test.zip (6.8 Кб, 55 просмотров)


Последний раз редактировалось ilya_cat; 11.02.2003 в 18:48.
Старый 11.02.2003, 19:22
Dendroid вне форума Посмотреть профиль Отправить личное сообщение для Dendroid Посетить домашнюю страницу Dendroid Найти все сообщения от Dendroid
  № 2  
Dendroid
 
Аватар для Dendroid

Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
вот гон-то какой.
Ты чего курил?
__________________
Верить никому нельзя. Мне - можно. :)

Старый 11.02.2003, 19:44
Dendroid вне форума Посмотреть профиль Отправить личное сообщение для Dendroid Посетить домашнюю страницу Dendroid Найти все сообщения от Dendroid
  № 3  
Dendroid
 
Аватар для Dendroid

Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
Код:
fps=(_currentframe-2)*Math.round(100000/(newtime-time))/100;

Тебе в AMD надо работать будешь для них тесты придумывать, чтобы они Intel и дальше обгоняли

Начинающим упражнение: что надо исправить, чтобы получить правильные результаты: где-то выигрыш процентов 70% при использовании одного вызова вместо десятка разных....
__________________
Верить никому нельзя. Мне - можно. :)

Старый 12.02.2003, 04:03
ilya_cat вне форума Посмотреть профиль Отправить личное сообщение для ilya_cat Посетить домашнюю страницу ilya_cat Найти все сообщения от ilya_cat
  № 4  
ilya_cat
 
Аватар для ilya_cat

Регистрация: Jun 1999
Адрес: Moscow
Сообщений: 136
По умолчанию Вы, многоуважаемый Dendroid, поучите программирование.

[list=1][*]Я ничего не курю и не пью алкоголь.[*]Мне нужно было дробное значение fps c точностью до сотых[*]Хотя бы скачайте тестовые примеры и запустите, вместо того, чтобы молоть языком - проверено на десятке компьютеров с разными процессорами - соотношение fps для роликов не меняется.[*]Мой стаж программирования - с 1988 года (могу и прописью - Одна тысяча Девятьсот Восемьдесят Восемь), а с флешем я работаю с 1998 года, когда была еще третья версия. Так что прежде чем вынести эту тему на обсуждение, я досконально все проверил и отвечаю за свои слова.[/list=1]
P.S. Советую с уважением относиться к другим участникам этого форума, иначе они, как и я, все реже будут сюда заглядывать, оставив новичков прозябать в болоте непонятностей.

Старый 12.02.2003, 09:01
Uliana вне форума Посмотреть профиль Отправить личное сообщение для Uliana Найти все сообщения от Uliana
  № 5  
Uliana
 
Аватар для Uliana

Регистрация: Apr 2002
Адрес: Russia, Ural
Сообщений: 56
Отправить сообщение для Uliana с помощью ICQ
Уважаемый ilya_cat, действительно это очень интересный факт!
я давно заметила какие-то непонятки в fps, но протестировать как-то не приходило в голову....
спасибо вам за приведенный тест, на самом деле он очень нагляден и объясняет некоторые вещи...
у меня к вам есть небольшой вопрос, может быть вы сталкивались с такой проблемой: при прокуртке ролика в реальных размерах (т. е. если у него размеры например 550х400 и его прокурчивают в этих же размерах, не увеличивая) торможения в движении объектов не наблюдается, а если развернуть ролик во весь экран, то наблюдается движение объектов рывками. Это происходит на абсолютно разных по мощности машинах одинаково, что на PIV c 2,2 ГГц, то же и на Celeron 500.
Что это? Это особенности флеша или это у меня что-то не правильно сделано?
Причем такое происходит не с одним роликом, а совсеми, где есть движение...
Если знаете, подскажите, пожалуйста...
заранее благодарю...

Старый 12.02.2003, 12:49
ilya_cat вне форума Посмотреть профиль Отправить личное сообщение для ilya_cat Посетить домашнюю страницу ilya_cat Найти все сообщения от ilya_cat
  № 6  
ilya_cat
 
Аватар для ilya_cat

Регистрация: Jun 1999
Адрес: Moscow
Сообщений: 136
По умолчанию Ульяне...

Милая Ульяна.

Ваш вопрос пока для меня загадка - но могу предположить, что флеш выделяет на каждый кадр определенное количество операций, а превышение этого числа затормаживает все процессы.
Масштабирование, видимо, тоже использует часть этого количества - и при большом числе объектов на сцене плеер начинает двигать изображение рывками.

Но это только мои предположения - детально данный вопрос я не рассматривал.

Еще хочу заметить, что в редакторе флеша скорость работы ролика примерно на 25% ниже, чем при запуске его со страницы или standalone плеером - скорее всего из-за встроенного в редактор механизма отладки. Впрочем, этот факт, думаю, широко известен.

Старый 12.02.2003, 19:32
C2Plus вне форума Посмотреть профиль Отправить личное сообщение для C2Plus Посетить домашнюю страницу C2Plus Найти все сообщения от C2Plus
  № 7  
C2Plus
  акула
 
Аватар для C2Plus

Регистрация: Mar 1999
Адрес: не проживает.
Сообщений: 2,077
Отправить сообщение для C2Plus с помощью ICQ
Цитата:
newtime=getTimer();
fps=(_currentframe-2)*Math.round(100000/(newtime-time))/100;
time=newtime;
вообще говоря, с таким фпс метром можно получить еще более интересные результаты. Почему минус 2?

fps=(_currentframe-1)*Math.round(100000/(newtime-time))/100;

вообще говоря, на таких коротких замерах как 2-3 кадра слишком высока погрешность чтобы принимать их во внимание.
__________________
[околостильные заметки: 1, 2, 3, 4, 5]
[битвы титаников:пиксельная (весело)]

Старый 12.02.2003, 21:07
Dendroid вне форума Посмотреть профиль Отправить личное сообщение для Dendroid Посетить домашнюю страницу Dendroid Найти все сообщения от Dendroid
  № 8  
Dendroid
 
Аватар для Dendroid

Регистрация: Dec 1999
Адрес: Магадан
Сообщений: 763
Приношу свои извинения, я не хотел никого обидеть.....
Ты меня просто напугал сперва своими выкладками, ведь если это правда, то вся жизнь прожита зря! И я все всегда делал неправильно....

Я запускал твои примеры, и думаю, что дело тут в некорректном продсчете "условного фпс"

Почему в формуле (забить на константы):
Код:
fps=_currentframe*(newtime-time);
и время и _currentframe стоят в знаменателе?
Я так понимаю tps(time per frame - сколько потрачено в среднем на фрейм) = 1/fps = (newtime-time)/_totalframes
(у тебя _currentframe - выполняет ту же роль, т.к. ты считаешь свой fps один раз в последнем кадре).
В любом случаем либо время делиться на количество фреймов либо наоборот! У меня получилось, 70% выигрыша при единственном вызове функции в отличае от множественного вызова (т.е. время получается меньше, а средний fps - больше).

Проверьте кто-нубудь меня, я нигде не наврал?

Если уж бряцать медалями, то у меня тоже есть опыт программирования где-то с 80-х годов прошлого века, и плюс к этому я читаю курс лекций по программированию на Си в Новосибирском Государственном Университете (ну это скорее в качестве хобби...)

2Uliana: падение фпс происходит по той же причине, что и падения фпс в каком-нибудь Quake при переходе на большее разрешение - рисовать приходиться больше пикселов! Тут даже дело не в масштабировании (попробуйте сделать меньше 100% - даже быстрее забегает ), а в самой тормозной операции - антиалиасинге..... Извините, если вторгаюсь в чужой разговор....
__________________
Верить никому нельзя. Мне - можно. :)

Старый 13.02.2003, 04:52
ilya_cat вне форума Посмотреть профиль Отправить личное сообщение для ilya_cat Посетить домашнюю страницу ilya_cat Найти все сообщения от ilya_cat
  № 9  
ilya_cat
 
Аватар для ilya_cat

Регистрация: Jun 1999
Адрес: Moscow
Сообщений: 136
По умолчанию Продолжаем разговор (с) Карлсон

Итак, объясню:
Разберем формулу на запчасти.[list=1][*]newtime-time - вопросов не вызывает? Результатом служит что? Сколько миллисекунд прошло между отсчетами[*]Чтобы получить целое число fps - надо 1000 разделить на разность и округлить, верно? Я делю число в 100 раз большее, и потом его пропорционально уменьшаю - получаем два знака после запятой (Ну не умеет флеш округлять с заданной точностью).[*]И теперь главный вопрос - почему я умножаю на _currentframe-2? Потому, что это число есть количество кадров между началом отсчета и этим кадром - fps-то у меня намерился в это количество раз меньший (если содержимое всех тех кадров одинаково). А нам нужно знать не сколько раз в секунду прокручивается весь цикл ролика, а сколько раз в секунду показывается один кадр.
И кстати, то, что над чертой дроби - числитель.[*] Вот и выходит - я считаю совершенно верно (в ваших терминах):
Код:
tps-newtime-time; // посчитали tps в миллисекундах
cps1=1000/tps; // перевели в cps (циклы в секунду)
cps2=Math.round(cps1*100)/100; // округлили до двух знаков после запятой
fps=cps2*_totalframes // кадров-то у нас много было
[/list=1]

Самое забавное тут то, что классическое программирование к флешу не приложимо - глюки бывают настолько дикие, а время выполнения математических действий рассчитывается совершенно по другому.

Если же мои изыскания все еще не убедительны - советую взять достаточно медленный компьютер - например, Celeron 300 - и посмотреть, как будет повисать перебор 1000 элементов массива в одном кадре, и как шустро он будет работать в 10 кадрах.

За сим остаюсь.

P.S. Насчет антиалисинга частично соглашусь, но по поводу того, что нужно рисовать больше пикселов? Флеш изначально работает в своих единицах измерения, которые равны 0.1 пиксела при 100% масштаба - этих фликселов обсчитывается не зависящее от размера экрана количество, и лишь потом они рендерятся в растровое изображение. Пример со сменой разрешений был бы схож, если бы при смене компьютеров частота подергиваний менялась, а этого, как я понял из вопроса, не происходит.
P.P.S. - персонально - Forth по сравнению с С рулит... Жаль, что его забыли массы.

Старый 13.02.2003, 12:16
C2Plus вне форума Посмотреть профиль Отправить личное сообщение для C2Plus Посетить домашнюю страницу C2Plus Найти все сообщения от C2Plus
  № 10  
C2Plus
  акула
 
Аватар для C2Plus

Регистрация: Mar 1999
Адрес: не проживает.
Сообщений: 2,077
Отправить сообщение для C2Plus с помощью ICQ
до момента замера у тебя проходит _currentframe - 1 , а не - 2. Смотри сам: между первым и вторым кадрами совершается один переход, а у тебя получается ноль переходов, что не правильно. Подумай логически - колличество промежутков между произвольными элементами равно колличество элементов - 1.

А если вас интересует почему флэш тормозит на отрисовке больших разрешений, то это происходит потому, что используются медленные виндовые методы обновления окна, жутко тормозные.
__________________
[околостильные заметки: 1, 2, 3, 4, 5]
[битвы титаников:пиксельная (весело)]

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

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

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


 


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


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