Профилирование и оптимизация игрового андроида - PullRequest
3 голосов
/ 29 апреля 2011

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

6 голосов
/ 09 июля 2011

Вы пробовали профилировать код с помощью 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 Мб / приложение? Вы можете попробовать Memory Analyzer в Eclipse, чтобы проверить наличие утечек памяти или ненужных больших объектов. Для установки перейдите в Справка -> Установить программное обеспечение и используйте

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

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

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

Похоже, вам нужно конвертировать файл Android-hprof сейчас, как описано здесь .

0 голосов
/ 15 января 2012

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

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

0 голосов
/ 30 апреля 2011

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

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

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

...