測量功率值

設備製造商必須在/frameworks/base/core/res/res/xml/power_profile.xml提供組件電源配置文件。

要確定電源配置文件的值,請使用可測量設備正在使用的電源並執行需要其信息的各種操作的硬件。在這些操作期間測量功率使用併計算值(根據需要與其他基準功率使用得出差異)。

由於電源配置文件的目的是適當地估計電池消耗,因此電源配置文件值以電流(安培)給出。 Android框架將電流乘以子系統處於活動狀態的時間,然後計算mAh值,然後將其用於估算應用程序/子系統消耗的電池量。

具有運行Android 7.0及更高版本的藍牙,調製解調器和Wi-Fi控制器的設備可以提供從芯片組數據獲取的其他功率值。

具有異構CPU的設備

具有異構體系結構的CPU內核的設備的電源配置文件必須包括以下附加字段:

  • 每個群集的總CPU數量(以cpu.clusters.cores表示)。
  • 每個群集支持的CPU速度。
  • 每個群集的活動CPU功耗。

要區分集群的活動CPU功耗和支持的CPU速度,請將集群號附加到陣列名稱上。集群編號在內核設備樹中按CPU內核的順序分配。例如,在具有兩(2)個集群和四(4)個內核的異構體系結構中:

  • cluster0由cpu0-3組成
  • cluster1由cpu4-7組成

Android框架從/sys/devices/system/cpu/cpu<number>/cpufreq/statssysfs文件讀取統計信息時,將使用這些CPU內核編號。

集群CPU和速度示例:

<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

名稱描述範例值筆記
環境屏幕處於打//環境/始終打開模式(而不是關閉)時使用的額外電源。約100 mA --
屏幕上以最小亮度打開屏幕時使用的額外電源。 200毫安包括觸摸控制器和顯示屏背光。亮度為0時,不是Android最小值(通常為10%或20%)。
全屏與處於最小亮度的屏幕相比,在處於最大亮度的屏幕上使用的額外功率。 100 mA至300 mA將此值的一小部分(基於屏幕亮度)添加到screen.on值,以計算屏幕的功耗。
wifi.on Wi-Fi開啟但未接收,發送或掃描時使用的額外電源。 2毫安--
wifi.active通過Wi-Fi傳輸或接收時使用的額外電源。 31毫安--
wifi.scan Wi-Fi掃描接入點時使用的額外電源。 100毫安--
聲音的通過DSP進行音頻解碼/編碼時使用的額外功率。約10 mA用於DSP音頻。
視頻通過DSP進行視頻解碼時使用的額外功率。約50 mA用於DSP視頻。
camera.avg相機子系統在典型相機應用中的平均功耗。 600毫安目的是對運行預覽並每分鐘捕獲約10張全分辨率圖片的應用程序進行粗略估計。
相機手電筒相機閃光燈模塊打開時使用的平均功率。 200毫安--
基於gps.signalquality GPS根據信號強度使用的附加功率。這是一個多值條目,每個信號強度一個,從最弱到最強。 30 mA,10 mA --
gps.on GPS採集信號時使用的附加功率。 50毫安--
放射性的蜂窩無線電正在發送/接收時使用的附加功率。 100 mA至300 mA --
無線電掃描蜂窩無線電尋呼塔樓時使用的附加功率。 1.2毫安--
廣播電台蜂窩無線電打開時使用的附加功率。這是一個多值條目,每個信號強度一個(無信號,弱,中等,強)。 1.2毫安一些無線電設備在搜索基站時會提高功率,而沒有檢測到信號。值可以相同,也可以隨著信號強度的增加而減小。如果僅提供一個值,則所有強度均使用相同的值。如果提供兩個值,則第一個值用於無信號,第二個值用於所有其他強度,依此類推。
藍牙控制器空閒空閒時藍牙控制器的平均電流(mA)。 --這些值不是估計值,而是從控制器的數據表中獲取的。如果存在多個接收或發送狀態,則取這些狀態的平均值。此外,系統現在可以收集數據以進行低能耗(LE)和藍牙掃描

Android 7.0及更高版本不再將Bluetooth電源值用於bluetooth.active(在通過Bluetooth A2DP播放音頻時使用)和bluetooth.on(在Bluetooth開啟但空閒時使用)。
藍牙控制器接收時藍牙控制器的平均電流(mA)。 --
藍牙控制器傳輸時藍牙控制器的平均電流(mA)。 --
藍牙控制器電壓藍牙控制器的平均工作電壓(mV)。 --
調製解調器控制器睡眠睡眠狀態下調製解調器控制器的平均電流(mA)。 0毫安這些值不是估計值,而是從控制器的數據表中獲取的。如果存在多個接收狀態,則取這些狀態的平均值。如果存在多個傳輸狀態,則從Android 9開始支持為每個傳輸狀態指定一個值。
modem.controller.idle空閒時調製解調器控制器的平均電流(mA)。 --
調製解調器控制器接收時調製解調器控制器的平均電流(mA)。 --
調製解調器控制器以不同的RF功率電平傳輸時,調製解調器控制器的平均電流(mA)。這是一個多值條目,每個發射功率電平一個值。 100 mA,200 mA,300 mA,400 mA,500 mA
調製解調器電壓調製解調器控制器的平均工作電壓(mV)。 --
wifi.controller.idle空閒時Wi-Fi控制器的平均電流(mA)。 --這些值不是估計值,而是從控制器的數據表中獲取的。如果存在多個接收或發送狀態,則取這些狀態的平均值。
wifi.controller.rx接收時Wi-Fi控制器的平均電流(mA)。 --
wifi.controller.tx傳輸時Wi-Fi控制器的平均電流(mA)。 --
wifi.controller.voltage Wi-Fi控制器的平均工作電壓(mV)。 --
速度這是一個多值條目,以KHz列出了每個可能的CPU速度。 125000 KHz,250000 KHz,500000 KHz,1000000 KHz,1500000 KHz條目的數量和順序必須與cpu.active中的mA條目相對應。
cpu.idle當CPU(和SoC)處於系統掛起狀態時,系統消耗的總功率。 3毫安--
覺醒CPU處於調度空閒狀態(內核空閒循環)時使用的額外電源;系統未處於系統掛起狀態。 50毫安您的平台可能正在使用一個以上的空閒狀態,並且功耗水平有所不同。選擇有代表性的空閒狀態,以獲得更長的調度程序空閒時間(幾毫秒)。檢查測量設備上的功率圖,並選擇CPU處於最低消耗狀態的樣本,而丟棄CPU處於空閒狀態的較高樣本。
主動以不同速度運行時,CPU使用的額外電源。 100 mA,120 mA,140 mA,160 mA,200 mA值表示以不同速度運行時CPU導軌使用的功率。將內核中的最大速度設置為每個允許的速度,並以該速度固定CPU。條目的數量和順序與cpu.speeds中的條目的數量和順序相對應。
cpu.clusters.cores每個CPU群集包含的內核數。 4、2僅對於具有異構CPU體系結構的設備才需要。條目數和順序應與cpu.active和cpu.speeds的群集條目數匹配。第一個條目表示cluster0中的CPU核心數,第二個條目表示cluster1中的CPU核心數,依此類推。
電池容量總電池容量(以mAh為單位)。 3000毫安時--

低能耗(LE)和藍牙掃描

對於運行Android 7.0的設備,系統會收集數據以進行低能耗(LE)掃描和藍牙網絡流量(例如RFCOMM和L2CAP),並將這些活動與啟動應用程序相關聯。藍牙掃描與啟動掃描的應用程序相關聯,但不進行批量掃描(而是與藍牙應用程序相關聯)。對於掃描時間為N毫秒的應用程序,掃描的成本為rx時間的N毫秒和tx時間的N毫秒。所有剩餘的控制器時間都分配給網絡流量或藍牙應用程序。