電力値の測定

デバイス メーカーは、/frameworks/base/core/res/res/xml/power_profile.xml でコンポーネントの電力プロファイルを提供する必要があります。

電力プロファイルの値を測定するには、デバイスで使用されている電力測定用のハードウェアを使用して、測定値を取得するさまざまな操作を実行します。こうした操作中の電力使用量を測定して(必要に応じて、他のベースライン電力使用量との差を導き出して)、値を算出します。

電力プロファイルは電池の消耗を適切に推測することを目的とした機能であるため、電力プロファイルの値は電流(アンペア)で表されます。Android フレームワークは、サブシステムがアクティブになっていた時間に電流を乗算して mAh 値を算出し、アプリやサブシステムによる電池の消耗量を推測するためにこの値を使用します。

Bluetooth、モデム、Wi-Fi コントローラを搭載した Android 7.0 以降のデバイスでは、チップセット データから取得した追加の電力値を確認できます。

異種 CPU のデバイス

異種アーキテクチャの CPU コアを搭載するデバイスの電源プロファイルには、次の追加フィールドを含める必要があります。

  • 各クラスタの合計 CPU 数(cpu.clusters.cores 形式で記述)。
  • 各クラスタでサポートされる CPU 速度。
  • 各クラスタのアクティブな CPU の消費電力。

アクティブな CPU 電力消費とクラスタでサポートされる CPU 速度を区別するには、配列の名前にクラスタ番号を追加します。クラスタ番号は、カーネル デバイス ツリー内の CPU コアの順に割り当てられます。たとえば、4 つのコアを備えた 2 つのクラスタを持つ異種アーキテクチャでは、次のようになります。

  • 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 をご覧ください。

名前 説明 値の例 備考
ambient.on 画面がオフではなく、Doze / アンビエント / 常時点灯モードになっているときの追加消費電力。 約 100 mA -
screen.on 最小輝度で画面をオンにしたときの追加消費電力。 200 mA タッチ コントローラとディスプレイ バックライトを含み、明るさが 10% または 20% になる Android の最小値ではなく、0 の場合。
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 DSP 動画に使用されます。
camera.avg 一般的なカメラアプリのカメラ サブシステムによる平均消費電力。 600 mA 1 分あたり約 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 一部の無線通信では、基地局が見つかっても信号が検出されない場合に電力が増加することがあります。値は信号強度の増加に伴って減少するか、横ばいとなります。1 つの値だけを指定した場合、すべての強度に同じ値が使用されます。2 つの値を指定すると、1 つ目は信号が検出されない場合の値として、また 2 つ目は他のすべての強度の値として使用されます。
bluetooth.controller.idle アイドル時の Bluetooth コントローラの平均電流引き込み(mA)。 - この値は推定値ではなく、コントローラのデータシートから取得されます。複数の受信状態または送信状態がある場合、各状態の平均値を取ります。さらに、システム上で、Low Energy(LE)および Bluetooth スキャンのデータが収集されるようになりました。

Android 7.0 以降では、bluetooth.active(Bluetooth A2DP 経由でオーディオを再生するときに使用)および bluetooth.on(Bluetooth が ON でアイドル状態のときに使用)の Bluetooth 電力値は使用されません。
bluetooth.controller.rx 受信時の Bluetooth コントローラの平均電流引き込み(mA)。 -
bluetooth.controller.tx 送信時の Bluetooth コントローラの平均電流引き込み(mA)。 -
bluetooth.controller.voltage Bluetooth コントローラの平均動作電圧(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 KHz で表される複数の CPU 速度に対する、それぞれの値です。 125,000 KHz、250,000 KHz、500,000 KHz、1,000,000 KHz、1,500,000 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.speeds のクラスタに対する入力値の数と一致する必要があります。最初の入力値は cluster0 の CPU コアの数を表し、2 つ目の入力値は cluster1 の CPU コアの数を表します。
battery.capacity mAh で表される合計電池容量。 3,000 mAh -

Low Energy(LE)と Bluetooth スキャン

Android 7.0 を実行しているデバイスの場合、システムは Low Energy(LE)スキャンと Bluetooth ネットワーク トラフィック(RFCOMM や L2CAP など)のデータを収集し、アプリの開始にこうしたアクティビティを関連付けます。Bluetooth スキャンはスキャンを開始したアプリに関連付けられますが、バッチスキャンは関連付けられません(代わりに Bluetooth アプリに関連付けられます)。N ミリ秒のアプリスキャンの場合、スキャンのコストは N ミリ秒の rx 時間と N ミリ秒の tx 時間になります。残りのコントローラ時間はすべて、ネットワーク トラフィックまたは Bluetooth アプリに割り当てられます。