2013-08-26 4 views
0

У меня есть iPhone-игра с игровым движком Unity и собственной письменной библиотекой для доступа к платформе ядра Apple Motion. Производительность отличная на iPhone 5 и в прошлом была довольно хорошей на iPhone 4.Производительность уменьшается через некоторое время, особенно когда устройство отдыхает

Запуск моего приложения сегодня на iPhone 4 (iOS 6.1.3) происходит непрерывное падение частоты кадров через некоторое время (заметное через 5-10 минут). Примерно через 20-30 минут игра почти неиграбельная и, похоже, работает медленным движением.

Странная вещь: эффект возникает, особенно когда устройство лежит на столе. Когда я перемещаю устройство, частота кадров заметно увеличивается, но уменьшается, когда нет движения. Я узнал, что код игры, написанный на C# (движок игры Unity), не виноват в этом, но Obj-C часть для управления движением с помощью Core Motion.

Я думаю, что проблема началась с того, что я обновился с iOS 5.1.x до iOS 6.1.3, но я не уверен. Трудно точно узнать историю изменений, когда проблема началась, потому что я сделал все более длительные тесты на iPhone 5 и просто быстрые тесты на iPhone 4 (OK, извлеченный урок ;-).

Я использую метод «старого стиля» для извлечения CMDeviceMotion экземпляров i.e startDeviceMotionUpdates без обработчика блоков. Вытягивающий код работает в отдельном потоке, который оказался самым перфомантным способом - ну, в прошлом.

Встроенный профилировщик iOS (консоль) не показывает значительного объема памяти, но я считаю, что плагин с внутренним кодом не учитывается в статистике. Профайлер Xcode тоже не показывал никаких утечек, насколько я могу это видеть. Просто большая часть распределений памяти и deallocs, что было немного удивительно для меня (я думаю, что повторное использование экземпляров CMDeviceMotion внутри может быть быстрее при опросе, но кому это важно).


Вопрос: Существуют ли какие-либо известные проблемы этого созвездия на IOS 6? Я имею в виду, вытягивать, работает в отдельном потоке, 60 Гц, в сочетании с игрой Unity двигателя + Open GL ES 2, ...

ответ

1

Наконец я нашел виновника: deviceMotionUpdateInterval
Чтобы быть более точным изменения интервала довольно часто.

В соответствии с разделом Choosing a Motion Event Update Interval in Event Handling Guide for iOS больший интервал увеличивает срок службы батареи. Поэтому я реализовал некоторую логику, чтобы замедлить частоту до 2 Гц, когда игра не активна, т. Е. Игра, пауза, главное меню ... При возобновлении игры частота снова была установлена ​​на 60 Гц.

После комментирования кода для изменения частоты проблема исчезла. Поэтому я решил больше не пытаться экономить потребление энергии таким образом.

Смежные вопросы