Gerätehersteller müssen ein Energieprofil für Komponenten in /frameworks/base/core/res/res/xml/power_profile.xml bereitstellen.
Um Werte für Energieprofile zu ermitteln, verwenden Sie Hardware, mit der der Energieverbrauch des Geräts gemessen wird, und führen Sie die verschiedenen Vorgänge aus, für die Informationen erforderlich sind. Messen Sie den Energieverbrauch während dieser Vorgänge und berechnen Sie die Werte. Leiten Sie gegebenenfalls Unterschiede von anderen Baseline-Energieverbräuchen ab.
Da das Ziel eines Energieprofils darin besteht, die Akkuentladung angemessen zu schätzen, werden die Werte für das Energieprofil in Stromstärke (Ampere) angegeben. Das Android-Framework multipliziert die Stromstärke mit der Zeit, in der das Subsystem aktiv war, und berechnet den mAh-Wert. Dieser wird dann verwendet, um die Menge des Akkuverbrauchs durch die App oder das Subsystem zu schätzen.
Geräte mit Bluetooth-, Modem- und WLAN-Controllern unter Android 7.0 und höher können zusätzliche Energiewerte liefern, die aus Chipsatzdaten stammen.
Geräte mit heterogenen CPUs
Das Energieprofil für Geräte mit CPU-Kernen heterogener Architektur muss die folgenden zusätzlichen Felder enthalten:
- Gesamtzahl der CPUs für jeden Cluster (ausgedrückt in „cpu.clusters.cores“).
- Von jedem Cluster unterstützte CPU-Geschwindigkeiten.
- Aktiver CPU-Energieverbrauch für jeden Cluster.
Um zwischen dem aktiven CPU-Energieverbrauch und den unterstützten CPU-Geschwindigkeiten für Cluster zu unterscheiden, hängen Sie die Clusternummer an den Namen des Arrays an. Clusternummern werden in der Reihenfolge der CPU-Kerne in der Kernel-Gerätebaumstruktur zugewiesen. Beispiel: In einer heterogenen Architektur mit zwei (2) Clustern mit vier (4) Kernen:
- Cluster 0 besteht aus CPU 0–3.
- Cluster 1 besteht aus CPU 4–7.
Das Android-Framework verwendet diese CPU-Kernnummern, wenn es Statistiken
aus den sysfs Dateien in:
/sys/devices/system/cpu/cpu<number>/cpufreq/stats liest.
Beispiel für Cluster-CPUs und -Geschwindigkeiten:
<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>
Energiewerte
In der folgenden Tabelle werden die verfügbaren Einstellungen für Energiewerte beschrieben. Die Beispieldatei in AOSP finden Sie unter power_profile.xml.
| Name | Beschreibung | Beispielwert | Hinweise |
|---|---|---|---|
| ambient.on | Zusätzlicher Energieverbrauch, wenn sich der Bildschirm im Modus „Immer an“, „Ambient“ oder „Stand‑by“ befindet, anstatt ausgeschaltet zu sein. | ca. 100 mA | - |
| screen.on | Zusätzlicher Energieverbrauch, wenn der Bildschirm bei minimaler Helligkeit eingeschaltet ist. | 200 mA | Umfasst Touch-Controller und Display-Hintergrundbeleuchtung. Bei Helligkeit 0, nicht das Android-Minimum, das in der Regel 10 oder 20 % beträgt. |
| screen.full | Zusätzlicher Energieverbrauch, wenn der Bildschirm bei maximaler Helligkeit verwendet wird, im Vergleich zu minimaler Helligkeit. | 100 mA–300 mA | Ein Teil dieses Werts (basierend auf der Bildschirmhelligkeit) wird dem Wert „screen.on“ hinzugefügt, um den Energieverbrauch des Bildschirms zu berechnen. |
| wifi.on | Zusätzlicher Energieverbrauch, wenn WLAN aktiviert ist, aber keine Daten empfangen, gesendet oder gescannt werden. | 2 mA | - |
| wifi.active | Zusätzlicher Energieverbrauch beim Senden oder Empfangen über WLAN. | 31 mA | - |
| wifi.scan | Zusätzlicher Energieverbrauch, wenn WLAN nach Zugangspunkten sucht. | 100 mA | - |
| audio | Zusätzlicher Energieverbrauch bei der Audio-Decodierung/Codierung über DSP. | ca. 10 mA | Wird für DSP-Audio verwendet. |
| video | Zusätzlicher Energieverbrauch bei der Video-Decodierung über DSP. | ca. 50 mA | Wird für DSP-Video verwendet. |
| camera.avg | Durchschnittlicher Energieverbrauch des Kamera-Subsystems für eine typische Kamera App. | 600 mA | Als grobe Schätzung für eine App gedacht, die eine Vorschau ausführt und etwa 10 Bilder in voller Auflösung pro Minute aufnimmt. |
| camera.flashlight | Durchschnittlicher Energieverbrauch des Kamerablitzmoduls, wenn es eingeschaltet ist. | 200 mA | - |
| gps.signalqualitybased | Zusätzlicher Energieverbrauch durch GPS basierend auf der Signalstärke. Dies ist ein Eintrag mit mehreren Werten, einer für jede Signalstärke, von der schwächsten bis zur stärksten. | 30 mA, 10 mA | - |
| gps.on | Zusätzlicher Energieverbrauch, wenn GPS ein Signal erfasst. | 50 mA | - |
| radio.active | Zusätzlicher Energieverbrauch, wenn das Mobilfunkgerät sendet/empfängt. | 100 mA–300 mA | - |
| radio.scanning | Zusätzlicher Energieverbrauch, wenn das Mobilfunkgerät den Mobilfunkmast anfunkt. | 1,2 mA | - |
| radio.on | Zusätzlicher Energieverbrauch, wenn das Mobilfunkgerät eingeschaltet ist. Dies ist ein Eintrag mit mehreren Werten, einer für jede Signalstärke (kein Signal, schwach, mittel, stark). | 1,2 mA | Einige Mobilfunkgeräte erhöhen den Energieverbrauch, wenn sie nach einem Mobilfunkmast suchen und kein Signal erkennen. Die Werte können gleich sein oder mit zunehmender Signalstärke abnehmen. Wenn Sie nur einen Wert angeben, wird derselbe Wert für alle Stärken verwendet. Wenn Sie zwei Werte angeben, wird der erste für „Kein Signal“ verwendet, der zweite für alle anderen Stärken usw. |
| bluetooth.controller.idle | Durchschnittliche Stromaufnahme (mA) des Bluetooth-Controllers im Leerlauf. | - | Diese Werte werden nicht geschätzt, sondern aus dem Datenblatt des
Controllers übernommen. Wenn es mehrere Empfangs- oder Sendestatus gibt, wird der Durchschnitt
dieser Status verwendet. Außerdem erfasst das System jetzt Daten für
Low Energy (LE)- und Bluetooth-Scans. Unter Android 7.0 und höher werden die Bluetooth-Energiewerte für „bluetooth.active“ (bei der Audiowiedergabe über Bluetooth A2DP verwendet) und „bluetooth.on“ (bei aktiviertem Bluetooth im Leerlauf verwendet) nicht mehr verwendet. |
| bluetooth.controller.rx | Durchschnittliche Stromaufnahme (mA) des Bluetooth-Controllers beim Empfangen. | - | |
| bluetooth.controller.tx | Durchschnittliche Stromaufnahme (mA) des Bluetooth-Controllers beim Senden. | - | |
| bluetooth.controller.voltage | Durchschnittliche Betriebsspannung (mV) des Bluetooth-Controllers. | - | |
| modem.controller.sleep | Durchschnittliche Stromaufnahme (mA) des Modem-Controllers im Ruhezustand. | 0 mA | Diese Werte werden nicht geschätzt, sondern aus dem Datenblatt des Controllers übernommen. Wenn es mehrere Empfangsstatus gibt, wird der Durchschnitt dieser Status verwendet. Wenn es mehrere Sendestatus gibt, wird ab Android 9 die Angabe eines Werts für jeden Sendestatus unterstützt. |
| modem.controller.idle | Durchschnittliche Stromaufnahme (mA) des Modem-Controllers im Leerlauf. | - | |
| modem.controller.rx | Durchschnittliche Stromaufnahme (mA) des Modem-Controllers beim Empfangen. | - | |
| modem.controller.tx | Durchschnittliche Stromaufnahme (mA) des Modem-Controllers beim Senden mit verschiedenen HF-Leistungsstufen. Dies ist ein Eintrag mit mehreren Werten, einer für jede Sendeleistungsstufe. | 100 mA, 200 mA, 300 mA, 400 mA, 500 mA | |
| modem.controller.voltage | Durchschnittliche Betriebsspannung (mV) des Modem-Controllers. | - | |
| wifi.controller.idle | Durchschnittliche Stromaufnahme (mA) des WLAN-Controllers im Leerlauf. | - | Diese Werte werden nicht geschätzt, sondern aus dem Datenblatt des Controllers übernommen. Wenn es mehrere Empfangs- oder Sendestatus gibt, wird der Durchschnitt dieser Status verwendet. |
| wifi.controller.rx | Durchschnittliche Stromaufnahme (mA) des WLAN-Controllers beim Empfangen. | - | |
| wifi.controller.tx | Durchschnittliche Stromaufnahme (mA) des WLAN-Controllers beim Senden. | - | |
| wifi.controller.voltage | Durchschnittliche Betriebsspannung (mV) des WLAN-Controllers. | - | |
| cpu.speeds | Dies ist ein Eintrag mit mehreren Werten, in dem jede mögliche CPU-Geschwindigkeit in kHz aufgeführt ist. | 125000 kHz, 250000 kHz, 500000 kHz, 1000000 kHz, 1500000 kHz | Die Anzahl und Reihenfolge der Einträge müssen mit den mA-Einträgen in „cpu.active“ übereinstimmen. |
| cpu.idle | Gesamtenergieverbrauch des Systems, wenn sich die CPUs (und das SoC) im System Stand‑by-Modus befinden. | 3 mA | - |
| cpu.awake | Zusätzlicher Energieverbrauch, wenn sich die CPUs im Leerlaufmodus für die Planung befinden (Kernel-Leerlaufschleife). Das System befindet sich nicht im System-Stand‑by-Modus. | 50 mA | Auf Ihrer Plattform werden möglicherweise mehrere Leerlaufmodi mit unterschiedlichem Energieverbrauch verwendet. Wählen Sie einen repräsentativen Leerlaufmodus für längere Leerlaufzeiten des Planers (mehrere Millisekunden) aus. Sehen Sie sich das Energiediagramm auf Ihrem Messgerät an und wählen Sie Stichproben aus, bei denen die CPU den niedrigsten Verbrauch aufweist. Verwerfen Sie höhere Stichproben, bei denen die CPU den Leerlauf beendet hat. |
| cpu.active | Zusätzlicher Energieverbrauch der CPUs bei unterschiedlichen Geschwindigkeiten. | 100 mA, 120 mA, 140 mA, 160 mA, 200 mA | Der Wert gibt den Energieverbrauch der CPU-Rails bei unterschiedlichen Geschwindigkeiten an. Legen Sie die maximale Geschwindigkeit im Kernel auf jede der zulässigen Geschwindigkeiten fest und fixieren Sie die CPU auf diese Geschwindigkeit. Die Anzahl und Reihenfolge der Einträge entsprechen der Anzahl und Reihenfolge der Einträge in „cpu.speeds“. |
| cpu.clusters.cores | Anzahl der Kerne in jedem CPU-Cluster. | 4, 2 | Nur für Geräte mit heterogenen CPU Architekturen erforderlich. Anzahl und Reihenfolge der Einträge sollten mit der Anzahl der Clustereinträge für „cpu.active“ und „cpu.speeds“ übereinstimmen. Der erste Eintrag gibt die Anzahl der CPU-Kerne in Cluster 0 an, der zweite Eintrag die Anzahl der CPU-Kerne in Cluster 1 usw. |
| battery.capacity | Gesamte Akkukapazität in mAh. | 3000 mAh | - |
Low Energy (LE)- und Bluetooth-Scans
Bei Geräten mit Android 7.0 erfasst das System Daten für Low Energy (LE)-Scans und Bluetooth-Netzwerkverkehr (z. B. RFCOMM und L2CAP) und verknüpft diese Aktivitäten mit der initiierenden App. Bluetooth-Scans werden mit der App verknüpft, die den Scan initiiert hat. Batch-Scans werden nicht verknüpft, sondern mit der Bluetooth-App. Wenn eine App N Millisekunden lang scannt, betragen die Kosten für den Scan N Millisekunden Empfangszeit und N Millisekunden Sendezeit. Die verbleibende Controllerzeit wird dem Netzwerkverkehr oder der Bluetooth-App zugewiesen.