Создание минималистичных приложений для носимых устройств с EFL

На ELC 2017 Samsung Cedric Bail поделился советами об использовании инструментария EFL для облегченных графических интерфейсов и об оптимизации приложений для носимых устройств в целом.

Разработчики, желающие добавить GUI на свои встраиваемые устройства, имеют различные варианты с открытым исходным кодом и коммерческие опции, причем Qt обычно лидирует в списке.
Однако если вы работаете в жестких условиях, особенно для устройств с батарейным питанием, таких как носимые устройства, библиотекам Enlightenment Foundation с открытым исходным кодом (EFL) следует уделить пристальное внимание.

На недавней конференции по встраиваемому Linux Cedric Bail, давний участник проекта Enlightenment, который работает над интеграцией EFL с Tizen в Samsung Open Source Group, рассказал о некоторых уроках, извлеченных при оптимизации носимых приложений для низкого уровня заряда батареи, памяти и ЦП. использование.
Бейл подвел итоги EFL и рассказал о текущем проекте по улучшению графа сцены EFL.
Тем не менее, большинство уроков имеют отношение к любому, кто оптимизирует носимые устройства на любой платформе (см. Видео ELC ниже).


На ELC 2017 Седрик Бейл объясняет, почему оптимизация приложений по-прежнему важна

(щелкните изображение, чтобы увеличить)

EFL разрабатывался в течение 10 лет и был выпущен в 2011 году. Он был разработан как инструментарий для 20-летнего Enlightenment, первого менеджера окон для GNOME.
Сегодня, однако, он развился, чтобы показать свою собственную библиотеку рендеринга и граф сцены и может работать со множеством оконных сред.
Проект EFL находится в процессе добавления оптимизированной поддержки Wayland.

Samsung был одним из первых сторонников EFL и по-прежнему является его крупнейшим чемпионом.
Сейчас гигант CE использует EFL в своих умных часах Samsung Galaxy Gear на базе Tizen, а также на своих умных телевизорах и некоторых других устройствах на базе Tizen.

Как и Enlightenment, EFL изначально разрабатывался для встроенных графических интерфейсов.
Инструментарий лицензирован с использованием сочетания LGPL 2.1 и BSD и написан на C с привязками к другим языкам.
EFL в первую очередь предназначен для Linux, хотя он достаточно компактен, чтобы работать на устройствах с ОС RTOS и MCU, таких как навигационное устройство Coyote .

«EFL оптимизирован для сокращения использования CPU, GPU, памяти и батареи», - сказал Бейл.
«Это занимает всего 8 МБ, включая все виджеты.
Некоторые выдвинули это ниже, чем это, но это менее функционально.
Arch Linux может работать с EFL на 48 МБ ОЗУ на 300 МГЦ, с экраном 1024 × 768 с полным 32-битным дисплеем и без графического процессора.
EFL работает лучше, чем Android по расходу батареи.
Вот почему Samsung использует Tizen для своих умных часов ».

Несмотря на минималистский характер, EFL поддерживает требования к доступности (ATSPI) и международные языки.
Он также «полностью настраиваемый» и может «изменять масштаб пользовательского интерфейса в зависимости от экрана и размера ввода», - сказал Бейл.
«Мы также учитываем DPI и расстояние чтения экрана для лучшей читаемости».

Бейл не согласен с тем, что улучшения в мощности / производительности скоро сделают минималистические графические инструменты устаревшими.
«Закон Мура замедляется, и он не распространяется на срок службы батареи и пропускную способность памяти», - сказал Бейл.

Оптимизация пользовательского интерфейса - это один из многих способов уменьшить объем встроенных ресурсов.
В последние месяцы мы рассмотрели презентации ELC об оптимизации, начиная от сокращения ядра Linux и файловой системы до оптимизации стеков сети WiFi и заканчивая сокращением потребления энергии на устройстве океанографического мониторинга .

Пользовательский интерфейс обычно является наиболее ресурсоемкой частью приложения.
«Большинство приложений мало что делают», - сказал Бейл.
«Они извлекают данные из сети, из базы данных, а затем меняют пользовательский интерфейс, который выполняет все интенсивные задачи, связанные с ЦП и ГП.
Поэтому оптимизация пользовательского интерфейса экономит много энергии ».

Наибольшую экономию энергии можно найти в самом дизайне пользовательского интерфейса.
«Если ваш дизайнер предоставляет вам 20-слойный пользовательский интерфейс со всеми этими растровыми изображениями и прозрачностью, наш инструментарий может сделать очень мало для уменьшения энергии», - сказал Бейл.

Наиболее энергоэффективные конструкции придерживаются основных прямоугольников, линий и вертикальных градиентов и избегают использования всего экрана.
«Если у вас есть полноэкранные анимации, где вещи скользят слева направо или вверх и вниз, вы не можете делать частичные обновления, поэтому они потребляют больше энергии», - сказал Бейл.
Если вы ориентируетесь на экраны AMOLED, рассмотрите возможность использования черного фона, как это делает проект Enlightenment на своем веб-сайте.
«Reddit, работающий в черном цвете, потребляет на 41% меньше энергии на телефоне Android AMOLED», - добавил Бэйл.

Еще одна хитрость, используемая в умных часах Gear, - встроенный в дисплей буфер кадров.
«Система может полностью приостановить SoC, в то время как дисплей обновляется, и сэкономить много времени автономной работы, что хорошо, если вы просто показываете циферблат».

Обрезка потребления памяти

Оптимизация памяти - это еще одна область, где вы можете существенно сократить потребление.
«Все операции рендеринга ограничены пропускной способностью памяти», - сказал Бейл.
«И если вы хотите запустить веб-браузер, память быстро уменьшается».

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

«Доступ к основной памяти требует больше энергии, чем доступ к кэшу процессора», - сказал Бейл.
«Вы можете оптимизировать, улучшая локальность кэша и делая линейный вместо произвольного доступа.
Вы можете искать локальность кэша с помощью Cachegrind и визуализировать его с помощью Kcachegrind , а также вы можете искать утечки и чрезмерное использование с помощью таких инструментов, как массив и визуализация массива ».

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

Разработчики носимых устройств также должны оптимизировать скорость, что означает «делать вещи более эффективно и избегать ненужных осложнений», сказал Бейл.
Это также относится к графическому процессору, где вы можете оптимизировать перерисовку экрана, если ничего не изменилось, или делать частичные обновления и повторно использовать информацию из прошлого изображения.
Вы также должны запускать анимацию «только со скоростью, на которую способно оборудование», добавил он.

Проект EFL использует Raspberry Pi в качестве цели для оптимизации скорости и запускает тесты с Kcachegrind.
Для EFL Бейл рекомендует пользователям Pi использовать более современную версию Arch Linux поверх Raspbian.

Оптимизация сети также важна.
«Когда вы отправляете данные, вы с большей вероятностью теряете пакеты, а это значит, что вы должны повторно передавать их, что требует энергии», - сказал Бейл.
«Вы хотите отправлять как можно меньше данных по сети и загружать только то, что нужно».

Оптимизация загрузок немного сложна, потому что «это обычно предварительная выборка, и вы не знаете, понадобится ли пользователю вся загрузка, так что вы можете в итоге перегрузить что-то», - сказал Бейл.
«Вы должны сгруппировать свои загрузки вместе, а затем как можно дольше переходить в режим полной сети». В противном случае энергия потребляется беспроводными стеками, переключающимися между состояниями энергии.

Улучшение EFL для предстоящего SCHED_DEADLINE

При оптимизации специально для использования батареи разработчики полагаются на ядро ​​Linux.
Ядро выбирает тактовую частоту, напряжение и количество активных ядер «пытаясь выяснить, что вы собираетесь делать, даже если оно не знает, что вы делаете», - сказал Бейл.
«В течение многих лет ядро ​​терпело неудачу в этом», добавил он.

Проблема возникает из-за планировщика ядра, основывающего свои решения исключительно на прошлой активности процесса, тогда как цифровая реальность может быть гораздо более динамичной.
Среди других проблем, планировщик «забывает обо всем, как только он мигрирует на другое ядро ​​ЦП». Существуют также сложности, такие как драйвер частоты ЦП и драйвер простоя ЦП, которые смотрят на загрузку системы, но не координируют свои действия.

В прошлом разработчики пытались решить эту проблему с помощью энергонезависимого пользовательского пространства, снабженного жестко заданным списком приложений и их соответствующим поведением.
ARM и Linaro работают над более динамичным решением под названием SCHED_DEADLINE в рамках своего проекта Energy Aware Scheduling (EAS).
Технология, которая была освещена в отдельной презентации ELC 2017 Джури Лелли из ARM, обещает связать частоту процессора и время простоя с планировщиком, сохраняя при этом больше информации о прошлых нагрузках.

«SCHED_DEADLINE позволит системе правильно планировать интерактивные задачи», - сказал Бейл.
«Пользовательское пространство будет разбивать вещи на части в потоке, предназначенном для определенных вещей». Благодаря новой инфраструктуре интерактивные задачи смогут очень быстро изменять поведение, даже во время рендеринга кадра в 16 мс.


Седрик Бейл объясняет меняющееся лицо графа сцены EFL

(щелкните изображение, чтобы увеличить)

С ростом использования многоядерных процессоров оригинальный граф сцены EFL несколько лет назад перешел на двухпоточную версию.
Сейчас проект разрабатывает новую версию, которая будет работать в гармонии с SCHED_DEADLINE.

График сцены - это «учет примитивных графических объектов, всего, что вы рисуете на экране», - сказал Бейл.
«Он имеет общий вид приложения из набора инструментов, поэтому вы можете выполнять глобальную оптимизацию».

С текущим двухпоточным графом сцены «ядру может быть трудно понять, что происходит в основном цикле», объяснил Бэйл.
«Наша новая версия поможет этому, сгруппировав вычисления - такие как задачи с интенсивным использованием процессора для генерации сплайна для фигуры и распаковки изображения - в отдельный поток для задач с интенсивным использованием экрана и сгруппировав все вычисления с привязкой к памяти в их собственном потоке. »

Однако новый граф сцены не лишен недостатков.
«Основная цена, которую мы платим, - это увеличение использования памяти, потому что нам нужно больше потоков», - сказал Бейл.
«Каждый поток имеет свой собственный стек, который вызывает усложнение и новые ошибки.
Мы пытаемся исправить все эти рискованные вещи внутри инструментария ».

Вы можете посмотреть полное видео ниже:

Презентация Седрика Бейла: «Библиотеки Фонда Просвещения - Практические примеры оптимизации для носимых устройств»

Эта статья защищена авторским правом © 2017 Linux.com и была первоначально опубликована здесь .
Он был воспроизведен этим сайтом с разрешения его владельца.
Пожалуйста, посетите Linux.com для получения последних новостей и статей о Linux и open source.