В моей игре слишком много батарей. Я не знаю точно, сколько он использует по сравнению с сопоставимыми играми, но он использует слишком много. Игроки жалуются, что он много использует, и некоторые из них отмечают, что это делает их устройство "горячим". Я только начинаю исследовать это и хотел бы задать некоторые теоретические и практические вопросы, чтобы сузить пространство поиска. Это в основном о версии iOS для моей игры, но, вероятно, многие из этих же проблем влияют на версию Android. Извините, что задал много вопросов, но все они были настолько взаимосвязаны. Я думал, что лучше всего держать их вместе.
Боковые заметки: в моей игре нет доступа к сети (вызывается в нескольких местах как большой разряд батареи) и не потребляет много батареи в фоновом режиме; это проблема переднего плана, которая является проблемой.
(1) Я знаю, что есть API-интерфейсы для чтения уровня заряда батареи, поэтому я могу провести автоматическое тестирование. Мой вопрос здесь: о том, как долго (или, может быть, о том, как сильно разряжен аккумулятор) мне нужно, чтобы эта вещь работала, чтобы получить надежное чтение? Например, если он работает в течение 10 минут, это надежный? Если он истощает 10% батареи, это надежный? Или лучше работать в течение часа (или, скажем, посмотреть, сколько времени потребуется, чтобы батарея разрядилась на 50%)? Я спрашиваю здесь, насколько чувствителен/надежен счетчик батареи, поэтому я знаю, как долго должен проходить каждый тестовый прогон.
(2) Я пытаюсь понять, каковы вероятные причины использования батареи. Ниже перечислены некоторые возможные факторы. Пожалуйста, помогите мне понять, какие из них являются наиболее вероятными виновниками:
(2a) Как и в случае с множеством игр, моя игра должна рисовать весь экран на каждом кадре. Он работает со скоростью около 30 кадров в секунду. Я знаю, что Apple говорит, что "обновлять экран нужно столько, сколько вам нужно", но мне очень нужно рисовать каждый кадр. Фактически, я мог бы поработать над тем, чтобы изменить только части экрана, которые изменились, но в моем случае это будет большая часть экрана. И в любом случае, даже если я смогу локализовать чертеж только на части экрана, я все равно делаю вызовы буферов OpenGL 30 раз в секунду, так что действительно ли важно, что я много работал, чтобы рисовать немного меньше
(2b) Когда я рисую элементы экрана, происходит определенное количество математики с плавающей запятой, которая продолжается (например, при вычислении текстурных UV-координат), и некоторая (меньшая) математика с двойной точностью, которая продолжается. Я не знаю, насколько это дорого, по сравнению с аналогичными целыми операциями. Я мог бы, вероятно, кэшировать многие из этих значений, чтобы не приходилось многократно их вычислять, если это была вероятная победа.
(2c) Я выполняю определенное количество переключения текстур при рендеринге сцены. Раньше я только беспокоился об этом, делая игру слишком медленной (это не так), но теперь я также задаюсь вопросом, уменьшит ли сокращение текстуры использование батареи.
(2d) Я не уверен, что это будет практично для меня, но: я читал о шейдерах и OpenCL, и я хочу понять, должен ли я выгружать часть обработки процессора на GPU, независимо от того, вероятно, сэкономит аккумулятор (в дополнение к предположительно более быстрому функционированию векторного типа). Или, возможно, он использовал бы еще больше батареи на графическом процессоре, чем на процессоре?
Я понимаю, что я могу сузить, какие факторы играют, отключая определенные части игры и выполняя итеративные тесты батареи (отсюда часть (1) вопроса). Это просто то, что отключение не является тривиальным, и есть достаточно потенциальных преступников, которые я думал, что сначала попрошу общий совет.