Android电池功耗BatteryHistorian数据分析
16lz
2021-01-25
- BatteryHistorian的用法
BatteryHistorian环境搭建配置
官方文档
1.BatteryHistorian图形页面数据分析:
Timeline:
System stats:
CPU runing: cpu运行的状态 Kernel only uptime: 只有kernell运行Userspace wakelock: 用户空间申请的锁 Screen: 屏幕是否点亮 Top app: 当前在内存中的应用,按内存占用率排序 Activity Manager Proc: 活跃的用户进程 Crashes(logcat): 某个时间点出现crash的应用 Doze: 是否进入doze模式 Device active: 和Doze相反 JobScheduler: 异步作业调度 SyncManager: 同步操作 Temp White List: 电量优化白名单 Phone call: 是否打电话 GPS: 是否使用GPS Network connectivity: 网络连接状态(wifi、mobile是否连接) Mobile signal strength: 移动信号强度(great\good\moderate\poor) Wifi scan: 是否在扫描wifi信号 Wifi supplicant: 是否有wifi请求 Wifi radio: 是否正在通过wifi传输数据 Wifi signal strength: wifi信号强度 Wifi running: wifi组件是否在工作(未传输数据) Wifi on: 同上 Audio: 音频子系统? Camera: 相机是否在工作 Video:是否在播放视频 Foreground process: 前台进程 Package install: 是否在进行包安装 Package active: 包管理在工作 Battery level: 电池当前电量 Temperature: 电池温度 Plugged: 连接usb或者充电 Charging on: 在充电 Logcat misc: 是否在导出日志
2.BatteryHistorian日志数据分析:
使用命令 adb shell dumpsys batterystats > batterystats.txt 获取电池状态的日志.
亮屏和灭屏的基本信息:
Statistics since last charge: System starts: 0, currently on battery: false // 手机重启次数: 0,当前是否正在使用电池:false Estimated battery capacity: 3050 mAh // 预计电池容量 Min learned battery capacity: 3119 mAh Max learned battery capacity: 3119 mAh Time on battery: 21h 22m 29s 526ms (96.7%) realtime, 6h 53m 53s 974ms (32.3%) uptime // 电池状态下运行时间(realtime)、电池状态下运行时间未待机时间(uptime) Time on battery screen off: 16h 5m 28s 928ms (75.3%) realtime, 1h 36m 53s 326ms (7.6%) uptime // 电池状态下灭屏时间(realtime)、电池状态下灭屏未待机时间(uptime) Time on battery screen doze: 0ms (0.0%) // 在Doze模式下,电池的使用时间 Total run time: 22h 6m 3s 553ms realtime, 7h 37m 28s 2ms uptime // 总运行时间(包含充电) Discharge: 2766 mAh // 放电量(总使用电量) Screen off discharge: 844 mAh // 灭屏状态下的放电量 Screen doze discharge: 0 mAh // 休眠模式下的放电量 Screen on discharge: 1923 mAh // 亮屏状态下的放电量 Device light doze discharge: 446 mAh // 浅度休眠模式下耗电量 Device deep doze discharge: 219 mAh // 深度休眠模式下耗电量 Start clock time: 2019-05-14-18-13-53 Screen on: 5h 17m 0s 598ms (24.7%) 95x, Interactive: 5h 17m 52s 227ms (24.8%) Screen brightnesses: // 背光状态的占比 dark 2h 30m 40s 488ms (47.5%) dim 2h 45m 25s 856ms (52.2%) medium 42s 991ms (0.2%) bright 11s 263ms (0.1%) Device light idling: 7h 1m 17s 487ms (32.8%) 31x Idle mode light time: 6h 58m 40s 432ms (32.6%) 62x -- longest 20m 54s 932ms Device full idling: 5h 59m 49s 245ms (28.1%) 1x Idle mode full time: 5h 58m 49s 89ms (28.0%) 3x -- longest 3h 20m 44s 788ms Connectivity changes: 92 Total full wakelock time: 8m 42s 844ms Total partial wakelock time: 29m 57s 633ms
realtime:正常流逝的时间,通常把这个时间叫做“墙上时间(walltime)”,就像挂在墙上的时钟一样,走过了一小时就是小时uptime:CPU工作的时间。“墙上时间”经过一小时,但CPU可能就工作了一分钟,其他时间CPU都在休眠这两个时间结合在一起,就能够知道休眠率: (realtime-uptime)/realtime,既手机休眠的时间占整个待机时间的比率。休眠率越高,就表明越省电
耗电排行
Estimated power use (mAh): Capacity: 3200, Computed drain: 2927, actual drain: 2848-2912 // 电池容量 3200,计算耗电 2927,实际耗电 2848-2912 Screen: 782 Excluded from smearing // 屏幕耗电 Uid u0a173: 351 ( cpu=46.8 wake=0.813 radio=267 wifi=33.7 sensor=0.000569 camera=2.37 ) Including smearing: 700 ( screen=187 proportional=162 ) //一个Uid的耗电量,可以理解为一个应用的耗电量,括号里面为具体的模块 Uid 1000: 248 ( cpu=213 wake=0.411 radio=30.9 wifi=3.01 gps=0.441 sensor=0.409 camera=0.0327 ) Excluded from smearing Cell standby: 207 ( radio=207 ) Excluded from smearing // 射频待机的耗电量 Uid u0a153: 139 ( cpu=18.6 wake=0.309 radio=113 wifi=6.85 gps=0.0293 sensor=0.288 ) Including smearing: 303 ( screen=93.4 proportional=70.3 ) Uid 0: 133 ( cpu=83.1 wake=5.43 radio=42.5 wifi=2.33 ) Excluded from smearing Uid u0a71: 133 ( cpu=0.373 wake=0.00817 radio=130 wifi=3.13 ) Including smearing: 174 ( proportional=40.3 ) Uid u999a173: 108 ( cpu=3.38 wake=0.381 radio=103 wifi=2.04 ) Including smearing: 141 ( proportional=32.8 ) Uid u0a214: 96.1 ( cpu=12.6 wake=0.000575 radio=67.0 wifi=16.5 ) Including smearing: 612 ( screen=374 proportional=142 ) Uid u0a192: 84.6 ( cpu=0.381 radio=84.3 ) Including smearing: 110 ( proportional=25.6 ) Phone calls: 82.6 Including smearing: 108 ( proportional=25.0 ) Uid 1051: 67.0 ( radio=63.6 wifi=3.35 ) Excluded from smearing Uid u0a194: 48.7 ( cpu=19.8 wake=0.00325 radio=26.6 wifi=0.793 gps=1.49 sensor=0.000107 ) Including smearing: 73.2 ( screen=7.52 proportional=17.0 ) Uid u0a122: 41.5 ( cpu=1.89 wake=0.00122 radio=38.9 wifi=0.153 gps=0.547 sensor=0.00720 ) Including smearing: 56.5 ( screen=1.89 proportional=13.1 ) Uid u0a135: 38.4 ( cpu=6.32 wake=0.00000135 radio=32.1 gps=0.00303 sensor=0.000966 ) Including smearing: 56.0 ( screen=4.59 proportional=13.0 ) Idle: 33.6 Excluded from smearing Uid u0a62: 33.1 ( cpu=2.42 wake=0.000138 radio=25.9 wifi=4.79 ) Including smearing: 43.1 ( proportional=10.0 ) Bluetooth: 28.5 ( cpu=0.789 wake=0.0176 radio=0.857 bt=26.9 ) Including smearing: 37.2 ( proportional=8.63 ) Uid u0a250: 25.6 ( cpu=4.81 wake=0.0000744 radio=16.9 wifi=3.83 gps=0.132 sensor=0.000870 ) Including smearing: 41.6 ( screen=6.29 proportional=9.65 ) Uid u0a45: 22.7 ( cpu=1.87 radio=12.5 wifi=8.28 sensor=0.00936 ) Including smearing: 46.9 ( screen=13.3 proportional=10.9 ) Uid u0a182: 21.2 ( cpu=4.41 wake=0.0000541 radio=9.30 wifi=7.51 sensor=0.0162 ) Including smearing: 56.8 ( screen=22.4 proportional=13.2 ) Uid u0a187: 20.9 ( cpu=0.361 wake=0.000852 radio=20.3 gps=0.247 sensor=0.00335 ) Including smearing: 47.1 ( screen=15.3 proportional=10.9 ) Uid u0a74: 16.3 ( cpu=0.211 wake=0.0000162 radio=15.2 wifi=0.873 ) Including smearing: 21.2 ( proportional=4.92 ) Uid u0a147: 15.9 ( cpu=1.33 wake=0.00706 radio=7.81 wifi=2.94 sensor=3.86 ) Including smearing: 20.8 ( proportional=4.82 ) Uid u0a155: 13.7 ( cpu=0.444 wake=0.000436 radio=12.4 wifi=0.873 gps=0.0121 ) Including smearing: 17.8 ( proportional=4.14 ) Uid u0a101: 13.2 ( cpu=0.142 radio=13.0 wifi=0.0579 ) Including smearing: 17.2 ( proportional=4.00 ) Uid u0a79: 11.9 ( cpu=0.430 wake=0.000465 radio=9.49 wifi=1.97 ) Including smearing: 15.5 ( proportional=3.59 ) Uid u0a108: 10.0 ( cpu=0.153 wake=0.000212 radio=9.44 wifi=0.452 ) Including smearing: 13.1 ( proportional=3.04 ) Uid u0a60: 9.83 ( cpu=0.105 radio=9.25 wifi=0.474 ) Including smearing: 12.8 ( proportional=2.97 ) Uid 1001: 9.63 ( cpu=9.08 wake=0.343 sensor=0.206 ) Excluded from smearing Wifi: 6.76 ( cpu=0.931 wifi=5.83 ) Including smearing: 8.80 ( proportional=2.04 ) Uid u0a172: 6.16 ( cpu=1.46 wake=0.0000135 wifi=4.70 sensor=0.000958 ) Including smearing: 13.9 ( screen=4.51 proportional=3.23 ) Uid u0a129: 5.93 ( cpu=0.460 radio=3.89 gps=1.57 sensor=0.0147 ) Including smearing: 11.8 ( screen=3.10 proportional=2.73 ) Uid u0a203: 5.23 ( cpu=0.506 radio=4.72 sensor=0.00165 ) Including smearing: 10.2 ( screen=2.63 proportional=2.38 ) Uid u0a249: 5.11 ( cpu=0.757 wifi=4.34 gps=0.0105 sensor=0.00000024 ) Including smearing: 15.8 ( screen=7.06 proportional=3.68 ) Uid u0a76: 4.36 ( cpu=0.764 wake=0.00235 radio=1.10 wifi=2.49 ) Including smearing: 9.87 ( screen=3.22 proportional=2.29 ) Uid u0a31: 4.02 ( cpu=0.226 wake=0.000110 radio=3.73 wifi=0.0644 ) Including smearing: 5.46 ( screen=0.179 proportional=1.27 ) Uid u0a82: 3.90 ( cpu=0.281 wake=0.00000271 radio=2.61 wifi=1.01 ) Including smearing: 5.07 ( proportional=1.18 ) Uid u0a34: 3.64 ( cpu=0.0733 radio=3.55 wifi=0.0103 ) Including smearing: 4.76 ( screen=0.0168 proportional=1.10 )
内核唤醒锁排名
All kernel wake locks: Kernel Wake lock PowerManagerService.WakeLocks : 29m 18s 215ms (3810 times) realtime Kernel Wake lock wlan : 8m 22s 906ms (591 times) realtime Kernel Wake lock IPA_RM12 : 7m 32s 860ms (2288 times) realtime Kernel Wake lock IPA_WS : 5m 48s 166ms (6539 times) realtime Kernel Wake lock [timerfd]-system_server : 5m 28s 437ms (10013 times) realtime Kernel Wake lock radio-interface : 4m 32s 349ms (1336 times) realtime Kernel Wake lock NETLINK-hvdcp_opti : 4m 30s 9ms (346090 times) realtime Kernel Wake lock 898000.qcom,qup_uart : 4m 23s 210ms (228 times) realtime Kernel Wake lock hal_bluetooth_lock : 4m 23s 159ms (221 times) realtime Kernel Wake lock NETLINK-healthd : 4m 4s 226ms (360071 times) realtime Kernel Wake lock alarmtimer : 3m 47s 713ms (112 times) realtime Kernel Wake lock 1-0028 : 2m 54s 820ms (82 times) realtime Kernel Wake lock qcom-step-chg : 2m 44s 124ms (164 times) realtime Kernel Wake lock fpc_ttw_wl : 2m 41s 180ms (78 times) realtime Kernel Wake lock GPSD : 2m 16s 566ms (103 times) realtime Kernel Wake lock qcom_rx_wakelock : 1m 56s 94ms (1721 times) realtime Kernel Wake lock PowerManagerService.Display : 1m 39s 996ms (45 times) realtime Kernel Wake lock ipc00000079_1318_NasModemEndPoi : 56s 780ms (5098 times) realtime Kernel Wake lock PowerManagerService.Broadcasts : 39s 787ms (170 times) realtime Kernel Wake lock netmgr_wl : 35s 468ms (2272 times) realtime Kernel Wake lock ipc000000e7_1258_netmgrd : 34s 110ms (1235 times) realtime Kernel Wake lock ipc000000e6_1258_netmgrd : 32s 469ms (1238 times) realtime Kernel Wake lock ipc000000b1_1449_DataModule-Loo : 30s 843ms (1300 times) realtime Kernel Wake lock prim_panel_wakelock : 19s 552ms (77 times) realtime Kernel Wake lock wlan_pno_wl : 16s 921ms (23 times) realtime Kernel Wake lock batteryd : 16s 120ms (205469 times) realtime Kernel Wake lock ipc000000d7_1258_netmgrd : 15s 831ms (1043 times) realtime Kernel Wake lock SensorService_wakelock : 15s 22ms (5205 times) realtime Kernel Wake lock vdev_start : 14s 499ms (17 times) realtime Kernel Wake lock CHG_PLCY_MAIN_WL : 7s 424ms (205496 times) realtime Kernel Wake lock cne_voice_ind_handler_wl_ : 6s 726ms (4 times) realtime Kernel Wake lock bluetooth_timer : 6s 348ms (1101 times) realtime
batterystats会从/proc/wakelocks和/d/wakeup_sources这两个文件中读取内核的持锁情况.
如果有内核持锁,CPU就无法休眠.如果持锁频率高会严重影响耗电量
一般打游戏、看视频、灭屏听音乐、后台下载等场景需要向框架层的PowerManagerService申请和释放Wake Lock,再由框架层决策是否向内核申请锁,而应用是不能直接使用内核锁的.应用可以持有多个不同的锁,但反应到内核的锁也就三种:
PowerManagerService.WakeLocks:控制CPU状态的锁PowerManagerService.Display: 控制屏幕状态的锁PowerManagerService.Broadcasts:控制电源状态改变的通知锁
应用持锁排行
All partial wake locks: Wake lock u0a173 PlatformComm: 5m 10s 160ms (844 times) max=19868 actual=556488 realtime Wake lock u0a153 *job*/com.taobao.taobao/androidx.work.impl.background.systemjob.SystemJobService: 3m 48s 384ms (0 times) max=123890 actual=238396 realtime Wake lock 1001 RILJ_ACK_WL: 3m 47s 232ms (1309 times) max=700 actual=274575 realtime Wake lock 1000 deviceidle_maint: 3m 24s 597ms (33 times) max=30077 actual=217225 realtime Wake lock u999a173 PlatformComm: 3m 20s 891ms (566 times) max=15024 actual=348648 realtime Wake lock u0a173 MicroMsg.MMAutoAuth: 2m 37s 438ms (448 times) max=1119 actual=367878 realtime Wake lock u0a173 StnCallBack: 1m 24s 174ms (228 times) max=1083 actual=219430 realtime Wake lock u0a8 ProximitySensor: 58s 872ms (0 times) max=66135 actual=79030 realtime Wake lock u999a173 MicroMsg.MMAutoAuth: 44s 519ms (164 times) max=1090 actual=128941 realtime Wake lock 1000 GnssLocationProviderXtraDownload: 27s 734ms (1 times) max=27349 actual=28155 realtime Wake lock u0a173 MicroMsg.SyncService: 20s 333ms (241 times) max=1445 actual=55921 realtime Wake lock 1000 *alarm*: 16s 213ms (448 times) max=149 actual=20803 realtime Wake lock 1000 IpReachabilityMonitor.wlan0: 15s 439ms (5 times) max=3510 actual=20437 realtime Wake lock 1001 *telephony-radio*: 15s 427ms (2326 times) max=357 actual=33662 realtime Wake lock u0a173 MicroMsg.Alarm: 14s 614ms (127 times) max=294 actual=29647 realtime Wake lock 1002 StartingObexPbapTransaction: 13s 27ms (2 times) max=10097 actual=16590 realtime Wake lock u999a173 MicroMsg.Alarm: 12s 726ms (121 times) max=256 actual=27864 realtime Wake lock 1000 show keyguard: 12s 31ms (75 times) max=408 actual=20887 realtime Wake lock 1041 AudioMix: 11s 712ms (5 times) max=3027 actual=21331 realtime Wake lock 1000 ActivityManager-Sleep: 9s 399ms (75 times) max=582 actual=14011 realtime Wake lock u999a173 MicroMsg.CoreService: 9s 63ms (11 times) max=5596 actual=46177 realtime Wake lock u0a173 MicroMsg.CoreService: 9s 32ms (11 times) max=5624 actual=45980 realtime Wake lock 1000 AnyMotionDetector: 6s 483ms (1 times) max=9939 actual=9939 realtime Wake lock u999a173 MicroMsg.SyncService: 6s 200ms (31 times) max=10192 actual=19885 realtime Wake lock 1001 GsmInboundSmsHandler: 4s 704ms (1 times) max=5015 actual=5015 realtime Wake lock 1001 QcrilOemhookMsgTunnel: 4s 613ms (1453 times) max=42 actual=5475 realtime Wake lock u0a173 *alarm*: 3s 829ms (233 times) max=793 actual=5019 realtime
RIJ:通信上层需要向Modem发送数据时,会获取名为RIJ的锁RILJ_ACK_WL:通信上层收到Modem上报的数据后,需要向Modem回复一个ACK,此时会获取名为RILJ_ACK_WL的锁NetworkStats:进行流量统计时所持有的锁*walarm*或者*alarm*: 通过AlarmManager唤醒所持有的锁*job*/xxx:通过JobScheduler调度的任务所持有的锁*vibrator*:在震动状态下所持有的锁deviceidle_maint:进入Doze Maintainace状态所持有的锁,此时,手机从深度睡眠中唤醒,用很短的时间执行之前被搁置的CPU任务
所有的唤醒原因
All wakeup reasons: Wakeup reason Abort:Wakeup IRQ detected during suspend: 101 qcom,glink-smem-native-xprt-modem: 20m 20s 773ms (2385 times) realtime Wakeup reason Abort:Wakeup IRQ detected during suspend: 663 qpnp_rtc_alarm: 4m 27s 362ms (645 times) realtime Wakeup reason Abort:Wakeup IRQ detected during suspend: 106 ipa: 1m 41s 245ms (362 times) realtime Wakeup reason Abort:Wakeup IRQ detected during suspend: 111 WLAN_CE_2: 2m 27s 527ms (305 times) realtime Wakeup reason Abort:Last active Wakeup Source: IPA_WS, handle process swapper/0: 2m 2s 869ms (160 times) realtime Wakeup reason Abort:Some devices failed to suspend, or early wake event detected: 2m 48s 320ms (124 times) realtime Wakeup reason Abort:Wakeup IRQ detected during suspend: 1011 dma-grant: 1m 20s 20ms (67 times) realtime Wakeup reason 469:: 3s 426ms (59 times) realtime Wakeup reason Abort:Pending Wakeup Sources: qcom_rx_wakelock, handle process cds_ol_rx_threa: 39s 743ms (46 times) realtime Wakeup reason Abort:Last active Wakeup Source: IPA_WS, handle process PowerManagerSer: 27s 42ms (38 times) realtime Wakeup reason Abort:Pending Wakeup Sources: wlan, handle process wpa_supplicant: 1m 11s 130ms (36 times) realtime Wakeup reason Abort:Wakeup IRQ detected during suspend: 999 msoc-delta: 17s 414ms (21 times) realtime Wakeup reason Abort:Last active Wakeup Source: qcom_rx_wakelock, handle process cds_ol_rx_threa: 21s 723ms (20 times) realtime Wakeup reason Abort:Pending Wakeup Sources: [timerfd]-system_server, handle process swapper/0: 13s 173ms (16 times) realtime Wakeup reason Abort:Pending Wakeup Sources: wlan, handle process cds_mc_thread: 18s 408ms (13 times) realtime Wakeup reason Abort:Pending Wakeup Sources: ipc00000079_1318_NasModemEndPoi, handle process mpss_IPCRTR: 13s 764ms (13 times) realtime Wakeup reason Abort:Pending Wakeup Sources: NETLINK-hvdcp_opti, handle process kworker/0:2NETLINK-healthd, handle process kworker/0:2: 8s 277ms (12 times) realtime Wakeup reason Abort:Last active Wakeup Source: IPA_WS, handle process kworker/u16:18: 8s 669ms (12 times) realtime Wakeup reason Abort:Last active Wakeup Source: IPA_WS, handle process kworker/u16:19: 6s 682ms (11 times) realtime Wakeup reason Abort:Last active Wakeup Source: IPA_WS, handle process kworker/u16:13: 7s 121ms (10 times) realtime Wakeup reason Abort:Last active Wakeup Source: IPA_WS, handle process kworker/u16:12: 8s 948ms (10 times) realtime Wakeup reason Abort:Pending Wakeup Sources: IPA_RM12, handle process kworker/u16:13: 7s 575ms (10 times) realtime Wakeup reason Abort:Pending Wakeup Sources: PowerManagerService.WakeLocks, handle process Binder:1231_15: 8s 902ms (10 times) realtime
应用耗电情况
u999a173: // 微信的apk的 UID Mobile network: 1.10MB received, 348.54KB sent (packets 2222 received, 2940 sent) Mobile radio active: 33m 18s 765ms (7.9%) 302x @ 387 mspp Mobile radio AP wakeups: 161 Cellular Sleep time: 0ms (0.0%) Cellular Idle time: 0ms (0.0%) Cellular Rx time: 24m 8s 58ms (1.9%) Cellular Tx time: less than 0dBm: 1m 22s 271ms (0.1%) 0dBm to 8dBm: 12ms (0.0%) 8dBm to 15dBm: 63ms (0.0%) 15dBm to 20dBm: 67ms (0.0%) above 20dBm: 28ms (0.0%) Wi-Fi network: 337.52KB received, 111.72KB sent (packets 670 received, 916 sent) WiFi AP wakeups: 17 WiFi Scan time: 0ms (0.0%) WiFi Sleep time: 21h 22m 27s 551ms (100.0%) WiFi Idle time: 0ms (0.0%) WiFi Rx time: 523ms (0.0%) WiFi Tx time: 1s 452ms (0.0%) Wake lock MicroMsg.MMAutoAuth: 44s 519ms partial (164 times) max=1090 actual=128941, 2m 8s 941ms background partial (164 times) max=1090 realtime Wake lock MicroMsg.CoreService: 9s 63ms partial (11 times) max=5596 actual=46177, 46s 177ms background partial (11 times) max=5596 realtime Wake lock *alarm*: 3s 575ms partial (215 times) max=237 actual=4178, 4s 178ms background partial (215 times) max=237 realtime Wake lock MicroMsg.NetSceneSynCheck: 1s 803ms partial (13 times) max=3037 actual=7173, 7s 173ms background partial (13 times) max=3037 realtime Wake lock PlatformComm: 3m 20s 891ms partial (566 times) max=15024 actual=348648, 5m 48s 648ms background partial (566 times) max=15024 realtime Wake lock MicroMsg.SyncService: 6s 200ms partial (31 times) max=10192 actual=19885, 19s 885ms background partial (31 times) max=10192 realtime Wake lock fiid-sync realtime Wake lock MicroMsg.Alarm: 12s 726ms partial (121 times) max=256 actual=27864, 27s 864ms background partial (121 times) max=256 realtime Wake lock StnCallBack: 2s 981ms partial (18 times) max=1078 actual=18802, 18s 802ms background partial (18 times) max=1078 realtime TOTAL wake: 4m 41s 758ms blamed partial, 6m 4s 179ms actual partial, 6m 4s 179ms actual background partial realtime Background for: 21h 22m 29s 526ms Total running: 21h 22m 29s 526ms Total cpu time: u=2m 15s 813ms s=50s 91ms Proc com.tencent.mm:tools: CPU: 9s 90ms usr + 2s 290ms krn ; 0ms fg 1 starts Proc *wakelock*: CPU: 8s 533ms usr + 9s 251ms krn ; 0ms fg Proc com.tencent.mm: CPU: 1m 12s 820ms usr + 21s 300ms krn ; 0ms fg Proc com.tencent.mm:push: CPU: 35s 620ms usr + 15s 320ms krn ; 0ms fg Proc com.tencent.mm:sandbox: CPU: 3s 300ms usr + 960ms krn ; 0ms fg 4 starts Apk com.tencent.mm: Wakeup alarm *walarm*:ALARM_ACTION(11119): 121 times Wakeup alarm *walarm*:com.tencent.mm/.booter.MMReceivers$AlarmReceiver: 65 times Service com.tencent.mm.service.ProcessService$SandBoxProcessService: Created for: 0ms uptime Starts: 0, launches: 4 Service com.tencent.mm.remoteservice.RemoteService: Created for: 0ms uptime Starts: 0, launches: 1 Service com.tencent.mm.ipcinvoker.wx_extension.service.MainProcessIPCService: Created for: 0ms uptime Starts: 0, launches: 1 Service com.tencent.mm.ipcinvoker.wx_extension.service.ToolsProcessIPCService: Created for: 0ms uptime Starts: 0, launches: 1 Service com.tencent.mm.plugin.wepkg.ipc.WepkgMainProcessService: Created for: 0ms uptime Starts: 0, launches: 1
射频模块(Radio Modem)的耗电统计,在使用数据网络时,就需要用到这个模块
Cellular Statistics: Cellular kernel active time: 4h 21m 2s 319ms (28.0%) // 射频模块的kernel层活跃时间 Cellular data received: 157.34MB // 数据收发的大小和数据包的个数 Cellular data sent: 15.43MB Cellular packets received: 114831 Cellular packets sent: 102118 // 数据收发的大小和数据包的个数 Cellular Radio Access Technology: // 接入的网络类型(none未插卡、umts、hspa、lte、hspap等) none 1m 33s 860ms (0.2%) lte 14m 23s 982ms (1.5%) lte_ca 15h 16m 7s 722ms (98.3%) Cellular Rx signal strength (RSRP): // 信号强度.如果长时间信号不好,射频模块会提高功率,从而引起更大的耗电 great (greater than -98dBm): 6m 42s 442ms (0.7%) Cellular Sleep time: 10h 5m 55s 865ms (65.0%) // 射频模块处于休眠、空闲、接收数据、发送数据这几种不同状态下的时间 Cellular Idle time: 1d 19h 45m 15s 59ms (281.7%) Cellular Rx time: 5h 20m 21s 445ms (34.4%) Cellular Tx time: less than 0dBm: 2s 202ms (0.0%) 0dBm to 8dBm: 683ms (0.0%) 8dBm to 15dBm: 559ms (0.0%) 15dBm to 20dBm: 716ms (0.0%) above 20dBm: 747ms (0.0%)
- android电量统计概述
android的电池功耗统计都是通过代码估算,没有集成电路参与汇报.是通过power_profile.xml配置中各器件的状态与之对应的电流消耗来统计得出.
路径: frameworks\base\core\res\res\xml\power_profile.xml - 100
- 150
- 250
- 25
- 5
- 3
- 200
- 100
- 100
- 50
- 160
- 550
- 50
- 200
- 10
13.8 12.2 11.6 10.2 9.6
在代码方面,硬件和软件的电量统计都是通过BatteryStatsHelper来统计
路径:frameworks\base\core\java\com\android\internal\os\BatteryStatsHelper.java private void processAppUsage(SparseArray asUsers) { final boolean forAllUsers = (asUsers.get(UserHandle.USER_ALL) != null); mStatsPeriod = mTypeBatteryRealtimeUs; 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, mRawRealtimeUs, mRawUptimeUs, mStatsType); mWakelockPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); mMobileRadioPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); mWifiPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); mBluetoothPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); mSensorPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); mCameraPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); mFlashlightPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); mMediaPowerCalculator.calculateApp(app, u, mRawRealtimeUs, mRawUptimeUs, mStatsType); final double totalPower = app.sumPower(); if (DEBUG && totalPower != 0) { Log.d(TAG, String.format("UID %d: total power=%s", u.getUid(), makemAh(totalPower))); } // Add the app to the list if it is consuming power. // ... ... } if (osSipper != null) { // The device has probably been awake for longer than the screen on // time and application wake lock time would account for. Assign // this remainder to the OS, if possible. mWakelockPowerCalculator.calculateRemaining(osSipper, mStats, mRawRealtimeUs, mRawUptimeUs, mStatsType); osSipper.sumPower(); } }
上述方式通过计算cpu、Wakelock(保持唤醒锁)、无线电(2G/3G/4G)、WIFI、蓝牙、传感器、相机、闪光灯、多媒体来统计APP的总功耗
更多相关文章
- android 简单实现 RecyclerView 下拉刷新上拉加载
- Android(安卓)获取当天零点的毫秒值并将时间格式化
- 自定义toast你需要的都在这里,单例模式,自定义布局,完全自定义,
- Android(安卓)时间为隔天的九点、并且跳过周末
- Android定时广播和定时服务两种实现方式
- android 定时打电话教程
- 从零开始学android:Android事件处理—监听日期与时间的改变
- 【Android休眠】之休眠锁的获取和释放
- android 获取程序的安装时间