PDA

Просмотр полной версии : [Starling] Фризы в браузере при 60fps


Termer
11.02.2016, 01:48
Сделал игру на citrus engine, на mobile и standalone отлично, а как только в браузере, то заметны фризы. При этом fps не проседает. Закрались сомнения, что дело может быть не в моём коде, т.к примеры которые прилагаются к движку оказывается так же фризят.

Вот пример:
http://www.fastswf.com/Uc4AsUQ

Код примера:
https://github.com/DaVikingCode/Citrus-Engine-Examples/tree/master/src/games/tinywings

При чём фризы появляются в случайном порядке(на быстрой скорости, на медленной), то ли от gc то ли от чего. Очень нужна помощь!

faraday
11.02.2016, 02:38
да, скорее всего из-за работы gc под бразуером, последите за статой старлинга, если связано со скачками памяти - то так и есть. какой браузер? последняя версия fp(20) по моим ощущения процентов на 30 быстрее чем рпошлая

Termer
11.02.2016, 03:34
У меня: fp20, Chrome. Странно, но в IE фризов нет, в Opera ещё хуже чем в Chrome. Не могу смириться, должен ведь быть выход. Как остальные разработчики работают с этим.

caseyryan
11.02.2016, 07:32
Это давний косяк. Я еще года 2 назад делал мобильно браузерную игру на старлинге. И в браузере тоже дико провисало. Дошло до того, что пришлось для браузера сделать версию игры на обычном дисплей листе. Как видно до сих пор не вылечили и никому до этого дела нет.

Кстати вот этот пример у меня в хроме совершенно не тормозит.

Termer
11.02.2016, 10:35
Этого я и опасался. Не буду тогда тратить время, перепишу под обычный дисплей лист. Всем спасибо!

ALeXVoz
11.02.2016, 14:30
На хроме особо не тормозит. подергивается иногда разве что

faraday
11.02.2016, 16:17
да, тормозит конечно ощутимо, но и не понятно откуда столько drawcall

Termer
29.02.2016, 22:36
Если кому интересно, переписал потестить под обычный дисплей лист. Всё тоже самое: Chrome, Opera с фризами, а FireFox, IE, Microsoft Edge гладко. Ещё нашёл в релизноутах sdk 21 beta:

Feb 10, 2016
AIR
Mobile:
[iOS] Crash when debugging on iOS 7 (4079709)
Flash Player
Browser freezes on playing a gaming SWF [4109643]

Поставил 21-й (-swf-version=31) ничего не поменялось. Печально конечно.

Tails
29.02.2016, 23:19
Откройте для себя Scout:
32112

У вас фризить начинает, когда какая то фигня накапливается в enterFrame. (Видны волны на длинном графике)
Два вызова enterFrame за кадр выполняются очень долго (13mc), отсюда и фризы.
Для более детальной статистики, swf должен быть специальным образом приготовлен.

Termer
01.03.2016, 21:24
При чём тут Scout, когда наблюдается разное поведение в каждом из браузеров. Даже при "чистом" коде, появляются фризы. А Scout лишь показал, что в Chrome и Opera gc вызывается активнее.

Tails
02.03.2016, 10:08
Вы вообще смотрели на график? Вот эта вот огромная голубая линия, которая почти упирается, а где то и переваливает через красную (предел выполнения, при превышений которого будет фриз) это - выполнение ActionScript кода. GC тут вообще не при делах. Это явно не нормально. У вас в демке есть всего 2 слушателя enterFrame, которые вызывают фризы, вот в них и ищите, что у вас там творится.

Поставить Scout и разобраться в нём всё же советую, он бесплатный. А без него вы и дальше будете ходить вокруг да около.

Termer
05.03.2016, 15:40
Продолжил копаться по форумам и гуглить . Находил схожие темы о проблеме производительности Flash в Chrome. Наткнулся на такой факт: в 2013 Google решил перейти с NPAPI на PPAPI по умолчанию. После чего появились жалобы (https://bugs.chromium.org/p/chromium/issues/detail?can=2&start=0&num=100&q=flash%20performance%20ppapi&colspec=ID%20Pri%20M%20Iteration%20ReleaseBlock%20Cr%20Status%20Owner%20Summary%20OS%20Modified&groupby=&sort=&id=309540) на производительность PPAPI. В Chrome до 40-й версии можно было вручную включить NPAPI через chrome://flags/#enable-npapi. Но в мае 2015 вышла 40-я версия Chrome с полным отключением NPAPI. Проверил свой Chrome: перешёл в chrome://plugins -> Adobe Flash Player -> Тип: PPAPI. Далее я посмотрел (http://www.adobe.com/software/flash/about/) и ещё раз убедился: из всех браузеров только у Opera и Chrome стоит PPAPI. Заодно проверил Unity Web-player в Chrome - вообще не работает.

Для полной уверенности, кроме своей игры взял 5 рандомных игр (2 - direct mode, 3 - обычные display list) жанра Runner и протестил в каждом из браузеров.

Итог:
Internet Explorer - отлично.
Edge (embedded - Windows 10) - отлично.
Firefox - отлично.
Chrome - фризы.
Opera - фризы.

В принципе всё, вопрос исчерпан. Всем спасибо!

Tails
05.03.2016, 16:10
Ну да, придумать причину гораздо проще, чем вникнуть и разобраться.

Termer
05.03.2016, 20:04
Ну да, написать рандомный комментарий куда проще чем перечитать первый пост и комментарии к нему.

caseyryan
05.03.2016, 22:14
Tails, это не его косяк (скорее всего). Как я уже писал, у меня была игра, которую я запускал на мобилах, и она отлично работала даже на samsung galaxy ace 3, а это далеко не передовой девайс. С тем же кодом я ее запустил в вк. И моему удивлению не было придела, когда я обнаружил, что она просто дико фризила в хроме. В опере (на тот момент она еще не была на движке хромиум) все отлично работало. Причина фризов была точно не в коде.
Просто, видимо, некоторые версии пеппер флеша как-то криво работают со Stage3D.

Tails
06.03.2016, 00:10
Я с этой проблемой тоже сталкивался, когда Starling игра тормозила на пеппере, и даже писал об этом.

Но вот конкретно сейчас, проблема находится в обработчике enterFrame. Чётко видно, что накапливается количество вычислений пользовательского ActionScript. Там нет никаких gc или других причин для тормозов.