Producenci urządzeń muszą podać profil zasilania komponentu w /frameworks/base/core/res/res/xml/power_profile.xml
.
Aby określić wartości profili zasilania, użyj sprzętu, który mierzy zużycie energii przez urządzenie, i wykonaj różne operacje, w przypadku których potrzebne są informacje. Zmierz zużycie energii podczas tych operacji i oblicz wartości (w razie potrzeby wyznacz różnice w stosunku do innych podstawowych wartości zużycia energii).
Celem profilu zasilania jest odpowiednie oszacowanie zużycia baterii, dlatego wartości profilu zasilania są podawane w amperach. Platforma Android mnoży natężenie prądu przez czas, przez jaki podsystem był aktywny, i oblicza wartość w mAh, która jest następnie używana do oszacowania ilości energii z baterii zużytej przez aplikację lub podsystem.
Urządzenia z kontrolerami Bluetooth, modemu i Wi-Fi z Androidem 7.0 lub nowszym mogą podawać dodatkowe wartości mocy uzyskane z danych chipsetu.
Urządzenia z heterogenicznymi procesorami
Profil zasilania urządzeń z rdzeniami procesora o heterogenicznej architekturze musi zawierać te dodatkowe pola:
- Łączna liczba procesorów w każdym klastrze (wyrażona w cpu.clusters.cores).
- Szybkości procesora obsługiwane przez każdy klaster.
- Aktywne zużycie energii przez procesor w przypadku każdego klastra.
Aby odróżnić aktywne zużycie energii przez procesor od obsługiwanych prędkości procesora w klastrach, do nazwy tablicy dołącz numer klastra. Numery klastrów są przypisywane w kolejności rdzeni procesora w drzewie urządzeń jądra. Na przykład w architekturze heterogenicznej, która ma 2 klastry z 4 rdzeniami:
- klaster0 składa się z procesorów 0–3
- klaster1 składa się z procesorów 4–7
Platforma Androida używa tych numerów rdzeni procesora podczas odczytywania statystyk z plików sysfs
w tym katalogu:/sys/devices/system/cpu/cpu<number>/cpufreq/stats
.
Przykłady procesorów i prędkości klastra:
<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>
Wartości mocy
W tabeli poniżej znajdziesz opis dostępnych ustawień wartości mocy. Aby wyświetlić przykładowy plik w AOSP, zobacz power_profile.xml.
Nazwa | Opis | Przykładowa wartość | Uwagi |
---|---|---|---|
ambient.on | Dodatkowe zużycie energii, gdy ekran jest w trybie uśpienia, otoczenia lub zawsze włączonym zamiast wyłączonym. | około 100 mA, | - |
screen.on | Dodatkowa moc zużywana, gdy ekran jest włączony przy minimalnej jasności. | 200 mA | Obejmuje kontroler dotykowy i podświetlenie wyświetlacza. Przy jasności 0, a nie przy minimalnej jasności Androida, która zwykle wynosi 10 lub 20%. |
screen.full | Dodatkowa moc zużywana, gdy ekran ma maksymalną jasność, w porównaniu z ekranem o minimalnej jasności. | 100–300 mA | Ułamek tej wartości (zależny od jasności ekranu) jest dodawany do wartości screen.on, aby obliczyć zużycie energii przez ekran. |
wifi.on | Dodatkowe zużycie energii, gdy Wi-Fi jest włączone, ale nie odbiera, nie przesyła ani nie skanuje. | 2 mA | - |
wifi.active | Dodatkowa energia zużywana podczas przesyłania lub odbierania danych przez Wi-Fi. | 31 mA | - |
wifi.scan | Dodatkowe zużycie energii podczas skanowania punktów dostępu Wi-Fi. | 100 mA | - |
dźwięk | Dodatkowa moc zużywana podczas dekodowania/kodowania dźwięku za pomocą procesora DSP. | około 10 mA | Używany do dźwięku DSP. |
film | Dodatkowa moc zużywana podczas dekodowania wideo za pomocą procesora DSP. | około 50 mA | Używane w przypadku filmów DSP. |
camera.avg | Średnie zużycie energii przez podsystem aparatu w typowych aplikacjach aparatu. | 600 mA | Jest to przybliżone oszacowanie dla aplikacji, która wyświetla podgląd i wykonuje około 10 zdjęć w pełnej rozdzielczości na minutę. |
camera.flashlight | Średnia moc zużywana przez moduł lampy błyskowej aparatu, gdy jest włączony. | 200 mA | - |
gps.signalqualitybased | Dodatkowe zużycie energii przez GPS w zależności od siły sygnału. Jest to wpis z wieloma wartościami, po jednej dla każdego poziomu sygnału, od najsłabszego do najsilniejszego. | 30 mA, 10 mA | - |
gps.on | Dodatkowe zużycie energii podczas wyszukiwania sygnału GPS. | 50 mA | - |
radio.active | Dodatkowa moc zużywana podczas przesyłania i odbierania danych przez radio komórkowe. | 100–300 mA | - |
radio.scanning | Dodatkowe zużycie energii, gdy radio komórkowe wysyła sygnał do stacji bazowej. | 1,2 mA | - |
radio.on | Dodatkowe zużycie energii, gdy radio komórkowe jest włączone. Jest to wpis wielowartościowy, po jednym dla każdej siły sygnału (brak sygnału, słaby, umiarkowany, silny). | 1,2 mA | Niektóre radia zwiększają moc, gdy szukają stacji bazowej i nie wykrywają sygnału. Wartości mogą być takie same lub maleć wraz ze wzrostem siły sygnału. Jeśli podasz tylko jedną wartość, będzie ona używana dla wszystkich mocy. Jeśli podasz 2 wartości, pierwsza zostanie użyta w przypadku braku sygnału, druga – w przypadku wszystkich innych sił sygnału itd. |
bluetooth.controller.idle | Średni pobór prądu (mA) przez kontroler Bluetooth w stanie bezczynności. | - | Te wartości nie są szacowane, ale pochodzą z karty danych kontrolera. Jeśli jest kilka stanów odbioru lub transmisji, obliczana jest średnia z tych stanów. Dodatkowo system zbiera teraz dane dotyczące skanowania Bluetooth Low Energy (LE) i Bluetooth. Android 7.0 i nowsze nie używają już wartości mocy Bluetooth w przypadku bluetooth.active (używanej podczas odtwarzania dźwięku przez Bluetooth A2DP) i bluetooth.on (używanej, gdy Bluetooth jest włączony, ale nieaktywny). |
bluetooth.controller.rx | Średni pobór prądu (mA) przez kontroler Bluetooth podczas odbierania. | - | |
bluetooth.controller.tx | Średni pobór prądu (mA) przez kontroler Bluetooth podczas transmisji. | - | |
bluetooth.controller.voltage | Średnie napięcie robocze (mV) kontrolera Bluetooth. | - | |
modem.controller.sleep | Średni pobór prądu (mA) przez kontroler modemu w trybie uśpienia. | 0 mA | Te wartości nie są szacowane, ale pochodzą z arkusza danych kontrolera. Jeśli jest kilka stanów odbioru, obliczana jest ich średnia. Jeśli jest wiele stanów transmisji, podanie wartości dla każdego z nich jest obsługiwane od Androida 9. |
modem.controller.idle | Średni pobór prądu (mA) przez kontroler modemu w stanie bezczynności. | - | |
modem.controller.rx | Średni pobór prądu (mA) przez kontroler modemu podczas odbierania. | - | |
modem.controller.tx | Średni pobór prądu (mA) przez kontroler modemu podczas transmisji przy różnych poziomach mocy RF. Jest to wpis z wieloma wartościami, po jednej dla każdego poziomu mocy transmisji. | 100 mA, 200 mA, 300 mA, 400 mA, 500 mA | |
modem.controller.voltage | Średnie napięcie robocze (mV) kontrolera modemu. | - | |
wifi.controller.idle | Średni pobór prądu (mA) przez kontroler Wi-Fi w trybie bezczynności. | - | Te wartości nie są szacowane, ale pochodzą z karty danych kontrolera. Jeśli jest kilka stanów odbioru lub transmisji, obliczana jest średnia z tych stanów. |
wifi.controller.rx | Średni pobór prądu (mA) kontrolera Wi-Fi podczas odbierania. | - | |
wifi.controller.tx | Średni pobór prądu (mA) przez kontroler Wi-Fi podczas transmisji. | - | |
wifi.controller.voltage | Średnie napięcie robocze (mV) kontrolera Wi-Fi. | - | |
cpu.speeds | Jest to wpis wielowartościowy, który zawiera listę wszystkich możliwych szybkości procesora w kHz. | 125 000 KHz, 250 000 KHz, 500 000 KHz, 1 000 000 KHz, 1 500 000 KHz | Liczba i kolejność wpisów muszą odpowiadać wpisom mA w pliku cpu.active. |
cpu.idle | Całkowita moc pobierana przez system, gdy procesory (i układ SoC) są w stanie uśpienia systemu. | 3 mA | - |
cpu.awake | Dodatkowa moc zużywana, gdy procesory są w stanie bezczynności (pętla bezczynności jądra); system nie jest w stanie zawieszenia. | 50 mA | Platforma może mieć więcej niż 1 stan bezczynności o różnym poziomie zużycia energii. Wybierz reprezentatywny stan bezczynności na dłuższe okresy bezczynności harmonogramu (kilka milisekund). Sprawdź wykres zasilania na urządzeniu pomiarowym i wybierz próbki, w których procesor zużywa najmniej energii. Odrzuć próbki o wyższych wartościach, w których procesor przestał być w stanie bezczynności. |
cpu.active | Dodatkowa moc zużywana przez procesory przy różnych prędkościach. | 100 mA, 120 mA, 140 mA, 160 mA, 200 mA | Wartość reprezentuje moc zużywaną przez szyny procesora podczas pracy z różnymi prędkościami. Ustaw maksymalną szybkość w jądrze na każdą z dozwolonych szybkości i ustal szybkość procesora na tym poziomie. Liczba i kolejność wpisów odpowiadają liczbie i kolejności wpisów w cpu.speeds. |
cpu.clusters.cores | Liczba rdzeni w każdym klastrze procesorów. | 4, 2 | Wymagane tylko w przypadku urządzeń z heterogeniczną architekturą procesora. Liczba wpisów i ich kolejność powinny być zgodne z liczbą wpisów klastra w przypadku atrybutów cpu.active i cpu.speeds. Pierwszy wpis reprezentuje liczbę rdzeni procesora w klastrze 0, drugi wpis reprezentuje liczbę rdzeni procesora w klastrze 1 itd. |
battery.capacity | Całkowita pojemność baterii w mAh. | 3000 mAh | - |
Skanowanie Bluetooth Low Energy (LE)
W przypadku urządzeń z Androidem 7.0 system zbiera dane dotyczące skanowania w trybie Low Energy (LE) i ruchu sieciowego Bluetooth (np. RFCOMM i L2CAP) oraz przypisuje te działania do aplikacji, która je zainicjowała. Skanowanie Bluetooth jest przypisywane do aplikacji, która je zainicjowała, ale skanowanie wsadowe nie jest (zamiast tego jest przypisywane do aplikacji Bluetooth). W przypadku aplikacji, która skanuje przez N milisekund, koszt skanowania wynosi N milisekund czasu odbioru i N milisekund czasu transmisji. Cały pozostały czas kontrolera jest przypisywany do ruchu sieciowego lub aplikacji Bluetooth.