Является ли OpenGL на Android убийцей батарей? - PullRequest
8 голосов
/ 25 декабря 2009

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

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

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

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

Ответы [ 2 ]

25 голосов
/ 26 декабря 2009

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

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

4 голосов
/ 25 декабря 2009

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

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

Вероятно, вам просто придется реализовать его (возможно, в упрощенном тестовом примере) и выполнить измерения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...