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

Вернуться   Форум Flasher.ru > Блоги > dimarik

Оценить эту запись

[Starling] Тормози меня плавно!

Запись от dimarik размещена 28.10.2014 в 22:34

После выхода из бакграунда с потерей контекста на андроид-устройствах встретился с довольно неприятной Starling-фичей. Она называется QuadBatch#registerPrograms(). Эта штука начинает заново компилить в AGAL то, что она уже разок скомпилила. На выхлопе мы получаем офигевший GC от мусора, производимым AGALAssembler, в основном, от операций над String, полем которым является листинг шейдеров, представленных в этой самой QuadBatch#registerPrograms(), а также сам процесс компила в ByteArray.

Итого. Повторный компил + уборка мусора = 50% + 50% в относительном сравнении.
Я вышел из положения, сделав предварительно скомпиленный файл с этими же шейдерами и lazy initialization запрашиваемых программ. Файл с программами заэмбеддил в приложение (Embed[source="shaders.sdr"]).

З.Ы. конструкция типа
Код AS3:
for each (var tinted:Boolean in [true, false]) {}
каждый новый вызов вне блока создаст новый массив из [true, false]. Очень неприятно, что это во вложенных вызовах O(n^2).
Всего комментариев 7

Комментарии

Старый 28.10.2014 23:12 GBee вне форума
GBee
 
Аватар для GBee
Я пару слов знаю, что тут написаны. И одно вроде понял.
Можно было еще в названии добавить "(просто о сложном)", чтобы добить мою самооценку. :о))
Старый 29.10.2014 00:15 in4core вне форума
in4core
 
Аватар для in4core
GBee - ну так это тематическая вещь о Старлинге. Если ты знаком с ним и работаешь с ним, то тебе не должно быть непонятно. А если ты не в теме - то плакать о самооценке не стоит )))
Старый 29.10.2014 11:20 KBAC вне форума
KBAC
 
Аватар для KBAC
dimarik, а при потере контекста, есть варианты не пересобирать шейдеры? Хранить скомпилированный вариант? Кстати, ребята из Rovio, когда пилили птиц под фейсбук, делали изменения в старлинге, которые потом вошли в следующие версии. Можно о рациональных моментах писать Дэниэлу, он парень адекватный и с радостью будет править косяки.
Старый 29.10.2014 20:04 dimarik вне форума
dimarik
 
Аватар для dimarik
КВАС, именно такой вариант я и замутил. AGAL-assembler выдает ByteArray. Я записал серию таких в один файл в формате "<имя программы><длина вертекс-шейдера><тело вертек-шейдера><длина фрагмент-шейдера><тело фрагмент-шейдера>".
Идея загружать шейдеры с диска далеко не нова, я просто разместил объяву.
Старый 30.10.2014 00:25 etc вне форума
etc
 
Аватар для etc
Димка, ты начал выражаться непонятно, как программист прям.
Старый 30.10.2014 12:19 KBAC вне форума
KBAC
 
Аватар для KBAC
dimarik, я имел в виду в рантайме силами движка. Можно, конечно, просто кэшировать результат на случай потери контекста.
Старый 30.10.2014 19:41 dimarik вне форума
dimarik
 
Аватар для dimarik
Новый Контекст просит загрузить в него программу, созданную в его контексте, простите за каламбур. Программа3д просит загрузить в нее шейдеры в виде ByteArray. Это все что я знаю. А каким способом они будут получены и когда — сгенерированы ли в рантайме или созданы заранее — ее не интересует. Для фильтров, например, я воспользовался созданием в рантайме и кэшированием.

По поводу сложности O(n^2), как вы думаете, сколько будет создано массивов в приведенном ниже псевдокоде?

Код AS3:
for each (a in new Array(2) ) {
    for each (aa in new Array(2) ) {
        for each (aaa in new Array(2) ) {
        }
    }
}
Как раз подпадает под это определение сложности. А сколько времени займет освобождение памяти от этих структур?

Я могу быть неточен в определении сложности. Кому интересно, есть хорошая статья на хабре.
Обновил(-а) dimarik 30.10.2014 в 21:40
 

 


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


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