Android 性能测试之 CPU 耗电性能篇

思路简介

现有的耗电性能测试,除了高端深入带着原理去测试的方法,大多数都是读取系统文件或采用工具获取整体手机电流值,这样的方法受影响的因素多,数据波动大,可信度不高,同时从开发角度说,告诉他一个简单的电流值,对他们定位问题的帮助,也不够。

图一 源码中计算APP耗电的逻辑

先简单看下Android源码,无需过于深入理解逻辑。在BatteryStatsHelper类中可以发现,某个App的耗电量值,来源于方法processAppUsage,其中包含CPU、wakeLock、移动网络、WiFi、蓝牙、传感器、摄像头、闪光灯等细分耗电量。通过以上分析:

“这个版本,WiFi管家耗电量高。”

就可以变成:

“这个版本,WiFi管家占用CPU时间片过高。”

“这个版本,WiFi管家单位时间收发网络流量过高。”

“……”

与此同时,CPU、wakeLock、移动网络耗电量等细分指标,则都可以成为测试人员关注的专项测试项。同时测试人员也可以根据自己业务团队重点关注的方向,设计对应的专项测试。

数据源

在linux中,使用cat /proc/pid/stat获取数据,其中第13、14位数据代表utime、stime。如下,这两个值代表pid进程从进程存活以来,在用户态运行的时间为:1587 jiffies,在内核态运行的时间10 jiffies。

utime=1587 该任务在用户态运行的时间,单位为jiffies

stime=10 该任务在核心态运行的时间,单位为jiffies

本方案,主要以这两个值为依托,输出APP耗电各场景下的耗电性能。

数据采集

首先设计一个基类,用于各类性能测试,包括本篇的CPU耗电,以及内存性能、UI流畅度等其他专项。主要用于统一化测试执行逻辑set_up()、tear_down()中的调用逻辑(都为start和stop)。

图二 性能测试基类

Jiffs的收集方案,在set_up()调用JiffsCollector实例的start()方法时,创建定时器1s后开始执行self.fun_get_jiffs。同样,在fun_get_jiffs中同样适用定时器每隔5s收集一次/proc/pid/stat中的utime、stime数据,同时计算这5s过程中,进程耗用的CPU时间( =current_utime – last_utime)。同时每收集一次数据,使用__write_line向文本中将本次计算结果写入csv文件。

图三 JIFFS性能数据收集具体逻辑

数据使用

获得单一进程的JIFFS数据后,使用如下表的平均值即可评估出一个特定UI自动化用例场景下,对应的每5秒 utime、stime是否有优化或者达标。

图四 平均值评估CPU耗电

但如上,获得333.10jiffs/5s这个不符合预期的之后,如何驱动开发去修改问题,似乎更加重要。开发复现测试的场景,相当于重走了测试同学的执行路径。所以如果测试多走一步,开发就可以少走两步。借助Android Device Monitor工具(Android Studio à Tools à Android àAndroid Device Monitor),我们可以获取到详细的Thread Jiffs数据。(Tips:DDMSThreads界面可以ctrl+a全选,ctrl+c复制到excel做排序)

图五 DDMS分析线程CPU占用

在黑盒性能自动化发现有进程有CPU耗电异常之后,使用DDMS分析debug包,一般可以找出几个耗电大头线程。同时使用refresh功能,又可以大致查看到该线程到底是运行在哪些方法上。

通过以上的分析,基本上可以为业务开发找到CPU耗电元凶。其实如果没有前述的黑盒UI自动化框架,测试在黑盒测试中如果感觉到应用总是会导致手机发烫,也可以去用DDMS关注下各个线程的CPU占用时间,找出Thread元凶给开发修改。

文章来源于:腾讯移动品质中心 TMQ

原创声明,本文系作者授权云+社区-专栏发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏ThoughtWorks

浅谈微服务基建的逻辑 | 洞见

这篇文章主要目的是面向初接触微服务的朋友简单介绍微服务基础建设所需要的各个模块以及缘由。 起点 首先,我们得有一个“服务”。根据定义,我们可以把每个服务实例都视...

3435
来自专栏织云平台团队的专栏

混合云管理问题,你解决了么?

本文将介绍织云是如何建设和使用命令通道解决混合云的服务器管理问题。

10.2K2
来自专栏Java架构

阿里前10大开源项目,致敬!

2696
来自专栏CSDN技术头条

如何优化让日志处理速达到 5万/s?

本文来自作者 jason 在 GitChat 上分享 「大数据项目性能优化实战分享」

895
来自专栏微服务

浅谈微服务基建的逻辑

这篇文章主要目的是面向初接触微服务的朋友简单介绍微服务基础建设所需要的各个模块以及缘由。 起点 首先,我们得有一个“服务”。根据定义,我们可以把每个服务实例都视...

36010
来自专栏码匠的流水账

2017年终总结

又到了写年终总结的时候了。每当这个时候思绪总是翻江倒海,因为太久没有反思和总结的缘故,一年才总结一次,确实是有点久,欠的账的太多,梳理起来有点费劲。这里依旧还是...

531
来自专栏微信公众号:Java团长

干货!一次kafka卡顿事故排查过程

由于一次功能上线后,导致某数据量急剧下滑,给我们紧张的呢!排查过程也是个学习过程!抛开结果,方法论可供参考~

612
来自专栏SDNLAB

SDN中的Segment Routing

作者简介:晏志文,原就职于中兴通讯,目前供职于安徽皖通邮电股份有限公司。数通测试专家,本领域从业深耕多年,熟悉传统网络技术及行业解决方案,密切关注新兴网络,IC...

964
来自专栏李鹏的专栏

架构师之路-创业互联网公司如何搭建自己的技术架构

本文主要针对中小型互联网公司,特别适用于手机APP或者pc的后台架构,基本可以支撑5万日活.本文会对可能用到的相关技术进行技术选型的说明,以及技术的架构介绍,技...

4840
来自专栏美团技术团队

美团金融扫码付静态资源加载优化实践

扫码付项目是美团金融智能支付团队面向 C 端消费者推出的一款 H5 融合支付类的产品,消费者在商家消费之后,可使用多种 App 进行扫码支付,同时可对商家进行评...

33011

扫码关注云+社区