裝置製造商必須在 /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/stats
中的 sysfs
檔案讀取統計資料時,使用這些 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。
名稱 | 說明 | 範例值 | 附註 |
---|---|---|---|
ambient.on | 螢幕處於休眠/微光/一律開啟模式時,而不是關閉時所使用的額外電力。 | 約 100 mA | - |
screen.on | 螢幕以最低亮度開啟時的額外耗電量。 | 200 mA | 包括觸控控制器和螢幕背光。亮度為 0,而非 Android 的最低亮度 (通常為 10% 或 20%)。 |
screen.full | 螢幕亮度為最高時所使用的額外電量,相較於螢幕亮度為最低時。 | 100 mA-300 mA | 系統會將這項值的一部分 (根據螢幕亮度) 加到 screen.on 值,以計算螢幕的耗電量。 |
wifi.on | 在 Wi-Fi 已開啟但未接收、傳輸或掃描時,所使用的額外電力。 | 2 mA | - |
wifi.active | 透過 Wi-Fi 傳輸或接收時所使用的額外電力。 | 31 mA | - |
wifi.scan | Wi-Fi 掃描存取點時所使用的額外電力。 | 100 mA | - |
音訊內容 | 透過 DSP 解碼/編碼音訊時所使用的額外電力。 | 約 10 mA | 用於 DSP 音訊。 |
影片 | 透過 DSP 解碼影片時所使用的額外電力。 | 約 50 mA | 用於數位廣告平台影片。 |
camera.avg | 一般相機應用程式相機子系統的平均耗電量。 | 600 mA | 這是針對執行預覽功能,並每分鐘拍攝約 10 張全解析度相片的應用程式所做的粗略估計。 |
camera.flashlight | 攝影機閃光燈模組開啟時的平均耗電量。 | 200 mA | - |
gps.signalqualitybased | GPS 會根據信號強度使用額外電量。這是多值項目,每個訊號強度各一個,從最弱到最強。 | 30 mA、10 mA | - |
gps.on | GPS 取得訊號時所使用的額外電力。 | 50 mA | - |
radio.active | 行動無線電傳送/接收時的額外耗電量。 | 100 mA-300 mA | - |
radio.scanning | 手機無線電向基地台傳送尋呼時所使用的額外電力。 | 1.2 mA | - |
radio.on | 行動無線電開啟時的額外耗電量。這是多值項目,每個信號強度 (無信號、弱、中、強) 各一個。 | 1.2 mA | 部分無線電在搜尋基地台時,如果未偵測到訊號,就會提高功率。值可以維持不變,也可以隨著訊號強度增加而降低。如果您只提供一個值,系統會將相同的值用於所有強度。如果您提供兩個值,系統會將第一個值用於無訊號,第二個值用於所有其他強度,以此類推。 |
bluetooth.controller.idle | 藍牙控制器閒置時的平均電流消耗量 (mA)。 | - | 這些值並非估算值,而是取自控制器的資料表。如果有多個接收或傳輸狀態,系統會計算這些狀態的平均值。此外,系統現在會收集低功耗 (LE) 和藍牙掃描的資料。 Android 7.0 以上版本不再使用 bluetooth.active 的藍牙電源值 (用於透過藍牙 A2DP 播放音訊) 和 bluetooth.on (用於藍牙已開啟但處於閒置狀態)。 |
bluetooth.controller.rx | 接收時藍牙控制器的平均電流消耗量 (mA)。 | - | |
bluetooth.controller.tx | 藍牙控制器傳輸時的平均電流消耗量 (mA)。 | - | |
bluetooth.controller.voltage | 藍牙控制器的平均運作電壓 (mV)。 | - | |
modem.controller.sleep | 處於休眠狀態時,數據機控制器的平均電流消耗量 (mA)。 | 0 mA | 這些值並非估算值,而是取自控制器的資料表。如果有多個接收狀態,系統會計算這些狀態的平均值。如果有多個傳輸狀態,則自 Android 9 起,系統就會支援為每個傳輸狀態指定值。 |
modem.controller.idle | 數據機控制器閒置時的平均電流消耗量 (mA)。 | - | |
modem.controller.rx | 接收時數據機控制器的平均電流消耗量 (mA)。 | - | |
modem.controller.tx | 在不同 RF 功率等級下傳輸時,數據機控制器的平均電流消耗量 (mA)。這是一個多值項目,每個傳輸功率等級都有一個值。 | 100 mA、200 mA、300 mA、400 mA、500 mA | |
modem.controller.voltage | 數據機控制器的平均運作電壓 (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)。 | - | |
cpu.speeds | 這是多值項目,列出每個可能的 CPU 速度 (以 KHz 為單位)。 | 125000 KHz、250000 KHz、500000 KHz、1000000 KHz、1500000 KHz | 項目的數量和順序必須與 cpu.active 中的 mA 項目相符。 |
cpu.idle | CPU (和 SoC) 處於系統待機狀態時,系統所消耗的總電量。 | 3 mA | - |
cpu.awake | CPU 處於排程閒置狀態 (核心閒置迴圈) 時所使用的額外電力;系統並未處於系統暫停狀態。 | 50 mA | 您的平台可能會使用多個閒置狀態,且每個狀態的耗電量不同;請選擇代表性較強的閒置狀態,以便在排程器閒置較長的時間 (幾毫秒) 時使用。檢查測量設備上的電源圖表,並選擇 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.speed 的叢集項目數量相符。第一個項目代表叢集 0 中的 CPU 核心數量,第二個項目代表叢集 1 中的 CPU 核心數量,以此類推。 |
battery.capacity | 總電池容量 (以 mAh 為單位)。 | 3000 mAh | - |
低功耗 (LE) 和藍牙掃描
對於搭載 Android 7.0 的裝置,系統會收集低功耗 (LE) 掃描和藍牙網路流量 (例如 RFCOMM 和 L2CAP) 的資料,並將這些活動與啟動應用程式建立關聯。藍牙掃描會與啟動掃描的應用程式建立關聯,但批次掃描不會 (而是與藍牙應用程式建立關聯)。對於掃描 N 毫秒的應用程式,掃描的成本是 N 毫秒的接收時間和 N 毫秒的傳送時間;所有剩餘的控制器時間會指派給網路流量或藍牙應用程式。