Gerätehersteller müssen in /frameworks/base/core/res/res/xml/power_profile.xml
ein Komponentenenergieprofil angeben.
Verwenden Sie zum Ermitteln von Werten für Energieprofile Hardware, die den vom Gerät verbrauchten Strom misst, und führen Sie die verschiedenen Vorgänge aus, für die Informationen erforderlich sind. Messen Sie den Stromverbrauch während dieser Vorgänge und berechnen Sie die Werte. Ermitteln Sie gegebenenfalls Unterschiede zu anderen Baseline-Stromverbrauchswerten.
Da das Ziel eines Energieprofils darin besteht, den Akkuverbrauch angemessen zu schätzen, werden die Werte des Energieprofils in Ampere angegeben. Das Android-Framework multipliziert den Strom mit der Zeit, in der das Subsystem aktiv war, und berechnet den mAh-Wert. Dieser Wert wird dann verwendet, um die Akkuentladung durch die App oder das Subsystem zu schätzen.
Geräte mit Bluetooth-, Modem- und WLAN-Controllern mit Android 7.0 und höher können zusätzliche Leistungswerte aus Chipsatzdaten liefern.
Geräte mit heterogenen CPUs
Das Energieprofil für Geräte mit CPU-Kernen mit 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-Stromverbrauch für jeden Cluster.
Um zwischen der aktiven CPU-Stromaufnahme und den unterstützten CPU-Taktfrequenzen für Cluster zu unterscheiden, fügen Sie dem Namen des Arrays die Clusternummer an. Clusternummern werden in der Reihenfolge der CPU-Kerne im Kernel-Gerätebaum zugewiesen. Beispiel in einer heterogenen Architektur mit zwei (2) Clustern mit vier (4) Kernen:
- cluster0 besteht aus cpu0–3
- cluster1 besteht aus cpu4-7
Das Android-Framework verwendet diese CPU-Kernnummern, wenn es Statistiken aus den sysfs
-Dateien unter /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>
Leistungswerte
In der folgenden Tabelle werden die verfügbaren Einstellungen für den Leistungswert beschrieben. Die Beispieldatei in AOSP finden Sie unter power_profile.xml.
Name | Beschreibung | Beispielwert | Hinweise |
---|---|---|---|
ambient.on | Zusätzlicher Stromverbrauch, wenn das Display im Ruhemodus/Inaktivitätsmodus/immer an-Modus statt ausgeschaltet ist. | etwa 100 mA | - |
screen.on | Zusätzlicher Stromverbrauch, wenn das Display mit minimaler Helligkeit eingeschaltet ist. | 200 mA | Enthält Touch-Controller und Display-Hintergrundbeleuchtung. Bei einer Helligkeit von 0 %, nicht dem Android-Mindestwert von 10 oder 20 %. |
screen.full | Zusätzlicher Stromverbrauch bei maximaler Bildschirmhelligkeit im Vergleich zur minimalen Bildschirmhelligkeit. | 100 mA bis 300 mA | Ein Bruchteil dieses Werts (basierend auf der Bildschirmhelligkeit) wird dem Wert „screen.on“ hinzugefügt, um den Stromverbrauch des Bildschirms zu berechnen. |
wifi.on | Zusätzlicher Stromverbrauch, wenn das WLAN aktiviert ist, aber nicht empfängt, sendet oder scannt. | 2 mA | - |
wifi.active | Zusätzliche Energie, die beim Senden oder Empfangen über WLAN verbraucht wird. | 31 mA | - |
wifi.scan | Zusätzlicher Stromverbrauch, wenn das WLAN nach Zugangspunkten sucht. | 100 mA | - |
Audio | Zusätzliche Leistung, die beim Dekodieren/Codieren von Audio über den DSP verbraucht wird. | etwa 10 mA | Wird für DSP-Audio verwendet. |
Video | Zusätzliche Leistung, die bei der Videodecodierung über den DSP verbraucht wird. | etwa 50 mA | Wird für DSP-Videos verwendet. |
camera.avg | Durchschnittlicher Stromverbrauch des Kamera-Subsystems für eine typische Kamera-App. | 600 mA | Dies ist eine grobe Schätzung für eine App, die eine Vorschau anzeigt und etwa 10 Bilder in voller Auflösung pro Minute aufnimmt. |
camera.flashlight | Durchschnittliche Leistung, die vom Kamera-Blitzmodul verbraucht wird, wenn es eingeschaltet ist. | 200 mA | - |
gps.signalqualitybased | Zusätzliche Energie, die vom GPS abhängig von der Signalstärke verbraucht wird. Dies ist ein Mehrfachwert, einer pro Signalstärke, von der schwächsten bis zur stärksten. | 30 mA, 10 mA | - |
gps.on | Zusätzlicher Stromverbrauch, wenn GPS ein Signal empfängt. | 50 mA | - |
radio.active | Zusätzliche Energie, die beim Senden/Empfangen von Mobilfunk verwendet wird. | 100 mA bis 300 mA | - |
radio.scanning | Zusätzliche Energie, die verbraucht wird, wenn das Mobilfunkradio den Turm anruft. | 1,2 mA | - |
radio.on | Zusätzlicher Stromverbrauch, wenn die Mobilfunkverbindung aktiviert ist. Dies ist ein Mehrfachwert-Eintrag, einer pro Signalstärke (kein Signal, schwach, mittel, stark). | 1,2 mA | Einige Funkschnittstellen erhöhen die Leistung, wenn sie nach einem Mobilfunkmasten suchen und kein Signal erkennen. Die Werte können gleich bleiben oder mit zunehmender Signalstärke sinken. Wenn Sie nur einen Wert angeben, wird dieser 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 | Durchschnittlicher Stromverbrauch (mA) des Bluetooth-Controllers im Ruhemodus. | - | Diese Werte sind keine Schätzungen, sondern stammen aus dem Datenblatt des Controllers. Wenn mehrere Empfangs- oder Übertragungsstatus vorliegen, wird der Durchschnitt dieser Status ermittelt. Außerdem erhebt das System jetzt Daten für Low Energy (LE) und Bluetooth-Scans. Unter Android 7.0 und höher werden die Bluetooth-Nutzungsdaten für „bluetooth.active“ (wird beim Abspielen von Audio über Bluetooth A2DP verwendet) und „bluetooth.on“ (wird verwendet, wenn Bluetooth aktiviert, aber inaktiv ist) nicht mehr verwendet. |
bluetooth.controller.rx | Durchschnittlicher Stromverbrauch (mA) des Bluetooth-Controllers beim Empfang. | - | |
bluetooth.controller.tx | Durchschnittlicher Stromverbrauch (mA) des Bluetooth-Controllers beim Senden. | - | |
bluetooth.controller.voltage | Durchschnittliche Betriebsspannung (mV) des Bluetooth-Controllers. | - | |
modem.controller.sleep | Durchschnittlicher Stromverbrauch (mA) des Modem-Controllers im Ruhemodus. | 0 mA | Diese Werte sind keine Schätzungen, sondern stammen aus dem Datenblatt des Controllers. Wenn es mehrere Empfangsstatus gibt, wird der Durchschnitt dieser Status ermittelt. Wenn es mehrere Übertragungsstatus gibt, wird ab Android 9 die Angabe eines Werts für jeden Übertragungsstatus unterstützt. |
modem.controller.idle | Durchschnittlicher Stromverbrauch (mA) des Modem-Controllers im Leerlauf. | - | |
modem.controller.rx | Durchschnittlicher Stromverbrauch (mA) des Modem-Controllers beim Empfang. | - | |
modem.controller.tx | Durchschnittliche Stromaufnahme (mA) des Modem-Controllers bei der Übertragung mit unterschiedlichen Funksignalstärken. Dies ist ein mehrwertiger Eintrag mit einem Wert pro Übertragungsleistung. | 100 mA, 200 mA, 300 mA, 400 mA, 500 mA | |
modem.controller.voltage | Durchschnittliche Betriebsspannung (mV) des Modem-Controllers. | - | |
wifi.controller.idle | Durchschnittlicher Stromverbrauch (mA) des WLAN-Controllers im Ruhemodus. | - | Diese Werte sind keine Schätzungen, sondern stammen aus dem Datenblatt des Controllers. Wenn mehrere Empfangs- oder Übertragungsstatus vorliegen, wird der Durchschnitt dieser Status ermittelt. |
wifi.controller.rx | Durchschnittlicher Stromverbrauch (mA) des WLAN-Controllers beim Empfang. | - | |
wifi.controller.tx | Durchschnittlicher Stromverbrauch (mA) des WLAN-Controllers bei der Übertragung. | - | |
wifi.controller.voltage | Durchschnittliche Betriebsspannung (mV) des WLAN-Controllers. | - | |
cpu.speeds | Dies ist ein Mehrfachwert-Eintrag, in dem alle möglichen CPU-Geschwindigkeiten in KHz aufgeführt sind. | 125.000 kHz, 250.000 kHz, 500.000 kHz, 1.000.000 kHz, 1.500.000 kHz | Die Anzahl und Reihenfolge der Einträge muss mit den mA-Einträgen in „cpu.active“ übereinstimmen. |
cpu.idle | Die vom System insgesamt verbrauchte Leistung, wenn sich die CPUs (und das SoC) im Ruhemodus befinden. | 3 mA | - |
cpu.awake | Zusätzliche Energie, die verbraucht wird, wenn die CPUs sich im Planungs-Ruhemodus (Kernel-Ruheschleife) befinden und das System nicht im Ruhemodus ist. | 50 mA | Auf Ihrer Plattform wird möglicherweise mehr als ein Inaktivitätsstatus mit unterschiedlichem Energieverbrauch verwendet. Wählen Sie einen repräsentativen Inaktivitätsstatus für längere Inaktivitätszeiten des Schedulers (mehrere Millisekunden) aus. Sehen Sie sich die Leistungsgrafik auf Ihrem Messgerät an und wählen Sie die Samples aus, bei denen die CPU den niedrigsten Verbrauch hat. Höhere Samples, bei denen die CPU den Ruhemodus verlassen hat, werden verworfen. |
cpu.active | Zusätzliche Leistung, die von CPUs bei unterschiedlichen Geschwindigkeiten verbraucht wird. | 100 mA, 120 mA, 140 mA, 160 mA, 200 mA | Der Wert gibt die von den CPU-Leitungen bei verschiedenen Geschwindigkeiten verbrauchten Watt an. Legen Sie die maximale Geschwindigkeit im Kernel auf jede der zulässigen Geschwindigkeiten fest und legen Sie die CPU auf diese Geschwindigkeit fest. Die Anzahl und Reihenfolge der Einträge entsprechen der Anzahl und Reihenfolge der Einträge in „cpu.speeds“. |
cpu.clusters.cores | Die Anzahl der Kerne in jedem CPU-Cluster. | 4, 2 | Nur für Geräte mit heterogenen CPU-Architekturen erforderlich. Die Anzahl der Einträge und die Reihenfolge sollten mit der Anzahl der Clustereinträge für „cpu.active“ und „cpu.speeds“ übereinstimmen. Der erste Eintrag steht für die Anzahl der CPU-Kerne in cluster0, der zweite für die Anzahl der CPU-Kerne in cluster1 usw. |
battery.capacity | Die Akkukapazität in mAh. | 3.000 mAh | - |
Low Energy (LE) und Bluetooth-Scans
Auf Geräten mit Android 7.0 erfasst das System Daten für LE-Scans (Low Energy) und Bluetooth-Netzwerkverkehr (z. B. RFCOMM und L2CAP) und verknüpft diese Aktivitäten mit der App, die den Scan initiiert hat. Bluetooth-Scans werden mit der App verknüpft, die den Scan initiiert hat, Batch-Scans jedoch nicht (sie werden stattdessen mit der Bluetooth App verknüpft). Bei einer App, die alle N Millisekunden 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.