어떻게 Battery Historian 을 통 해 안 드 로 이 드 앱 의 전력 소모 상황 을 분석 합 니까?

1.전기량 통계 모듈 개요
전기 소모 정 보 는 -> 에서 매우 직관 적 으로 볼 수 있다.안 드 로 이 드 의 모든 전력 소모 통 계 는 코드 를 통 해 추산 되 고 집적 회로 가 보고 에 참여 하지 않 았 음 을 주의 하 세 요.정확 도 는 제조 업 체 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() 방법 에서 하나의 응용 총 공 소 모 는 여기 서 나 타 났 다.
  • cpu
  • Wakelock(깨 우기 자물쇠 유지)
  • 무선전신(2G/3G/4G)
  • WIFI
  • 블 루 투 스
  • 센서
  • 카메라
  • 플래시
  • 이 데 이 터 는 전력 소모 순위 에 적용 되 는 위치 와 사용자 에 게 높 은 전력 소 모 를 경고 할 지 여 부 를 결정 합 니 다.이 경 고 는 응용 프로그램 에 치 명 적일 수 있 으 며,사용 자 는 이 로 인해 응용 프로그램 을 마 운 트 해제 할 수 있 습 니 다.
    총 전력 소 모 를 응용 하 는 것 은 상술 한 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 도표 의 예:

    그 중에서 레이 블 의 의 미 는:
  • 레이 블 1:드 롭 다운 목록 에서 다른 지 표를 추가 합 니 다.
  • 레이 블 2:마 우 스 를 정보 아이콘 에 걸 면 각 지표 에 대한 상세 한 정 보 를 볼 수 있 고 도표 에서 사용 하 는 서로 다른 색채 의 대표 적 의미 에 대한 소 개 를 포함한다.
  • 레이 블 3:마 우 스 를 특정한 항목 에 걸 면 이 지표의 더 많은 상세 한 정보 와 타임 라인 의 특정한 전력 소비량 정 보 를 볼 수 있 습 니 다.
  • 이것 은 전체 휴대 전화 상태 도 입 니 다.휴대 전화 전량,CPU 사용 시간,와 이 파이 신호 의 강도,휴대 전화 온도 변화 등 을 포함 하여 위 에서 상세 하 게 도표 로 보 여 주 었 습 니 다.
    Battery Historian 은 거시적인 시스템 차원 의 정 보 를 제공 할 수 있 을 뿐만 아니 라 지정 한 App 에 대한 시각 화 된 데이터 와 표 정 보 를 제공 할 수 있 습 니 다.이 표 의 주요 정 보 는 다음 과 같 습 니 다.
  • 장치 추정 전력 사용 등 기본 정보
  • 네트워크 정보:app 네트워크 정보
  • Wakelocks:잠 금 깨 우기 정보,일반적으로 업무 강 관련
  • Services:서비스 정보,App 이 열 린 services 정보 보기
  • 프로 세 스 정보:프로 세 스 정보
  • Battery Historian 도표 에서 데이터 분석 을 위해 세 개의 Tab 를 포함 합 니 다.다음 그림 에서 보 듯 이 App 의 더 많은 정 보 를 볼 수 있 습 니 다.

    그 중에서 레이 블 이 대표 하 는 의 미 는:
  • 레이 블 1:System Stats 그룹 은 화면 밝기 등 시스템 등급 의 데 이 터 를 포함 합 니 다.이 란 은 시스템 이 발생 하 는 전체적인 상황 을 보 여 주 며 외부 영향 사건 이 있 는 지 테스트 할 수 있 습 니 다.
  • 레이 블 2:App Stats 그룹 은 지 정 된 앱 에 대한 상세 한 정 보 를 포함 합 니 다.
  • 레이 블 3:서로 다른 분류 기준 에 따라 APP 를 정렬 할 수 있다.
  • 레이 블 4:드 롭 다운 목록 에서 지정 한 앱 을 선택 한 후 App Stats 에서 구체 적 인 정 보 를 볼 수 있 습 니 다.App Stats 는 선택 한 App 에서 발생 하 는 데 이 터 를 보 여 주 며 외부 요소 의 영향 을 받 지 않 습 니 다.
  • 다음은 바 이 두 앱 애플 리 케 이 션 의 데 이 터 를 살 펴 보고 오른쪽 에서 해당 하 는 앱 을 선택 하면 왼쪽 에 현재 앱 의 전력,네트워크 등 상황 을 보 여 준다.

    2.4.bugreport 파일 분석
    앞 에는 Battery History 를 통 해 bugreport 의 파일 을 분석 하 였 습 니 다.만약 우리 가 스스로 분석 하고 싶다 면?따라서 bugreport 의 파일 내용 을 알 아 볼 필요 가 있 습 니 다.
    전력 통계 정보 시작,reset 시간,프로 세 스 정보 등 포함

    다음은 지난번 충전 후의 데이터 통계 입 니 다.

    각 앱 의 전력 사용량 은 Uid 를 통 해 앱 을 표시 합 니 다.

    키워드 아래 의 키 워드 를 통 해 관련 정 보 를 찾 을 수 있다.
    DUMP OF SERVICE 
    이 키 워드 를 통 해 와 이 파이,인터넷,activities 등의 정 보 를 찾 을 수 있다.
    이상 은 Battery Historian 을 통 해 안 드 로 이 드 애플 리 케 이 션 의 전력 소모 상황 을 분석 하 는 상세 한 내용 입 니 다.Battery Historian 안 드 로 이 드 애플 리 케 이 션 의 전력 소모 상황 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

    좋은 웹페이지 즐겨찾기