기기 제조업체는 /frameworks/base/core/res/res/xml/power_profile.xml
에 구성요소 전력 프로필을 제공해야 합니다.
전력 프로필 값을 파악하려면 기기에서 사용 중인 전력을 측정하는 하드웨어를 사용하고 어떤 정보가 필요한지에 관한 다양한 연산을 실행해야 합니다. 이러한 연산 도중 전력을 측정하고 값을 계산하여 다른 기준 전력 사용과의 차이를 적절하게 도출하세요.
전력 프로필의 목표는 배터리 소모를 적절한 방식으로 예측하는 데 있으며, 전력 프로필 값은 전류(암페어)로 주어집니다. Android 프레임워크는 하위 시스템이 활성화 상태를 유지한 시간에 전류를 곱하고 mAh 값을 계산하며, 이는 애플리케이션/하위 시스템에서 소모하는 배터리 양을 예측하는 데 사용됩니다.
Android 7.0 이상을 실행하는 블루투스, 모뎀 및 Wi-Fi 컨트롤러를 포함하는 기기는 칩셋 데이터에서 가져온 추가적인 전력 값을 제공할 수 있습니다.
이종 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/stats
의 sysfs
파일에서 통계를 읽을 때 이러한 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 | 화면이 꺼짐 대신 잠자기/대기/항상 사용 모드일 때 사용되는 추가 전력입니다. | 약 100mA | - |
screen.on | 화면이 최소 밟기로 켜졌을 때 사용되는 추가 전력입니다. | 200mA | 터치 컨트롤러 및 디스플레이 백라이트를 포함합니다. 밝기가 Android의 일반적인 최소 밝기인 10% 또는 20%가 아닌 0입니다. |
screen.full | 화면이 최대 밝기일 때 사용되는 추가 전력입니다. 최소 밝기의 화면과 비교됩니다. | 100mA~300mA | 화면의 전력 소모량을 계산하도록 화면 밝기에 따른 이 값의 일부가 screen.on 값에 추가됩니다. |
wifi.on | Wi-Fi가 켜졌지만 수신, 전송 또는 검색 중이지는 않을 때 사용되는 추가 전력입니다. | 2mA | - |
wifi.active | Wi-Fi를 통해 전송하거나 수신할 때 사용되는 추가 전력입니다. | 31mA | - |
wifi.scan | Wi-Fi가 액세스 포인트를 검색하면 사용되는 추가 전력입니다. | 100mA | - |
audio | DSP를 통해 오디오가 디코딩/인코딩되면 사용되는 추가 전력입니다. | 약 10mA | DSP 오디오에 사용됩니다. |
video | DSP를 통해 동영상이 디코딩되면 사용되는 추가 전력입니다. | 약 50mA | DSP 동영상에 사용됩니다. |
camera.avg | 일반적인 카메라 애플리케이션의 카메라 하위 시스템에서 사용하는 평균 전력입니다. | 600mA | 미리보기를 실행 중인 애플리케이션과 관련된 대략적인 추정치로 의도되며, 분당 약 10개의 전체 해상도 사진을 캡처합니다. |
camera.flashlight | 카메라 플래시 모듈이 켜지면 사용되는 평균 전력입니다. | 200mA | - |
gps.signalqualitybased | 신호 강도에 따라 GPS에 의해 사용되는 추가 전력입니다. 이는 다중 값 항목이며, 신호 강도당 하나입니다(가장 약함부터 가장 강함까지). | 30mA, 10mA | - |
gps.on | GPS가 신호를 획득할 때 사용되는 추가 전력입니다. | 50mA | - |
radio.active | 모바일 라디오 송수신 시 사용되는 추가 전력입니다. | 100mA~300mA | - |
radio.scanning | 모바일 라디오가 타워에 신호를 보낼 때 사용되는 추가 전력입니다. | 1.2mA | - |
radio.on | 무선 라디오가 켜지면 사용되는 추가 전력입니다. 다중 값 항목입니다. 신호 강도당 하나입니다(신호 없음, 약함, 보통, 강함). | 1.2mA | 일부 라디오는 휴대폰 기지국을 검색할 때 신호를 감지하지 못하면 전력이 증폭됩니다. 값은 같거나 신호 강도 증가 시 감소할 수 있습니다. 1개의 값만 제공하면 모든 강도에 같은 값이 사용됩니다. 2개의 값을 제공하면 신호가 없을 경우 첫 번째 값이 사용되며, 두 번째 값은 기타 모든 강도에 사용되는 식입니다. |
bluetooth.controller.idle | 유휴 상태인 블루투스 컨트롤러의 평균 전류 소모량(mA)입니다. | - | 이 값은 추정치가 아니며, 컨트롤러의 데이터시트에서 가져온 값입니다. 수신 또는 송신 상태가 여럿인 경우 상태의 평균을 취합니다. 또한 이제 시스템이 저전력(LE) 및 블루투스 검색과 관련된 데이터를 수집합니다. Android 7.0 이상에서는 더 이상 bluetooth.active(블루투스 A2DP를 통해 오디오를 재생하는 경우에 사용됨) 및 bluetooth.on(블루투스가 켜져 있지만 유휴 상태일 때 사용됨)의 블루투스 전력 값을 사용하지 않습니다. |
bluetooth.controller.rx | 수신 중인 블루투스 컨트롤러의 평균 전류 소모량(mA)입니다. | - | |
bluetooth.controller.tx | 전송 중인 블루투스 컨트롤러의 평균 전류 소모량(mA)입니다. | - | |
bluetooth.controller.voltage | 블루투스 컨트롤러의 평균 동작 전압(mV)입니다. | - | |
modem.controller.sleep | 수면 상태인 모뎀 컨트롤러의 평균 전류 소모량(mA)입니다. | 0mA | 이 값은 추정치가 아니며, 컨트롤러의 데이터시트에서 가져온 값입니다. 수신 상태가 여럿인 경우 상태의 평균을 취합니다. Android 9부터는 송신 상태가 여럿일 경우 각 송신 상태에 값을 지정할 수 있습니다. |
modem.controller.idle | 유휴 상태인 모뎀 컨트롤러의 평균 전류 소모량(mA)입니다. | - | |
modem.controller.rx | 수신 중인 모뎀 컨트롤러의 평균 전류 소모량(mA)입니다. | - | |
modem.controller.tx | 다른 RF 전원 수준에서 전송 중인 모뎀 컨트롤러의 평균 전류 소모량(mA)입니다. 값이 송신 전력 수준당 하나인 다중 값 항목입니다. | 100mA, 200mA, 300mA, 400mA, 500mA | |
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 | 가능한 각 CPU 속도를 KMz로 나열하는 다중 값 항목입니다. | 125000KHz, 250000KHz, 500000KHz, 1000000KHz, 1500000KHz | 항목 수와 순서는 cpu.active의 mA 항목과 일치해야 합니다. |
cpu.idle | CPU(및 SoC)가 시스템 정지 상태일 때 시스템에서 소모하는 총 전력입니다. | 3mA | - |
cpu.awake | CPU가 유휴 예약 상태(커널 유휴 루프)일 때 사용되는 추가 전력입니다 시스템이 시스템 정지 상태가 아닙니다. | 50mA | 플랫폼에서는 전력 소모 수준이 다른 둘 이상의 유휴 상태를 가질 수 있습니다. 더 이상 스케줄러 유휴 기간(수 밀리초)이 발생하지 않도록 하려면 대표 유휴 상태를 선택하세요. 측정 장비의 전력 그래프를 검토하고 CPU의 소모량이 가장 낮은 지점의 표본을 선택하여 CPU가 유휴 상태를 종료한 가장 높은 표본을 삭제하세요. |
cpu.active | CPU가 다른 속도로 실행 중일 때 사용하는 추가 전력입니다. | 100mA, 120mA, 140mA, 160mA, 200mA | 값은 CPU 레일이 다른 속도로 실행할 때 사용하는 전력을 나타냅니다. 커널에서 허용되는 각 속도에 최대 속도를 설정하고 CPU를 그 속도로 고정합니다. 항목 수와 순서는 cpu.speeds의 항목 수 및 순서와 동일합니다. |
cpu.clusters.cores | 각 CPU 클러스터에 포함되는 코어 수입니다. | 4, 2 | 이종 CPU 아키텍처를 보유한 기기에만 필요합니다. 항목 수와 순서가 cpu.active 및 cpu.speeds의 클러스터 항목 수와 일치해야 합니다. 첫 번째 항목은 cluster0의 CPU 코어 수, 두 번째 항목은 cluster1의 CPU 코어 수를 나타내는 식입니다. |
battery.capacity | 총 배터리 용량의 단위는 mAh입니다. | 3000mAh | - |
저전력(LE) 및 블루투스 검색
Android 7.0을 실행하는 기기에서는 시스템이 저전력(LE) 검색 및 블루투스 네트워크 트래픽(RFCOMM 및 L2CAP 등)과 관련된 데이터를 수집하고 이러한 활동을 시작 애플리케이션에 연결합니다. 블루투스 검색은 검색을 시작한 애플리케이션에 연결되지만 일괄 검색은 연결되지 않습니다(대신 블루투스 애플리케이션에 연결됨). N밀리초의 애플리케이션 검색에서는 검색 비용이 rx 시간의 N밀리초, tx 시간의 N밀리초입니다. 모든 잔여 컨트롤러 시간은 네트워크 트래픽 또는 블루투스 애플리케이션에 할당됩니다.