Leistungswerte messen

Gerätehersteller müssen ein Komponentenleistungsprofil in /frameworks/base/core/res/res/xml/power_profile.xml bereitstellen.

Um Werte für Energieprofile zu ermitteln, verwenden Sie Hardware, mit der der Stromverbrauch des Geräts gemessen wird, und führen Sie die verschiedenen Vorgänge aus, für die Informationen benötigt werden. Messen Sie den Stromverbrauch während dieser Vorgänge und berechnen Sie die Werte (leiten Sie die Unterschiede gegebenenfalls von anderen Baseline-Stromverbräuchen ab).

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 wird dann verwendet, um den Akkuverbrauch der App oder des Subsystems zu schätzen.

Geräte mit Bluetooth-, Modem- und WLAN-Controllern, auf denen Android 7.0 und höher ausgeführt wird, können zusätzliche Leistungswerte 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 (angegeben in „cpu.clusters.cores“).
  • Von den einzelnen Clustern unterstützte CPU-Geschwindigkeiten.
  • Aktiver CPU-Stromverbrauch für jeden Cluster.

Um zwischen dem aktiven CPU-Stromverbrauch 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 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 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>

Leistungswerte

In der folgenden Tabelle werden die verfügbaren Einstellungen für Leistungswerte beschrieben. Die Beispieldatei in AOSP finden Sie unter power_profile.xml.

Name Beschreibung Beispielwert Hinweise
ambient.on Zusätzlicher Stromverbrauch, wenn sich das Display im Inaktivitäts-, Ambient- oder Always-on-Modus befindet, anstatt ausgeschaltet zu sein. etwa 100 mA -
screen.on Zusätzlicher Stromverbrauch, wenn der Bildschirm bei minimaler Helligkeit eingeschaltet ist. 200 mA Dazu gehören der Touch-Controller und die Displaybeleuchtung. Bei 0 % Helligkeit wird nicht der Android-Mindestwert verwendet, der in der Regel bei 10 oder 20 % liegt.
screen.full Zusätzlicher Stromverbrauch, wenn der Bildschirm auf maximaler Helligkeit eingestellt ist, im Vergleich zum Stromverbrauch bei minimaler Helligkeit. 100 mA bis 300 mA Ein Bruchteil dieses Werts (basierend auf der Bildschirmhelligkeit) wird dem Wert „screen.on“ hinzugefügt, um den Stromverbrauch des Displays zu berechnen.
wifi.on Zusätzlicher Stromverbrauch, wenn WLAN aktiviert ist, aber keine Daten empfangen, gesendet oder gescannt werden. 2 mA -
wifi.active Zusätzlicher Stromverbrauch beim Senden oder Empfangen über WLAN. 31 mA -
wifi.scan Zusätzlicher Stromverbrauch, wenn WLAN nach Zugangspunkten sucht. 100 mA -
Audio Zusätzlicher Stromverbrauch bei der Audio-Decodierung/‑Codierung über DSP. etwa 10 mA Wird für DSP-Audio verwendet.
Video Zusätzlicher Stromverbrauch bei der Videodecodierung über den DSP. etwa 50 mA Wird für DSP-Videos verwendet.
camera.avg Durchschnittlicher Stromverbrauch des Kamerasubsystems für eine typische Kamera-App. 600 mA Dies ist eine grobe Schätzung für eine App, die eine Vorschau ausführt und etwa 10 Bilder pro Minute in voller Auflösung aufnimmt.
camera.flashlight Durchschnittliche Leistung, die vom Kamerablitzmodul verbraucht wird, wenn es eingeschaltet ist. 200 mA -
gps.signalqualitybased Zusätzlicher Stromverbrauch durch GPS je nach 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 Stromverbrauch, wenn GPS ein Signal empfängt. 50 mA -
radio.active Zusätzlicher Stromverbrauch, wenn das Mobilfunkmodul Daten sendet oder empfängt. 100 mA bis 300 mA -
radio.scanning Zusätzlicher Stromverbrauch, wenn das Mobilfunkmodem den Mobilfunkmast anfunkt. 1,2 mA -
radio.on Zusätzlicher Stromverbrauch, wenn das Mobilfunkmodul aktiviert ist. Dies ist ein Eintrag mit mehreren Werten, einer für jede Signalstärke (kein Signal, schwach, mittel, stark). 1,2 mA Einige Funkgeräte erhöhen die Leistung, wenn sie nach einem Mobilfunkmast suchen und kein Signal erkennen. Die Werte können gleich bleiben 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“ und der zweite für alle anderen Signalstärken verwendet usw.
bluetooth.controller.idle Durchschnittliche Stromaufnahme (mA) des Bluetooth-Controllers im Leerlauf. - Diese Werte werden nicht geschätzt, sondern dem Datenblatt des Controllers entnommen. Wenn mehrere Empfangs- oder Übertragungsstatus vorhanden sind, wird der Durchschnitt dieser Statuswerte berechnet. Außerdem werden jetzt Daten für Bluetooth Low Energy (LE)- und Bluetooth-Scans erhoben.

Unter Android 7.0 und höher werden die Bluetooth-Leistungswerte für „bluetooth.active“ (bei der Audiowiedergabe über Bluetooth A2DP) und „bluetooth.on“ (wenn Bluetooth aktiviert, aber im Leerlauf ist) nicht mehr verwendet.
bluetooth.controller.rx Durchschnittliche Stromaufnahme (mA) des Bluetooth-Controllers beim Empfangen. -
bluetooth.controller.tx Durchschnittliche Stromaufnahme (mA) des Bluetooth-Controllers bei der Übertragung. -
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 dem Datenblatt des Controllers entnommen. Wenn es mehrere Empfangszustände gibt, wird der Durchschnitt dieser Zustände berechnet. Wenn es mehrere Übertragungsstatus gibt, wird die Angabe eines Werts für jeden Übertragungsstatus ab Android 9 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 bei der Übertragung mit verschiedenen HF-Leistungspegeln. Dies ist ein Eintrag mit mehreren Werten, wobei für jede Sendeleistung ein Wert angegeben ist. 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 dem Datenblatt des Controllers entnommen. Wenn mehrere Empfangs- oder Übertragungsstatus vorhanden sind, wird der Durchschnitt dieser Statuswerte berechnet.
wifi.controller.rx Durchschnittliche Stromaufnahme (mA) des WLAN-Controllers beim Empfangen. -
wifi.controller.tx Durchschnittliche Stromaufnahme (mA) des WLAN-Controllers bei der Übertragung. -
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. 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 den mA-Einträgen in „cpu.active“ entsprechen.
cpu.idle Gesamtleistungsaufnahme des Systems, wenn sich die CPUs (und der SoC) im System-Stand-by-Modus befinden. 3 mA -
cpu.awake Zusätzlicher Stromverbrauch, wenn sich die CPUs im Scheduling-Leerlauf befinden (Kernel-Leerlaufschleife); das System befindet sich nicht im System-Suspend-Zustand. 50 mA Auf Ihrer Plattform werden möglicherweise mehrere Leerlaufzustände mit unterschiedlichem Stromverbrauch verwendet. Wählen Sie einen repräsentativen Leerlaufzustand für längere Leerlaufzeiten des Planers (mehrere Millisekunden) aus. Sehen Sie sich das Leistungsdiagramm auf Ihrem Messgerät an und wählen Sie Stichproben aus, bei denen die CPU den niedrigsten Verbrauch hat. Verwerfen Sie höhere Stichproben, bei denen die CPU aus dem Leerlaufmodus gewechselt ist.
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 Leistung an, die von den CPU-Rails bei verschiedenen Geschwindigkeiten verbraucht wird. Stellen Sie die maximale Geschwindigkeit im Kernel auf jede der zulässigen Geschwindigkeiten ein 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 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 Eintrag für die Anzahl der CPU-Kerne in cluster1 usw.
battery.capacity Gesamte Akkukapazität in mAh. 3.000 mAh -

Low Energy- 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 ordnet diese Aktivitäten der initiierenden App zu. Bluetooth-Scans werden der App zugeordnet, die den Scan initiiert hat. Batch-Scans werden jedoch nicht der App zugeordnet, sondern der Bluetooth App. Wenn eine App N Millisekunden lang scannt, betragen die Kosten für den Scan N Millisekunden RX-Zeit und N Millisekunden TX-Zeit. Die verbleibende Controller-Zeit wird dem Netzwerkverkehr oder der Bluetooth-App zugewiesen.