Как измерять значения мощности

Производители устройств должны предоставить профиль энергопотребления компонентов в файле /frameworks/base/core/res/res/xml/power_profile.xml.

Чтобы определить значения для профилей энергопотребления, используйте аппаратное обеспечение, которое измеряет мощность, потребляемую устройством, и выполняет различные операции, для которых требуется информация. Измерьте энергопотребление во время этих операций и рассчитайте значения (при необходимости вычтите из них базовое энергопотребление).

Поскольку цель профиля энергопотребления – правильно оценить разряд батареи, значения в нем указываются в амперах. Фреймворк Android умножает текущее значение на время, в течение которого подсистема была активна, и вычисляет значение в мАч, которое затем используется для оценки объема заряда батареи, израсходованного приложением или подсистемой.

Устройства с контроллерами Bluetooth, модема и Wi-Fi под управлением Android 7.0 и более поздних версий могут предоставлять дополнительные значения энергопотребления, полученные из данных чипсета.

Устройства с гетерогенными процессорами

Профиль энергопотребления для устройств с ядрами ЦП гетерогенной архитектуры должен включать следующие дополнительные поля:

  • Общее количество ЦП для каждого кластера (выражается в cpu.clusters.cores).
  • Скорость ЦП, поддерживаемая каждым кластером.
  • Активное энергопотребление ЦП для каждого кластера.

Чтобы различать активное энергопотребление ЦП и поддерживаемые скорости ЦП для кластеров, добавьте номер кластера к названию массива. Номера кластеров назначаются в порядке ядер ЦП в дереве устройств ядра. Например, в гетерогенной архитектуре с двумя кластерами по четыре ядра:

  • cluster0 состоит из cpu0-3
  • cluster1 состоит из cpu4-7

Фреймворк Android использует эти номера ядер ЦП, когда считывает статистику из файлов sysfs в каталоге /sys/devices/system/cpu/cpu<number>/cpufreq/stats.

Пример кластера с процессорами и их скоростью:

<array name="cpu.active.cluster0">
<value>200</value>
<value>300</value>
<value>400</value>
</array>
<array name="cpu.speeds.cluster0">
<value>600000</value>
<value>800000</value>
<value>1200000</value>
</array>

<array name="cpu.active.cluster1">
<value>400</value>
<value>500</value>
<value>600</value>
</array>
<array name="cpu.speeds.cluster1">
<value>800000</value>
<value>1200000</value>
<value>1400000</value>
</array>

Значения мощности

В таблице ниже описаны доступные настройки значения мощности. Пример файла в AOSP можно посмотреть в power_profile.xml.

Название Описание Пример значения Примечания
ambient.on Дополнительное энергопотребление, когда экран находится в спящем режиме, режиме заставки или режиме "Всегда включен", а не выключен. около 100 мА -
screen.on Дополнительное энергопотребление при включенном экране с минимальной яркостью. 200 мА Включает контроллер с сенсорным управлением и подсветку дисплея. При нулевой яркости, а не при минимальной яркости Android, которая обычно составляет 10 или 20%.
screen.full Дополнительная энергия, потребляемая при максимальной яркости экрана, по сравнению с минимальной. 100–300 мА Часть этого значения (в зависимости от яркости экрана) добавляется к значению screen.on для расчета энергопотребления экрана.
wifi.on Дополнительная энергия, потребляемая при включенном Wi-Fi, когда устройство не получает, не передает и не сканирует данные. 2 мА -
wifi.active Дополнительный расход энергии при передаче или получении данных по Wi-Fi. 31 мА -
wifi.scan Дополнительная энергия расходуется, когда Wi-Fi сканирует точки доступа. 100 мА -
аудио Дополнительное энергопотребление при декодировании/кодировании аудио через DSP. около 10 мА; Используется для аудио DSP.
видео Дополнительное энергопотребление при декодировании видео с помощью DSP. около 50 мА Используется для видео DSP.
camera.avg Среднее энергопотребление подсистемы камеры для типичного приложения камеры. 600 мА Приведенные значения являются приблизительными и рассчитаны для приложения, которое показывает предварительный просмотр и делает около 10 снимков в минуту.
camera.flashlight Среднее энергопотребление модуля вспышки камеры, когда он включен. 200 мА -
gps.signalqualitybased Дополнительное энергопотребление GPS зависит от силы сигнала. Это запись с несколькими значениями, по одному для каждого уровня сигнала, от самого слабого до самого сильного. 30 мА, 10 мА -
gps.on Дополнительная энергия, используемая при поиске сигнала GPS. 50 мА -
radio.active Дополнительная энергия, используемая, когда приемопередатчик мобильной связи передает или получает данные. 100–300 мА -
radio.scanning Дополнительная энергия, используемая, когда приемопередатчик сотовой связи отправляет запрос на базовую станцию. 1,2 мА -
radio.on Дополнительная энергия, которая расходуется, когда включена мобильная связь. Это запись с несколькими значениями, по одному для каждого уровня сигнала (нет сигнала, слабый, средний, сильный). 1,2 мА Некоторые радиомодули увеличивают мощность, когда ищут вышку сотовой связи и не находят сигнал. Значения могут быть одинаковыми или уменьшаться по мере увеличения уровня сигнала. Если вы укажете только одно значение, оно будет использоваться для всех уровней. Если вы укажете два значения, первое будет использоваться для отсутствия сигнала, второе – для всех остальных уровней сигнала и т. д.
bluetooth.controller.idle Среднее потребление тока (в мА) контроллером Bluetooth в режиме ожидания. - Эти значения не являются расчетными, а взяты из технической документации контроллера. Если состояний приема или передачи несколько, берется их среднее значение. Кроме того, система теперь собирает данные о поиске Bluetooth-устройств с низким энергопотреблением (LE).

В Android 7.0 и более поздних версиях больше не используются значения энергопотребления Bluetooth для bluetooth.active (используется при воспроизведении аудио через Bluetooth A2DP) и bluetooth.on (используется, когда Bluetooth включен, но неактивен).
bluetooth.controller.rx Среднее потребление тока (мА) контроллером Bluetooth при приеме. -
bluetooth.controller.tx Среднее потребление тока (в мА) контроллером Bluetooth при передаче данных. -
bluetooth.controller.voltage Среднее рабочее напряжение (мВ) Bluetooth-контроллера. -
modem.controller.sleep Средний ток (в мА), потребляемый контроллером модема в спящем режиме. 0 мА Эти значения не являются расчетными, а взяты из технической документации контроллера. Если есть несколько состояний получения, рассчитывается среднее значение. Если состояний передачи несколько, начиная с Android 9 можно указать значение для каждого из них.
modem.controller.idle Среднее потребление тока (в мА) контроллером модема в режиме ожидания. -
modem.controller.rx Среднее потребление тока (в мА) контроллером модема при приеме. -
modem.controller.tx Среднее потребление тока (в мА) контроллером модема при передаче на разных уровнях мощности радиочастотного сигнала. Это запись с несколькими значениями, по одному на каждый уровень мощности передачи. 100 мА, 200 мА, 300 мА, 400 мА, 500 мА
modem.controller.voltage Среднее рабочее напряжение контроллера модема (в мВ). -
wifi.controller.idle Среднее потребление тока (в мА) контроллером Wi-Fi в режиме ожидания. - Эти значения не являются расчетными, а взяты из технической документации контроллера. Если состояний приема или передачи несколько, вычисляется среднее значение.
wifi.controller.rx Среднее потребление тока (в мА) контроллером Wi-Fi при получении данных. -
wifi.controller.tx Среднее потребление тока (в мА) контроллером Wi-Fi при передаче данных. -
wifi.controller.voltage Среднее рабочее напряжение (мВ) контроллера Wi-Fi. -
cpu.speeds Это запись с несколькими значениями, в которой перечислены все возможные скорости ЦП в кГц. 125 000, 250 000, 500 000, 1 000 000, 1 500 000 кГц Количество и порядок записей должны соответствовать записям мА в cpu.active.
cpu.idle Общая мощность, потребляемая системой, когда ЦП (и SoC) находятся в состоянии приостановки системы. 3 мА -
cpu.awake Дополнительная энергия, потребляемая процессорами в состоянии бездействия планировщика (цикл бездействия ядра); система не находится в состоянии приостановки. 50 мА На вашей платформе может быть несколько состояний бездействия с разным уровнем энергопотребления. Выберите репрезентативное состояние бездействия для более длительных периодов бездействия планировщика (несколько миллисекунд). Изучите график энергопотребления на измерительном оборудовании и выберите образцы, в которых ЦП потребляет меньше всего энергии, отбросив образцы, в которых ЦП вышел из режима ожидания.
cpu.active Дополнительная мощность, используемая процессорами при работе на разных скоростях. 100 мА, 120 мА, 140 мА, 160 мА, 200 мА Значение представляет собой мощность, потребляемую шинами ЦП при работе на разных скоростях. Задайте в ядре максимальную скорость для каждой из допустимых скоростей и зафиксируйте ЦП на этой скорости. Количество и порядок записей соответствуют количеству и порядку записей в cpu.speeds.
cpu.clusters.cores Количество ядер в каждом кластере ЦП. 4, 2 Требуется только для устройств с разнородной архитектурой центрального процессора. Количество записей и их порядок должны соответствовать количеству записей кластера для cpu.active и cpu.speeds. Первая запись представляет количество ядер ЦП в кластере 0, вторая – количество ядер ЦП в кластере 1 и т. д.
battery.capacity Общая емкость батареи в мАч. 3000 мА·ч -

Поиск Bluetooth-устройств и сканирование Bluetooth с низким энергопотреблением (LE)

На устройствах с Android 7.0 система собирает данные о поиске Bluetooth-устройств с низким энергопотреблением (LE) и сетевом трафике Bluetooth (например, RFCOMM и L2CAP) и связывает эти действия с приложением, которое их инициировало. Поиск Bluetooth-устройств связывается с приложением, которое его инициировало, а пакетное сканирование – нет (оно связывается с приложением Bluetooth). Если приложение сканирует в течение N миллисекунд, стоимость сканирования составляет N миллисекунд времени приема и N миллисекунд времени передачи. Все оставшееся время контроллера назначается сетевому трафику или приложению Bluetooth.