測量功率值

設備製造商必須提供在組件功率曲線/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 內核的順序分配的。例如,在具有四 (4) 個內核的兩 (2) 個集群的異構架構中:

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

Android框架使用這些CPU內核號碼時,它讀取來自統計sysfs在文件: /sys/devices/system/cpu/cpu<number>/cpufreq/stats

集群 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 毫安——
開屏屏幕以最低亮度打開時使用的額外電量。 200毫安包括觸摸控制器和顯示器背光。在 0 亮度下,不是 Android 的最小值,它往往是 10% 或 20%。
全屏與屏幕處於最低亮度時相比,屏幕處於最大亮度時使用的額外電量。 100mA-300mA該值的一部分(基於屏幕亮度)被添加到 screen.on 值中以計算屏幕的功耗。
wifi.on Wi-Fi 打開但未接收、傳輸或掃描時使用的額外功率。 2毫安——
wifi.active通過 Wi-Fi 傳輸或接收時使用的額外功率。 31毫安——
wifi.scan Wi-Fi 掃描接入點時使用的額外功率。 100毫安——
聲音的通過 DSP 進行音頻解碼/編碼時使用的額外功率。約 10 毫安用於 DSP 音頻。
視頻通過 DSP 進行視頻解碼時使用的額外功率。約 50 毫安用於 DSP 視頻。
相機.avg典型相機應用中相機子系統的平均功耗。 600毫安旨在作為運行預覽並每分鐘捕獲大約 10 張全分辨率圖片的應用程序的粗略估計。
相機手電筒相機閃光燈模塊打開時使用的平均功率。 200毫安——
基於 GPS 信號質量GPS 根據信號強度使用的額外功率。這是一個多值條目,每個信號強度一個,從最弱到最強。 30 毫安、10 毫安——
全球定位系統GPS 獲取信號時使用的額外功率。 50毫安——
無線電有源蜂窩無線電發射/接收時使用的額外功率。 100mA-300mA ——
無線電掃描蜂窩無線電尋呼塔時使用的額外功率。 1.2 毫安——
收音機蜂窩無線電打開時使用的額外功率。這是一個多值條目,每個信號強度(無信號、弱、中、強)一個。 1.2 毫安某些無線電在搜索蜂窩塔但未檢測到信號時會提高功率。值可以相同或隨著信號強度的增加而減少。如果您只提供一個值,則所有強度都使用相同的值。如果您提供兩個值,第一個值用於無信號,第二個值用於所有其他強度,依此類推。
藍牙.控制器.空閒藍牙控制器空閒時的平均電流消耗 (mA)。 ——這些值不是估計值,而是取自控制器的數據表。如果有多個接收或發送狀態,則取這些狀態的平均值。此外,該系統目前收集數據低能量(LE)和藍牙掃描

Android 7.0 及更高版本不再使用 bluetooth.active(通過藍牙 A2DP 播放音頻時使用)和 bluetooth.on(藍牙打開但空閒時使用)的藍牙功率值。
藍牙控制器.rx接收時藍牙控制器的平均電流消耗 (mA)。 ——
藍牙控制器.tx傳輸時藍牙控制器的平均電流消耗 (mA)。 ——
藍牙.控制器.電壓藍牙控制器的平均工作電壓 (mV)。 ——
調製解調器.控制器.睡眠休眠時調製解調器控制器的平均電流消耗 (mA)。 0 毫安這些值不是估計值,而是取自控制器的數據表。如果有多個接收狀態,則取這些狀態的平均值。如果有多個傳輸狀態,從 Android 9 開始支持為每個傳輸狀態指定一個值。
調製解調器.控制器.空閒空閒時調製解調器控制器的平均電流消耗 (mA)。 ——
調製解調器.控制器.rx接收時調製解調器控制器的平均電流消耗 (mA)。 ——
調製解調器.控制器.tx以不同射頻功率電平傳輸時調製解調器控制器的平均電流消耗 (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.電壓Wi-Fi 控制器的平均工作電壓 (mV)。 ——
處理器速度這是一個多值條目,以 KHz 為單位列出每個可能的 CPU 速度。 125000 KHz、250000 KHz、500000 KHz、1000000 KHz、1500000 KHz條目的數量和順序必須與 cpu.active 中的 mA 條目相對應。
空閒狀態當 CPU(和 SoC)處於系統掛起狀態時系統消耗的總功率。 3毫安——
喚醒CPU 處於調度空閒狀態(內核空閒循環)時使用的額外功率;系統未處於系統掛起狀態。 50毫安您的平台可能有多個空閒狀態在使用,並且功耗水平不同;為較長時間的調度程序空閒(幾毫秒)選擇一個有代表性的空閒狀態。檢查測量設備上的功率圖並選擇 CPU 消耗最低的樣本,丟棄 CPU 退出空閒狀態的較高樣本。
cpu.active 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毫秒的應用程序,掃描的代價是N毫秒的rx時間和N毫秒的tx時間;所有剩餘的控制器時間都分配給網絡流量或藍牙應用程序。