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类似,只不过统计单位换成了真实时间

posted @ 2023-06-26 14:17  常疯大虾  阅读(765)  评论(0编辑  收藏  举报