render_time = 67 vsync_overtime = 4
一次命令执行获得的fps = int( frame_count * 60 / (frame_count + vsync_overtime_sum))
还有一个命令是: adb shell dumpsys SurfaceFlinger --latency LayerName
这个命令能获取游戏/视频应用的fps数据其中LayerName在各个不同系统中获取的命令是不一样的
在Android 6系统直接就是SurfaceView
在Android 7系统中可以通过 dumpsys window windows | grep mSurface | grep SurfaceView 然后通过数据截取到
在Android 8系统中可以通过 dumpsys SurfaceFlinger | grep android包名获取到
执行命令结果如下:

文章插图
计算方法比较简单,一般打印出来的数据是129行(部分机型打印两次257行,但是第一部分是无效数据,取后半部分),取len-2的第一列数据为end_time,取len-128的第一列数据为start_time
fps = 127/((end_time - start_time) / 1000000.0)
至于为啥要取第一列数据,这里不做过多介绍,欢迎参看这两篇文章
老罗的文章SurfaceView原理
Android性能测试之fps获取
至于为啥要处于1000000,因为命令打印出来的是纳秒单位,要转为毫秒进行计算,127就是因为命令一次打印出来127帧的数据而已
adb CPU占用率数据采集有两种方法可以获取
1) adb shell "top -n 5 | grep <package | pid>",第三列就是实时监控的CPU占用率(-n 指定执行次数,不需root权限),这边top命令执行需要2到3s左右,一般可以采用busybox 的top命令执行,效率会快很多

文章插图
2) adb shell "dumpsys cpuinfo | grep <package | pid>"
两种方法直接区别在于,top是持续监控状态,而dumpsys cpuinfo获取的实时CPU占用率数据
adb 耗电量数据采集adb命令:adb shell "dumpsys batterystats < package | pid>" (Android 5.0后引入)
获取单个应用的耗电量信息,具体返回结果待研究
adb命令:adb shell "dumpsys battery"
出现信息解读:
AC powered:false 是否连接AC(电源)充电线
USB powered:true 是否连接USB(PC或笔记本USB插口)充电
Wireless powered:false 是否使用了无线电源
status: 1 电池状态,2为充电状态,其他为非充电状态
level:58 电量(%)
scale: 100. 电量最大数值
voltage: 3977 当前电压(mV)
current now: -335232. 当前电流(mA)
temperature:355 电池温度,单位为0.1摄氏度
technology:Li-poly. 电池种类

文章插图
adb 采集流量数据adb 命令:adb shell "dumpsys< package | pid> | grep UID" [通过ps命令,获取app的UID(安装后唯一且固定)]
adb shell cat /proc/uid_stat/UID/tcp_rcv [cat为查看命令,读取tcp_rcv获取应用接收流量信息(设备重启后清零)]
adb shell cat /proc/uid_stat/UID/tcp_snd [cat为查看命令,读取tcp_snd获取应用发送流量信息(设备重启后清零)]
计算流量消耗步骤:
- 执行一次这两条命令,获取到应用的开始接收及发送的流量
- 然后我们再操作应用,执行一段时间测试
- 再次执行上述 2 条命令可以获取到应用结束时候的接收及发送的流量,通过相减及得到应用的整体流量消耗
- 首先获取应用固定uid
dumsys package android包名 | grep userId - 执行cat /proc.NET/xt_qtaguid/stats | grep uid

文章插图
其中第6列代表rx_bytes接收的字节数,第8列为tx_bytes发送的字节数
一个uid可能对应多个进程,把数据累加就行
两个时间片中间应用流量的消耗,就计算接收字节数的差值就行
cat /sys/class/thermal/thermal_zone*/type

文章插图
只有红框框出来的是有效的
cat /sys/class/thermal/thermal_zone*/temp
获取CPU温度
推荐阅读
- 使用 Redpanda、Quarkus 和 Testcontainers 进行本地开发
- 一级方程式|F1车手坐什么车“下班” 实拍退场:本田、沃尔沃成最大赢家
- 宝马|比汽车拔河还壮观!路虎、宝马当街“顶牛”:猜谁赢了
- 中医必须遵循看、听、问的原则
- 屏幕|荣耀X40屏幕揭晓:居中单孔、十亿色OLED曲屏
- 通信运营商|国内第四大运营商!中国广电App已上架:支持选号、查询、缴费
- rogressBar、SeekBar以及RatingBar的使用
- |宽度减半、焕然一新,黄花梨收藏中少有的桌型
- 京东|2022中国民营企业500强榜单公布:京东营收近万亿夺冠、华为第五
- 阿里巴巴|9月起,省考、国考、事业单位招聘开启,家有考生重视一下!
