android端CPU测试方法
Android端CPU测试方法
一.CPU测试实现原理:
通过UI自动化脚本,遍历所有场景
通过adb命令间隔2S获取一次数据,写入到文件中
通过脚本把数据绘制成曲线图,同时计算出整个过程中最大值
二.测试方法
1.手工
2.UI自动化
三.CPU测试选择场景
1. Activity页面
2. 新需求页面
3. 高频使用页面
四.环境准备
1.机型准备
覆盖低端、中端、高端机型
2.测试环境
应用自身的数据与上次相同
手机整体安装应用与上次相同
手机网络与上次相同
后台不能有其他运行的进程
五.测试通过标准
1.竞品对比
CPU占用率不能大于竞品
2.通用标准-绿色软件联盟
2.1后台亮屏CPU占用:
2.2后台灭屏CPU占用:
六.基本常识:
1. HZ
Linux核心每隔固定周期会发出timer interrupt (IRQ 0),HZ是用来定义每一秒有几次timer interrupts。举例来说,HZ为1000,代表每秒有1000次timer interrupts。
2. Tick
Tick是HZ的倒数,意即timer interrupt每发生一次中断的时间。如HZ为250时,tick为4毫秒(millisecond)
3. Jiffies
Jiffies为Linux核心变数(unsigned long),它被用来记录系统自开机以来,已经过了多少tick。每发生一次timer interrupt,Jiffies变数会被加一
另外,80x86架构定义一个与jiffies相关的变数jiffies_64 ,此变数64位元,要等到此变数溢位可能要好几百万年。因此要等到溢位这刻发生应该很难吧。
4.通过读取/proc/stat获取cpu整体的jiffies
adb shell cat /proc/stat
该手机cpu0-cpu7为8核,其中第一行数据cpu为手机整体cpu情况
从左到右显示数据为:user,nice, system, idle, iowait, irq, softirq
User: | 处于用户态的运行时间,不包含 nice值为负进程。 |
Nice: | nice值为负的进程所占用的CPU时间 |
system: | 处于核心态的运行时间 |
idle: | 除IO等待时间以外的其它等待时间 |
iowait: | IO等待时间 |
Irq: | 硬中断时间 |
softirq: | 软中断时间 |
total_delta_time = (new_cpu.utime + new_cpu.ntime + new_cpu.stime + new_cpu.itime + new_cpu.iowtime + new_cpu.irqtime + new_cpu.sirqtime) - (old_cpu.utime + old_cpu.ntime + old_cpu.stime + old_cpu.itime + old_cpu.iowtime + old_cpu.irqtime + old_cpu.sirqtime)
5.通过读取/proc/pid/stat获取process的jiffies
adb shell cat /proc/2197/stat
14-17左到右显示数据为:utime,stime, cutime, cstime
utime: 该进程处于用户态的时间,单位jiffies,此处等于519
stime: 该进程处于内核态的时间,单位jiffies,此处等于369
cutime:当前进程等待子进程的utime
cstime: 当前进程等待子进程的utime
total_delta_time = (new_cpu.utime + new_cpu.stime) - (old_cpu.utime + old_cpu.stime)
七.CPU测试方法
1.通过adb top命令监控
Top命令常用参数
-p 进程号
-u 用户名称
-n 显示多少行数据
-d 间隔多少秒获取一次数据
Top命令计算cpu公式:
processCPUrate=delta_time / total_delta_time * 100
1.1 获取应用包名
adb shell dumpsys window | findstr mCurrentFocus
1.2 通过包名获取pid
adb shell ps | findstr com.cubic.autohome
1.3 通过top命令实时监控cpu利用率
adb shell top -p 8971 –p 9621 –p 9181/ -u uo_a179
2.通过adb dumpsys cpuinfo监控
adb shell dumpsys cpuinfo | findstr com.douban.frodo
该方法用于获取cpu瞬时占有率,但是延迟较高
3.使用monitor监控
Incl Cpu Time 某函数占用的CPU时间,包含内部调用其它函数的CPU时间
Excl Cpu Time 某函数占用的CPU时间,但不含内部调用其它函数所占用的CPU时间
Incl Real Time 某函数运行的真实时间(以毫秒为单位),内含调用其它函数所占用的真实时间
Excl Real Time 某函数运行的真实时间(以毫秒为单位),不含调用其它函数所占用的真实时间
Call+Recur Calls/Total 某函数被调用次数以及递归调用占总调用次数的百分比
Cpu Time/Call 某函数调用CPU时间与调用次数的比。相当于该函数平均执行时间
Real Time/Call 同CPU Time/Call类似,只不过统计单位换成了真实时间