Является OpenGL на Android уничтожителем батареи?

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

Сама клавиатура состоит приблизительно из 33 ключей, каждого из них оттянутое использование drawRoundRect и простой текст выше этого. Никакие виджеты вообще не используются, таким образом, это - простая производительность. Кроме того, почти весь из Гуглит подсказки по производительности, используются, таким образом, это не причина скорости также.

Я теперь достиг точки, где переключение на opengl на самом деле имело бы смысл, но я - все еще скептическое рассмотрение влияния, которое находящаяся в opengl клавиатура могла бы оказать на ресурс аккумулятора.

Поскольку я не нашел достаточной документации относительно той темы, я надеюсь, что кто-то здесь может указать на меня на правильное направление.

8
задан genpfault 26 May 2011 в 15:46
поделиться

2 ответа

Независимо от того, как сильно она разряжает батарею, вы, вероятно, не захотите этого делать, потому что большинство существующих устройств не поддерживают несколько контекстов OpenGL одновременно, поэтому ваша софт-клавиатура будет несовместима с любым приложением, использующим OpenGL для собственного рисования. На таких устройствах контекст OpenGL принадлежит только переднему планшету приложения; его нельзя использовать во вторичных частях пользовательского интерфейса, таких как софт-клавиатура.

Также, как было сказано в предыдущем постере, вам, вероятно, будет лучше посмотреть, как оптимизировать ваш обычный отрисовывание. Отрисовка векторов довольно медленная, так что предварительный перерисовывание их в растровую карту для простого выполнения растровых блитов очень поможет. Также будьте внимательны при рисовании только тех частей окна, которые изменились. 100 мс - это довольно безумное количество времени, которое требуется для отрисовки пользовательского интерфейса, так что почти наверняка есть значительные оптимизации, которые вы можете сделать. Возможно, вы захотите взглянуть на код KeyboardView на платформе (который используется стандартной софт-клавиатурой и примером IME); он уже содержит много похожих оптимизаций рисования.

.
25
ответ дан 5 December 2019 в 05:45
поделиться

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

Я не могу дать вам жесткие цифры (и, как отметил аппхакер, это специфично для конкретного устройства), но даже если OpenGL аппаратно ускоряется и, следовательно, может использовать больше батареи, операция должна выполняться намного быстрее и, следовательно, в целом, потреблять меньше энергии. Если она не ускоряется аппаратно, логично, что она должна использовать больше энергии только в том случае, если для завершения операции требуется больше времени, так как вы меняете только один API отрисовки на другой. В целом, так как рисовать приходится только при возникновении внешних событий, это не должно иметь большого значения в долгосрочной перспективе, так как люди, наверное, набирают всего несколько ключей в минуту.

Скорее всего, вам придется просто реализовать это (возможно, в упрощённом тестовом случае) и произвести измерения.

.
4
ответ дан 5 December 2019 в 05:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: