Android CPU性能测试

简介: 在经典的性能问题中,一般我们会说两种问题:一种是I/O密集型问题,另外一种就是CPU密集型的问题,今天我就来聊聊如何测试Android应用的 CPU性能。

原理


CPU的问题一般分为以下三类:


1、CPU资源冗余使用:

关于这个问题的原因,可能是算法太烂,明明可以只遍历一次却遍历了两次,主要出现在查找、排序、删除等环节;也可能是没有用缓存,明明解码过一次的图片还重复解码;还有就是明明使用int就足够,偏偏要用long,导致CPU的运算压力多出4倍。


2、CPU资源争抢:

  • 抢主线程的CPU资源;这是最常见的问题,关键是主线程起码在Android 6.0版之前,没有renderthread的时候,其繁忙程度就决定了是否会引发用户的卡顿问题。
  • 抢音视频的CPU资源;跟主线程的情况不同,音视频编解码本身就消耗了大量的CPU资源,同时音视频编解码对于解码的速度是有硬要求的,达不到就会有产生播放流畅度的问题。
  • 大家平等,相互抢,比如你开了20个线程做图片解码,那就是相互抢,最终效果就是导致图片的显示速度非常慢。


3、CPU资源利用率低:

CPU就是速度与负载的博弈,用得多会耗电、会卡顿,用得少也会有问题,像启动、界面切换、音视频编解码这些场景,为了保证其速度,不好好利用CPU,真对不起核心数的不断飙升。而导致无法充分利用CPU的因素,除了磁盘和网络I/O外,还有锁操作、sleep等。其中锁的优化,一般在锁的范围上,主要是尽可能地缩减范围。


方案


下面重点讲一下做CPU性能测试过程中的采集方法:


1、top命令

adb shell top | grep 包名

top命令大家应该是非常熟悉的了,依靠adb shell top就可以简单地列出进程的各种信息,缺点就是top本身的性能消耗就不少,所以我们在自动化测试里面的取值,一般不用top。

2、proc下的CPU信息

cat /proc/[pid]/stat

Google 在Android Monitor工具中收集CPU的方法也是采用这种方式,这种方式的原理跟top相似,但性能损耗要小很多,建议自动化测试采用这种方式,下面是命令返回字段的说明:

image.png

获取应用pid:

adb shell ps | grep 包名 | awk '{print $2}' | sed -n 1p


计算应用进程的总CPU时间:

utime + stime + cutime + cstim
adb shell cat /proc/[pid]/stat | awk '{print $14+$15+$16+$17}'

计算CPU总时间:

微信图片_20220519000400.png

对应的指标分别是:user + nice+ system+ idle+ iowait+ irq+ softirq
一段时间内应用进程CPU使用率:(进程CPU总时间2-进程CPU总时间1) / (CPU总时间2-CPU总时间1) * 100%

3、dumpsys cpuinfo

adb shell dumpsys cpuinfo | grep 包名

这种方式虽然比top更简洁,但是准确性没有top高。

相关实践学习
通过性能测试PTS对云服务器ECS进行规格选择与性能压测
本文为您介绍如何利用性能测试PTS对云服务器ECS进行规格选择与性能压测。
相关文章
|
2月前
|
监控 安全 Android开发
【新手必读】Airtest测试Android手机常见的设置问题
【新手必读】Airtest测试Android手机常见的设置问题
|
5月前
|
缓存 测试技术 数据中心
【计算机架构】计算 CPU 动态功耗 | 集成电路成本 | SPEC 基准测试 | Amdahl 定律 | MIPS 性能指标
【计算机架构】计算 CPU 动态功耗 | 集成电路成本 | SPEC 基准测试 | Amdahl 定律 | MIPS 性能指标
249 0
|
1月前
|
存储 Android开发 C++
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
【Android 从入门到出门】第五章:使用DataStore存储数据和测试
30 3
|
1月前
|
存储 SQL 数据库
【Android 从入门到出门】第六章:使用Room数据库并测试
【Android 从入门到出门】第六章:使用Room数据库并测试
29 4
|
2月前
|
监控 测试技术 Shell
APP的CPU,内存和流量如何测试?
APP的CPU,内存和流量如何测试?
|
2月前
|
Java 测试技术 API
安卓APP和iOS APP在测试上的区别是什么?
安卓APP和iOS APP在测试上的区别是什么?
|
4月前
|
XML Java API
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
Android App开发之创建JNI接口获取CPU指令集讲解及实战(附源码 简单易懂)
39 0
|
4月前
|
Linux 网络安全 开发工具
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
Android APP入门之Android的简介以及Android Studio开发环境的搭建和测试(2022最新 图文解释 简单易懂)
62 0
|
4月前
|
Java 测试技术 持续交付
百度搜索:蓝易云【NetMock简介:简化 Java,Android和Kotlin多平台中的HTTP请求测试?】
使用NetMock,您可以在单元测试、集成测试和端到端测试中轻松地模拟和验证HTTP请求和响应,而无需实际发送请求到外部服务。这样可以提高测试的可靠性和可控性,并加快测试执行的速度。无论是在开发过程中还是在持续集成环境中,NetMock都可以帮助您更轻松地进行HTTP请求测试,提高代码质量和稳定性。
41 1
|
4月前
|
移动开发 Shell 测试技术
Realtek蓝牙Android10.0移植结束后的基本测试和常见问题分析
Realtek蓝牙Android10.0移植结束后的基本测试和常见问题分析