어떻게 Battery Historian 을 통 해 안 드 로 이 드 앱 의 전력 소모 상황 을 분석 합 니까?
전기 소모 정 보 는
->
에서 매우 직관 적 으로 볼 수 있다.안 드 로 이 드 의 모든 전력 소모 통 계 는 코드 를 통 해 추산 되 고 집적 회로 가 보고 에 참여 하지 않 았 음 을 주의 하 세 요.정확 도 는 제조 업 체 ROM 이 제공 한 power_profile.xml
파일 에 달 려 있다.제조 업 체 마다 power_profile.xml
정확도 와 소스 코드 에 차이 가 있 기 때문에 핸드폰,버 전의 데이터 에 큰 차이 가 있 을 수 있 습 니 다.power_profile.xml
은 통계 의 정확도 에 직접적인 영향 을 주 고 이 파일 은 응용 을 통 해 수정 할 수 없습니다.다시 한 번 강조 하지만 안 드 로 이 드 소모 추산 은 하드웨어 의 참여 가 없고 모두 코드 추산 에 의존한다.power_profile.xml
파일 은 원본 코드 에 있 는 /framework/base/core/res/res/xml/power_profile.xml
에 위치 하고 일부 내용 은 다음 과 같다.
<item name="radio.scanning">0.1</item> <!-- cellular radio scanning for signal, ~10mA -->
<item name="gps.on">0.1</item> <!-- ~50mA -->
<!-- Current consumed by the radio at different signal strengths, when paging -->
<array name="radio.on"> <!-- Strength 0 to BINS-1 -->
<value>0.2</value> <!-- ~2mA -->
<value>0.1</value> <!-- ~1mA -->
</array>
</array>
<!-- Different CPU speeds as reported in
/sys/devices/system/cpu/cpu0/cpufreq/stats/time_in_state -->
<array name="cpu.speeds">
<value>400000</value> <!-- 400 MHz CPU speed -->
</array>
<!-- Current when CPU is idle -->
<item name="cpu.idle">0.1</item>
<!-- Current at each CPU speed, as per 'cpu.speeds' -->
<array name="cpu.active">
<value>0.1</value> <!-- ~100mA -->
</array>
<array name="wifi.batchedscan"> <!-- mA -->
<value>.0002</value> <!-- 1-8/hr -->
<value>.002</value> <!-- 9-64/hr -->
<value>.02</value> <!-- 65-512/hr -->
<value>.2</value> <!-- 513-4,096/hr -->
<value>2</value> <!-- 4097-/hr -->
</array>
이것 이 바로 하드웨어 차원 에서 통계 할 때 연산 에 직접 참여 하 는 매개 변수 다.소프트웨어 소모 통계 든 하드웨어 소모 통계 든 모두 BatteryStatsHelper
을 통 해 집계 된다.BatteryStatsHelper
은 /framework/base/core/java/com/andorid/internal/os/BatteryStatsHelper.java
아래 에 있다.1.1 소프트웨어 소모 통계
BatteryStatsHelper.java
에서 이런 방법 이 있 습 니 다.
private void processAppUsage(SparseArray<UserHandle> asUsers) {
final boolean forAllUsers = (asUsers.get(UserHandle.USER_ALL) != null);
mStatsPeriod = mTypeBatteryRealtime;
BatterySipper osSipper = null;
final SparseArray<? extends Uid> uidStats = mStats.getUidStats();
final int NU = uidStats.size();
for (int iu = 0; iu < NU; iu++) {
final Uid u = uidStats.valueAt(iu);
final BatterySipper app = new BatterySipper(BatterySipper.DrainType.APP, u, 0);
mCpuPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mWakelockPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mMobileRadioPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mWifiPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mBluetoothPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mSensorPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mCameraPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
mFlashlightPowerCalculator.calculateApp(app, u, mRawRealtime, mRawUptime, mStatsType);
final double totalPower = app.sumPower();
if (DEBUG && totalPower != 0) {
Log.d(TAG, String.format("UID %d: total power=%s", u.getUid(),
makemAh(totalPower)));
}
}
... // code
}
processAppUsage()
방법 에서 하나의 응용 총 공 소 모 는 여기 서 나 타 났 다.총 전력 소 모 를 응용 하 는 것 은 상술 한 8 개의 통계 치 의 합 이다.이 여덟 개의 통계 기 는
PowerCalculator.java
에서 계승 되 었 다.구체 적 으로 말 하면 이 여덟 개의 전기 소모 계산기 의 알고리즘 은 각각 다음 과 같다.
전기 소모 통계 개술 은 상술 한 바 와 같다.전체적으로 말 하면 복잡 하지 않 고 8 가지 서로 다른 방식 의 소 모 를 모 아서 전체적인 전력 소비량 을 얻어 사용자 에 게 보 여 준다.
2.배터리-역사
2.1 개술
Battery Historian 은 구 글 이 만 든 전기 소모 분석 기이 다.Battery Historian 을 통 해 내 보 낸
bugreport
파일 을 시각 화 할 수 있 습 니 다.1 세대 Battery Historian 에서 구 글 은 python 을 데이터 분석 도구 로 사용 했다.bugreport
파일 을 가 져 온 후 터미널 에서 python 을 실행 하여 시각 화 된 html 파일 을 생 성 합 니 다.이런 방법 은 사용 하기 가 비교적 번 거 롭 고 서버 에 배치 할 수 없다.이에 따라 2 세대 Battery Historian 에서 구 글 은 docker 용 기 를 사용 하 는 것 을 선택 했다.지금 은 1 세대 Battery Historian 을 전혀 추천 하지 않 습 니 다.오랫동안 유지 되 지 않 았 고 기능 이 너무 초라 합 니 다.주의해 야 할 것 은 battery-historian 이 사용 할 때 충전 을 할 수 없 으 며 장치 가 실행 되 는 안 드 로 이 드 버 전이 5.0 이상 인지 확인 하 는 것 이다.
위의 설명 을 통 해 battery-historian 의 기능 에 대해 대충 알 고 실전 에 들어간다.
2.2 버그 레 포트 가 져 오기
battery-historian 은 기능 이 강하 지만 데 이 터 를 먼저 제공 해 야 합 니 다.데이터 획득 은 수 동 으로 해 야 합 니 다.bugreports 를 가 져 오 는 방법 을 소개 합 니 다.
1.컴퓨터 에 핸드폰 을 연결 하고 adb 서 비 스 를 끊 습 니 다.adb 는 연결 방식 으로서 다른 프로그램 에 의 해 점용 될 수 있 습 니 다.따라서 우 리 는 전력 기록 을 할 때 충돌 할 수 있 는 많은 것 을 열지 않도록 해 야 합 니 다.
adb kill-server
2.adb 서비스 다시 시작
adb devices || adb start-server
3.Android 도 프로그램 에 지정 한 사용자 공간 wakelock 변환 시간 스탬프 를 기록 하지 않 습 니 다.Historian 이 타임 라인 에 각각 잠 금 깨 우기 에 대한 자세 한 정 보 를 표시 하려 면 실험 을 시작 하기 전에 다음 명령 을 사용 하여 잠 금 깨 우기 보고 서 를 사용 해 야 합 니 다.
adb shell dumpsys batterystats --enable full-wake-history
4.채집 보고 서 를 작성 하기 전에 배터리 통계 상 태 를 초기 화하 고,리 셋 명령 이 끝 난 후 usb 를 끊 고,테스트 가 끝 난 후 보고서 가 져 오기 명령 으로 통계 파일 패 키 지 를 내 보 냅 니 다.
adb shell dumpsys batterystats --reset
5.전 기 를 내 보 내 고 7.0 시스템 이상 의 장치 에 대한 활용:
adb bugreport bugreport.zip
adb bugreport>$HOME/Documents/bugreport.zip//대응 하 는 디 렉 터 리 에 지정 되 어 있 습 니 다.구체 적 인 기종 은 다 를 수 있 습 니 다.
6.0 또는 더 낮은 버 전:
adb bugreport > bugreport.txt
2.3 데이터 분석
데 이 터 를 얻 은 후에 이어서 데 이 터 를 분석 하 는 것 이다.
그림 에서 보 듯 이 Battery Historian 도표 의 예:
그 중에서 레이 블 의 의 미 는:
Battery Historian 은 거시적인 시스템 차원 의 정 보 를 제공 할 수 있 을 뿐만 아니 라 지정 한 App 에 대한 시각 화 된 데이터 와 표 정 보 를 제공 할 수 있 습 니 다.이 표 의 주요 정 보 는 다음 과 같 습 니 다.
그 중에서 레이 블 이 대표 하 는 의 미 는:
2.4.bugreport 파일 분석
앞 에는 Battery History 를 통 해 bugreport 의 파일 을 분석 하 였 습 니 다.만약 우리 가 스스로 분석 하고 싶다 면?따라서 bugreport 의 파일 내용 을 알 아 볼 필요 가 있 습 니 다.
전력 통계 정보 시작,reset 시간,프로 세 스 정보 등 포함
다음은 지난번 충전 후의 데이터 통계 입 니 다.
각 앱 의 전력 사용량 은 Uid 를 통 해 앱 을 표시 합 니 다.
키워드 아래 의 키 워드 를 통 해 관련 정 보 를 찾 을 수 있다.
DUMP OF SERVICE
이 키 워드 를 통 해 와 이 파이,인터넷,activities 등의 정 보 를 찾 을 수 있다.
이상 은 Battery Historian 을 통 해 안 드 로 이 드 애플 리 케 이 션 의 전력 소모 상황 을 분석 하 는 상세 한 내용 입 니 다.Battery Historian 안 드 로 이 드 애플 리 케 이 션 의 전력 소모 상황 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.