測量功率值

設備製造商必須在/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 框架在從以下sysfs文件中讀取統計信息時使用這些 CPU 核心數: /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

名稱描述示例值筆記
環境.on當屏幕處於打盹/環境/始終開啟模式而不是關閉模式時使用的額外電量。約 100 毫安-
screen.on屏幕以最低亮度打開時使用的額外電量。 200毫安包括觸摸控制器和顯示屏背光。亮度為 0,而不是 Android 的最小值,通常為 10% 或 20%。
全屏與屏幕處於最小亮度時相比,屏幕處於最大亮度時使用的額外功率。 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 視頻。
相機.avg典型相機應用中相機子系統的平均功耗。 600毫安旨在粗略估計運行預覽並每分鐘捕獲大約 10 張全分辨率圖片的應用程序。
相機.手電筒開啟時相機閃光燈模塊使用的平均功率。 200毫安-
gps.signalqualitybased GPS 根據信號強度使用的額外功率。這是一個多值條目,每個信號強度一個,從最弱到最強。 30毫安,10毫安-
全球定位系統GPS 獲取信號時使用的額外功率。 50毫安-
放射性的蜂窩無線電發射/接收時使用的額外功率。 100毫安-300毫安-
無線電掃描蜂窩無線電尋呼塔時使用的額外功率。 1.2毫安-
電台蜂窩無線電打開時使用的額外功率。這是一個多值條目,每個信號強度(無信號、弱、中等、強)一個。 1.2毫安一些無線電在搜索蜂窩塔但未檢測到信號時會提高功率。值可以相同或隨著信號強度的增加而減小。如果您只提供一個值,則所有優勢都使用相同的值。如果您提供兩個值,第一個值用於無信號,第二個值用於所有其他強度,依此類推。
藍牙控制器空閒空閒時藍牙控制器的平均電流消耗 (mA)。 -這些值不是估計的,而是取自控制器的數據表。如果有多個接收或發送狀態,則取這些狀態的平均值。此外,該系統現在收集低功耗 (LE) 和藍牙掃描的數據。

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