Вопрос: Профилирование и оптимизация игрового андроида


Я делаю свою первую игру для Android, которая будет играть в 3D-аркаду с использованием opengl. Я работаю над этим довольно долго, в основном оптимизируя двигатель для гибкости в будущем.

В любом случае, теперь я полностью закончен с функциями игр и всеми хорошими вещами, но он отстает от телефонов, которые НЕ являются моим отладочным телефоном. Игра имеет довольно качественную графику для мобильной игры, поэтому ожидается небольшой лагг, но разница в производительности между запуском игры на Nexus S и запуском ее на MyTouch 4G огромна. Игра даже не воспроизводится на нижних телефонах, таких как LG Optimus (игра работает, но ее чересчур неловко, чтобы играть удобно). На моем Nexus S я редко когда-либо получаю изменчивое движение (я реализовал независимое от частоты кадров движение в игре), но на MyTouch 4G это гораздо более распространено, хотя игра по-прежнему воспроизводится .... но раздражает

Я исхожу из настольного игрового фона разработки, и оптимизация никогда не интересовала меня раньше. Что вы можете посоветовать, чтобы помочь мне ускорить игру?

Я попытался оптимизировать код настолько, насколько это возможно, и производительность значительно улучшилась, но, похоже, некоторые вещи, которые я пропустил или упускаю из виду. Это огромная игра с полным движком и множеством кодов.

Я попытался отслеживать все распределения и убедиться, что они не освобождены или не забыты во время выполнения, чтобы GC не вызывался во время игры. В основном все, что я могу придумать, я не знаю, что еще может сделать это лагг

И я сомневаюсь в том, что это количество полисов, потому что, несмотря на высокое качество, я добавил в игру опцию, позволяющую выбирать качество графики с низким, средним и высоким, как в компьютерной игре, так и разница между Low и High находится где-то между 600-900 вершинами! Единственное улучшение, которое я заметил, это время загрузки. Также нет никаких специальных эффектов пост-обработки, освещения, шейдеров, SSS в реальном времени или любого из них. Просто текстурированные лица: P

также «lagg», я повторяю случайные зависания. Я уверен, что они GC, но это может быть что-то еще, так как я считать  Я нашел и контролировал все распределения (их много). Поскольку моя игра независима от частоты кадров, всякий раз, когда она размораживает, игрок и враги и все «прыгают вперед», чтобы идти в ногу, и это делает уже сложную игру намного сложнее!

Я новичок в профилировании и оптимизации. Как я могу использовать инструменты отладки android (или другие сторонние инструменты), чтобы лучше понять, как работает моя игра во время выполнения, и когда / почему она зависает, чтобы я мог их исправить.

ТАКЖЕ, вопрос с бонусом :): есть ли у меня способ увидеть, как он будет работать на других телефонах, не имея на самом деле телефонов или знающих людей, у которых их есть? Например, как быстро это будет происходить на Droid X, хотя у меня нет Droid X, и никто не знает


3


источник


Ответы:


Вы пробовали профилировать код с помощью traceview? вставить

Debug.startMethodTracing("myfile");

в onCreate, затем

Debug.stopMethodTracing();

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

/path/to/android-sdk/platform-tools/adb pull /sdcard/myfile.trace
/path/to/android-sdk/tools/traceview ./myfile.trace

Это покажет, какие занятия занимают больше времени. Вы можете оптимизировать более медленные классы и / или переместить их в фоновый поток.

Вы упомянули, что это хорошо работает в некоторых телефонах, возможно, это новые телефоны с ограничением 24 Мб / приложения, а не 16 МБ / лимит приложения? Вы можете попробовать Анализатор памяти  в Eclipse, чтобы проверить утечку памяти или ненужные большие объекты. Для установки перейдите в раздел Справка -> Установить программное обеспечение и используйте

http://download.eclipse.org/mat/1.1/update-site/

Затем, пока вы отлаживаете представление DDMS, выберите Dump HPROF File (Зеленое стекло с красной стрелкой), он должен открыть анализатор памяти.

Редактировать -

Кажется, вам нужно преобразовать файл Android-hprof сейчас, как описано Вот ,


6



Это в основном все, что я могу придумать   делает. Я не знаю, что еще может   сделайте это отставанием.

Многие люди делают это, что нужно оптимизировать, пытаясь думать о вещах. Это займет у вас часть пути, но только частично, особенно если программное обеспечение велико.

Собственно, вещи в коде, которые требуют времени выставлять себя  к обнаружению моментальным снимком. Вам не нужно думать о них. Вы просто позволяете программе отображать их. Вот пример.


0



Прежде всего, обратите внимание, что говорит logcat. Может быть, вы найдете ответ на нежелательное отставание. Во-вторых, если вы хотите проверить, как часто и сколько времени выполнение методов требует использования DDMS. Не знаю, какую среду вы используете, но есть перспектива в Eclipse, у которой есть опция «Начать метод профилирования». Просто нажмите на нее, а затем подождите пару секунд и отпустите ее. Через несколько минут вы получите подавляющее сообщение. И проблемы с устройствами, позвольте мне привести: «Если вы хотите знать, как ваше приложение работает на данном устройстве, вам нужно протестировать его на этом устройстве». от 1]

[1] http://developer.android.com/guide/practices/design/performance.html


0