裝置子系統的電源通常是在實驗室環境中測量及記錄 各種穩定狀態條件 (例如螢幕開啟時) 裝置處於閒置電源狀態。這適用於包含常數的子系統 進行檢測,或是在實驗室環境中輕鬆測量 但不適用於某些用途,例如螢幕顯示影片時
IPower.hal 1.0
提供用來傳遞 的介面
電源提示,以及回報子系統睡眠狀態指標的累計資料。
在 Android 10 以上版本中,使用累計統計資料報表功能
位於 IPowerStats.hal
Power-stat 收集 API 中。
可擷取裝置端的能源使用資料。這會取代
IPower.hal
介面的累計統計資料收集部分,
以便清楚區隔各項功能
IPowerStats
服務不會定期讀取資料。它們的發生時間
重要時刻,例如電池電量下降 1% 時。朗讀頻率較低
並在電量過低時增加輸出頻率。資料
傳回至伺服器,並可用於錯誤報告,以便進行分析和分類。
藉此持續降低耗電量及提高耗電量
電池續航力。
IPower.hal 與 IPowerStats.hal
Android 10 提供 IPower.hal
和
IPowerStats.hal
介面,但
IPower.hal
統計資料集合功能
可透過 IPowerStats.hal
介面取得
IPowerStats.hal
功能包含可取得和使用的 API
從支援裝置端電源測量結果收集的資料:
- 針對低頻率執行軌道上的能源測量
(
getRailInfo
)。 且頻率高 (streamEnergyData
) 以及系統記錄自裝置開機以來累積的能源用量。 - 針對每項支援的
PowerEntity
提供可用資料的報表資訊。PowerEntity
是平台子系統、週邊裝置或電源網域,會影響 耗電量 - 回報電力實體狀態 (
getPowerEntityStateInfo
) 而指定的實體提供的 每個指定PowerEntity
的累計資料。
下列用戶端會使用 IPowerStats.hal
API:
Statsd
,用於收集每個軌道的耗電量指標。Perfetto
,為耗電量與 CPU 建立關聯 活動。Batterystats
,根據測量資料改善電池歸因成效 ,而不是根據預先定義的常數估算電池耗電量 在「power_profile.xml.
」中
如果是 Android 10 以上版本,裝置製造商可能會選擇以下其中一種方案:
IPower.hal
和 IPowerStats.hal
函式,但
凡是符合以下條件的客戶,均須改回使用 IPower.hal
。
IPowerStats.hal
未實作。
IPowerStats.hal 實作選項
Android 7 只能使用 IPower.hal
函式
。已升級至 Android 10 的裝置必須採用
硬體功率監控子系統或其他方式
並記錄功率統計資料有些 SoC 會收集
或取得電源實體狀態居住地
資訊電源監控硬體只有在
支援 getRailInfo()
、getEnergyData()
和
streamEnergyData()
。
如果您在沒有電源監控的情況下實作 IPowerStats.hal
硬體、getRailInfo(), getEnergyData()
和
streamEnergyData()
會傳回 NOT_SUPPORTED
。同樣地
getPowerEntityInfo(), getPowerEntityStateInfo()
和
getPowerEntityStateResidencyData()
可能會傳回
NOT_SUPPORTED
。
Rail-monitoring API 傳回的資料範例包括
- 螢幕的電源軌資料消耗了 X μW。
- 數據機的電源軌道消耗了 Y μW。
子系統休眠狀態 API 傳回的資料範例包括
- 數據機在睡眠時剩 X 毫秒。
- SoC 處於關機狀態達 Y 毫秒。
- GPU 處於暫停狀態 Z 毫秒。
使用硬體電源監控子系統
如果裝置設計配備硬體電源監控子系統,請
IPowerStats.hal
,方法是建立單一 sysfs 節點
PowerStats.hal
可以剖析資料,或製作
ioctl 類型的系統呼叫集合。
您必須以防止加總方式實作核心驅動程式 溢位視硬體的電源監控方式而定,可以使用的演算法 子系統設計,必須具備即時和平均公車電壓 以及目前的測量結果核心驅動程式必須按照 不會清除能量累計器,必須 測量裝置開機後每個子軌的累積能源資料,格式為 64 位元 這個變數,會隨著每個加總的能量讀數逐漸增加 。
特定元件 (也可視需要加入多個元件) 的統計資料 例如 4 個節點雖然這並不是傳統的 sysfs 用法 (通常會限制每個節點只使用單一值),可以確保所有資料 保持一致
設計指南
- 從 sysfs 節點或發出系統呼叫。
- 確保輔助統計資料功能不會明顯地增加 耗電:
- 不要增加存取點 (AP) 和/或子系統喚醒功能以便追蹤 參數,例如睡眠模式所花的時間。
- 適時在應用程式處理器和韌體之間轉移統計資料 盡可能減少與其他流量的流量
- 如有需要,子系統可以使用下列驅動程式函式:
- 內部快取資料,以避免延遲/喚醒,但會稍微降低 過時資料。
- 在子系統休眠時進行推斷以提供更新 休眠時間。
選擇元件、子系統和統計資料
選擇要從哪個元件或子系統收集資料時
IPowerStats.hal
資料,請選取裝置上任何會耗用大量資料的工具
現有 5 mA 以上),或支援
多種耗電模式,例如:
- 個別 SoC 子系統。
- 部分或完全位於 SoC 以外的子系統,例如 Wi-Fi 或是安全性處理器
- 週邊裝置,例如高功率 LED 和攝影機。
- 採用不同模式的電源網域 (例如整個 SoC 的功率域)。
自訂
這項選用功能是可供自訂的。設計用途 以及自訂使用方式:
- 決定要測量哪些軌道,以及測量的頻率。
- 決定何時讀取資料及解讀方式。
- 根據您的資料,決定要採取哪些行動及處置時機。
驗證
VTS 測試可確保符合 Android 規定。中的留言
IPowerStats.hal
的用途是驗證裝置是否入學
確保符合法規。
舉例來說,如果您呼叫 getRailInfo()
且未傳回任何內容,
您沒有收到受監控項目的相關資訊,因此 VTS 測試失敗
軌道,或傳回 SUCCESS
的狀態。同樣地,如果您收到
火車資訊,但附有 NON_SUPPORTED
或
FILE_SYSTEM_ERROR
回應,也會導致失敗。VTS 影片
檢查 HAL 檔案是否遵循裝置製造商規格
使用 IPower.hal 和 IPowerStats.hal 註解中的要求。一個
以下是 VTS 測試中使用的留言範例:
/** * Rail information: * Reports information related to the rails being monitored. * * @return rails Information about monitored rails. * @return status SUCCESS on success or NOT_SUPPORTED if * feature is not enabled or FILESYSTEM_ERROR on filesystem nodes * access error. */ getRailInfo() generates(vec<e;RailInfo>e; rails, Status status);