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

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

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

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
Post Определение быстродействия ПК клиента

Есть флэшка с большой областью перерисовки. Есстественно, на многих ПК тормозит . Есть идея динамически менять stage.quality + не выводить некоторые элементы дизайна в зависимости от мощностей системы.
Идея такая: в определенный момент (когда начинает загружаться флэш-контент) запускать на выполнение цикл действий, засекать время его выполенения и на основе этого интервала судить о мощности ПК.
Вопросов 2:
1. какую задачу следует выбрать для проверки, например, создание и заполнение массива данными, или создание и добавление/удаление в конвеер MovieClip'ов?
2. следует ли делать это в цикле for или while (что в любом случае приведет к подвисанию машины на момент теста) или разместить итерацию этого цикла в Event.ENTER_FRAME, чтобы проводить операцию в фоне?
Вообще интересны любые мысли по поводу этой затеи

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

Регистрация: Sep 2002
Сообщений: 30,787
Дайте пользователям самостоятельно выбирать качество рендера.

Старый 02.04.2009, 19:41
Dimonte вне форума Посмотреть профиль Отправить личное сообщение для Dimonte Найти все сообщения от Dimonte
  № 3  
Ответить с цитированием
Dimonte

Регистрация: Jun 2008
Сообщений: 51
Я такой тест делал тремя запусками сравнительно короткого действия: заполнение BitmapData шумом, потом применение фильтров на нем. Замерял время, вычислял среднее и сравнивал с заранее заданными величинами.

К сожалению, такие тесты не берут в расчет текущую загрузку процессора, так что рекомендую, как минимум, показать пользователю результат теста с возможностью сразу изменить качество (если, конечно, не идет в конфликт с интерфейсом).

Еще вариант есть, если фреймрейт идет от таймера, а не от плеера, сделать код для фреймскипа и подсчета пропущенных кадров. Если кадров пропускается совсем много, понижать качество.

Наконец, про приоритет операции. На фоне проводить, конечно, "красивее", но вы уверены, что результаты не будут сбиты каким-то действием пользователя? Если все-таки решите делать фоновой операцией, посмотрите на очень приятную реализацию green thread'а http://blog.generalrelativity.org/?p=29

Старый 02.04.2009, 23:12
litebox вне форума Посмотреть профиль Отправить личное сообщение для litebox Найти все сообщения от litebox
  № 4  
Ответить с цитированием
litebox
 
Аватар для litebox

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
Цитата:
Дайте пользователям самостоятельно выбирать качество рендера.
Без условно, это верное решение, но оно идет, как заметил Dimonte, "в конфликт с интерфейсом". Да и специфика игр такова, что играют в них взрослые дяди-тети, которых такая свобода выбора испугает .
То, что процессор может быть сильно занят во время теста, это хорошее замечание, так можно "опустить" до низкого качества вполне хорошую машину.
Проводить тест думаю именно при старте загрузки контента - в этот период юзер ничем не управляет и повлиять на выполнение теста не сможет.
В качестве фреймрейта используется ENTER_FRAME, про использование таймера как то не задумывался, даже не знаю, это может дать какой-то выигрыш, или это не принципиально?

Старый 02.04.2009, 23:46
kirea вне форума Посмотреть профиль Отправить личное сообщение для kirea Найти все сообщения от kirea
  № 5  
Ответить с цитированием
kirea
 
Аватар для kirea

Регистрация: Mar 2009
Адрес: UA -- Kherson
Сообщений: 29
использование таймера вместо ENTER_FRAME дает огромные плюсы, так как следующий кадр рисуется СРАЗУ после окончания рендера текущего, а не выжидается определенное время (длительность одного кадра таймлайна например). из этого следует:
во-первых: при малой загруженности перерисовкой stage повышается очень заметно фреймрейт.
во-вторых: если юзать ENTER_FRAME, то достаточно системе не успеть дорисовать кадр хотя бы на 1%, как кадр будет пропущен (тоесть сразу локально фреймрейт упадет вдвое). с таймером же мы сами назначаем, когда нам закончить ЭТОТ кадр и перейти к следующему

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

Регистрация: Jan 2009
Сообщений: 60
Отправить сообщение для serenkiy с помощью ICQ
Предлагаю Вам сделать счетчик FPS и судить по нему, и, в зависимости от некоторых эталонных показателей, включать/отключать определенные графические "фишки".
Тем самым можно использовать метод самоподгонки, разберу на примере:
Пользователь запустил Ваш проект на максимальных настройках. Допустим, первые 10 секунд машина тестируется на FPS (мин. и макс. значения). На базе этого анализа, автоматически решается, стоит ли воспроизводить те или иные эффекты (например, возьмем 3Д движок - динамические тени сильно виляют на производительность). Объявляем булевские переменные (Shadows:Boolean, Lighting:Boolean...), и исходя из анализов они равны true или false. А сам рендер при отрисовке сцены посмотрит на эти булевские значения и решит, что ему отрисовывать.

Старый 03.04.2009, 00:52
Dimonte вне форума Посмотреть профиль Отправить личное сообщение для Dimonte Найти все сообщения от Dimonte
  № 7  
Ответить с цитированием
Dimonte

Регистрация: Jun 2008
Сообщений: 51
litebox, под загрузкой процессора я имел в виду в первую очередь другие запущенные процессы. Например, распаковывающий что-то хорошо запакованное архиватор может вполне скушать львиную долю процессорного времени, и тест покажет неправильный результат.

Далее, про таймеры. Я не совсем согласен с kirea, не так страшен ENTER_FRAME, но таймеры все-таки лучше. Просто так свинченный таймер не даст никаких заметных прибавок в плавности процесса, может даже хуже сделать. Я уже давно и успешно пользуюсь вот этой реализацией таймера - http://www.8bitrocket.com/newsdispla...newspage=10248. Тут код создан для игр, и прекрасно в них работает, проверено на собственном опыте. Суть кода, если вкратце: цикл кадра считает, сколько он занял времени, и подстраивает таймер под этот результат. Если кадры все посчитать не получается, кадр или пропускается, или можно написать свою функцию для, к примеру, обсчета физики без рисования графики. С этим же циклом можно считать отношение пропущенных кадров к отрисованным и подстраивать качество на ходу.

Старый 03.04.2009, 11:47
litebox вне форума Посмотреть профиль Отправить личное сообщение для litebox Найти все сообщения от litebox
  № 8  
Ответить с цитированием
litebox
 
Аватар для litebox

Регистрация: Jul 2008
Адрес: Украина, Киев
Сообщений: 253
Да, определять мощность ПК через FPS идея хорошая, у меня как раз такой счетчик уже есть. Что касается таймера, на этот сайт уже попадал, но как то лень было на инглише читать, теперь, думаю, пора

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

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

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


 


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


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