App性能测试工具——Perfdog
PerfDog简介
PerfDog是一个移动全平台Android/iOS
性能测试、分析工具。可以快速定位分析性能问题。手机无需ROOT
/越狱,手机硬件、游戏及应用APP也无需做任何修改,极简化即插即用。
功能特点
- 移动全平台:支持
Android/iOS
移动平台,如手机、iPad、Watch、Android
模拟器等。提供PerfDog
软件Windows & Mac
版本。 - 无需要Root越狱 :Android设备无需
ROOT
,iOS设备无需越狱。高效解决Android & iOS
性能测试分析难题。 - 数据准确性: 工具本身对测试设备
CPU
的性能影响<1%
,帧率无影响。保证了性能数据准确真实性。 - 数据完整性: 可提供截图、
FPS、Jank、FTime、CPU、GPU、Memory、Battery 、Network、CTemp
等性能参数,这些您都可以轻松获得。 - 应用广泛性: 支持所有APP应用、游戏、小程序、小游戏、H5、web等,性能测试一个就够了。
- 工具易用性:无需安装,即插即用,减少繁琐的测试障碍,让您的精力集中投入到测试分析中。
- 云端看板 :基于云端的看板,可以随时随地存储、可视化、编辑、管理和下载使用任何版本的
PerfDog
收集的所有测试数据。 - 团队合作:无论您的团队位于何处,您都可以随时创建任务、邀请团队成员加入、支持共享和查看团队完成情况,开启高效的协作模式。
安装运行
下载安装
登录PerfDog官网,根据您的PC平台选择想要下载的桌面应用程序
- Windows平台:解压下载包,双击打开
PerfDog.exe
桌面应用程序。 - Mac平台:直接运行
dmg
桌面应用程序。 PerfDog
采用免安装软件(绿色版)模式,想要更新软件则重新在官网下载最新版即可。
启动运行
- 安装完成之后,启动应用,可以看到登录界面如下图所示,为了后续方便Web端查看报告需要注册一个账户。
登录账户后即可看到Perfdog主界面
设备连接
Perfdog设备主要有两种连接方式:
- USB设备连接
- Wifi设备连接
USB连接
USB连接手机和PC
,Perfdog
将自动检测添加手机到设备列表中。
Android设备连接
Android设备连接有两种模式:
- 非安装模式
- 安装模式(请开启手机USB调试模式及允许USB应用安装)
非安装模式
手机即插即用,无需任何设置及安装,使用非常简单,但手机屏幕上没有实时性能数据显示。
安装模式
需要在手机上自动安装PerfDog.apk
,手机屏幕上有实时性能数据显示(允许USB
应用安装和PerfDog
悬浮窗管理权限),启动PC版PerfDog.exe
,则会在手机上自动PUSH
安装PerfDog.apk
,具体安装类似各个手机厂商安装第三方APP提示安装即可。
注意:
由于很多手机安装需要账号密码,导致无法自动安装,如果自动安装失败,则会把安装文件
PerfDog.apk
释放到当前文件夹里,手动安装PerfDog.apk
即可。此模式下在测试过程中,可能由于系统资源紧缺杀死PerfDog
手机应用进程,导致手机界面性能数据无法显示,但不影响正常测试功能。
备注:若无法使用请参考:https://bbs.perfdog.qq.com/detail-128.html
iOS设备连接
iOS设备可以则即插即用,用户无需做任何操作。若PerfDog
检测不到连接手机或无法测试,请先安装确保最新iTunes
是否能连上手机。
备注:若无法使用请参考:https://bbs.perfdog.qq.com/detail-128.html
Wifi连接
WIFI模式可以测试功率等信息。USB连线后,在设备列表选择WIFI图标设备进行WIFI模式测试。WIFI检测连接成功后,拔掉USB连接线。
需要PC和被测手机连接同一WIFI,WIFI检测连接成功后,拔掉被测手机USB线,一般公司WIFI可能做了安全策略限制,导致iOS平台在公司WIFI下无法使用),需要联系网络管理员进行配置。
性能指标
Andriod
- 选择设备和应用之后,在设备启动应用即可看到主界面的性能指标图表数据。
- 安装模式下,手机屏幕左上角有实时性能数据显示(
Android
手机请打开PerfDog
悬浮窗管理权限,否则手机上不会显示性能参数)
性能参数详情
性能参数 | 释义 |
---|---|
CPU Usage | 表示传统CPU 利用率,也叫未规范化CPU利用率,计算方法为:CPU Usage = CPU执行时间/CPU总时间 ,一般Android Studuio 或adb 等获取的CPU 利用率都是未规范化CPU 利用率。 |
CPU Usage(Normalized) | CPU Usage(Normalized) 表示规范化CPU 利用率。 |
CPU Core Usage | CPU不同内核利用率。 |
CPU Clock | CPU时钟频率,是指同步电路中时钟的基础频率,单位赫兹(Hz )。它是评定CPU性能的重要指标。一般来说主频数字值越大越好。 |
Memory Usage | 内存使用数据,包含3部分数据:Memeroy,SwapMemory,Virtual Memory 。 |
Swap Memory | Swap Memory ,部分设备支持Swap 功能,在启用Swap 功能后,系统会对PSS 内存进行压缩,Swap 增加,PSS 会相应减少,由于压缩会占用CPU 资源,同时相应会导致FPS 降低。 |
Virtual Memory | 虚拟内存使用率。 |
Memory Detail | 内存使用详细信息,主要包含: 1. NativePSS :进程按比例使用的物理内存。 2. GFX :底层显卡驱动所反馈的内存分配量 3. GL 显示绘图层消耗的内存 4. unknown 其他内存。 |
FrameTime | 两帧画面间隔耗时(也可简单认为单帧渲染耗时)。Perfdog帧率详解 |
FPS | 帧率,包含3 个参数:Jank,BigJank,Stutter 。 |
GPU Usage | GPU 使用率,目前仅支持部分高通芯片手机,具体详见:PerfDog支持Top Android GPU测试机型 |
Network | Recv/Send ,测试目标进程流量。 |
CPU Temperature | CPU温度 |
Battery | Power(Current 电流、Voltage 电压、Power 功耗, (注:与电流仪器测试误差<3% 左右)。 |
Screenshot | 截图,仅支持USB 连接模式。 |
Log | 日志采集,WIFI 模式下,不支持Log 收集。 |
CPU 规范化
CPU Usage(Normalized)
表示规范化CPU
利用率
由于移动设备CPU
频率时刻变化,用传统CPU
利用率计算方法,假定在低频率时刻计算出**CPU利用率=30%,和在CPU高频时刻计算出CPU利用率=30%**。同样都是30%
但性能消耗是完全不样的,明显高频消耗更高。传统CPU
利用率已无法真实反映性能消耗。
所以我们需要一种规范化(可量化)的统计方式。将频率因素考虑进去。
1 | CPU Usage(Normalized)= (CPU执行时间/CPU总时间) * (当前时刻所有CPU频率之和/所有CPU频率最大值之和) |
PerfDog
两种统计方式都有。CPU Usage
默认为未规范化CPU
利用率。建议使用规范化CPU
利用率作为衡量性能指标。极少部分手机暂时无法测试规范化CPU
利用率,请重启下尝试。
虚拟内存&Swap
计算机内存分为物理内存与虚拟内存(注意虚拟内存和虚拟地址空间的区别)。物理内存是计算机的实际内存大小,由RAM
芯片组成。虚拟内存则是虚拟出来的、使用磁盘代替内存。虚拟内存的出现,让机器内存不够的情况得到部分解决。
当程序运行起来由操作系统做具体虚拟内存到物理内存的替换和加载(相应的页与段的虚拟内存管理)。Android 设备的虚拟内存即所谓的Swap
。
Swap
全称为Swap Place
,即交换分区。当内存不够的时候,被踢出的进程被暂时存储到交换区。当需要这条被踢出的进程时,就从交换区重新加载到内存,否则它不会主动交换到真实内存中。
Google Jank
Google Jank
计算思路:考虑视觉惯性,以硬件vsync
(垂直同步)时间间隔,连续1
次vsync
没有新画面刷新,则认为是一次卡顿,也就是说下一次vsync
时间点没有新画面刷新,则认为是一次Jank
。
流畅度与卡顿的关联可以用以下的流程图来大致展示:
iOS
连接设备,选择需要测试的应用。在设备上面启动应用,应用界面可以看到性能指标图表开始有性能数据采集展示,拖动性能底部时间轴可以展示更细分的时间曲线图。
主界面默认只展示了FPS,CPU占用率、内存占用率三个性能指标。 如果想采集更多的性能指标点击右下角+
按钮可以调出更多性能指标参数。
iOS性能指标
由于iOS
系统对进程性能参数做严格限制,超过限制则会被系统kill
,因此Perfdog
与苹果官方Xcode
工具参数对齐。
ScreenShot
开启之后将会对测试的应用实时截图,但只支持USB
连接模式。
FPS
FPS(1
秒内平均画面刷新次数),包含3个参数FPS,Jank,Stutter
Jank
Janks
表示1s
内卡顿次数,类似Android
的Jank
卡顿和iOS
的FramePacing
平滑度统计原理。iOS9.1
以下系统暂时不支持
帧率FPS
高并不能说明就一定流畅。比如:FPS
为50
帧,前200ms
渲染一帧,后800ms
渲染49
帧,虽然时均帧率50
,但依然觉得非常卡顿。同时帧率FPS
低,并不代表卡顿,比如无卡顿时均匀FPS
为15
帧。所以平均帧率FPS
与卡顿无任何直接关系。
PerfDog Jank
计算方法如下表所示:
卡顿指标 | 说明 |
---|---|
Jank | 同时满足如下条件:当前帧耗时>前三帧平均耗时2 倍。当前帧耗时>两帧电影帧耗时(1000ms/24*2=84ms )。 |
BigJank | 同时满足如下条件:当前帧耗时>前三帧平均耗时2 倍。当前帧耗时>三帧电影帧耗时(1000ms/24*3=125ms )。 |
Stutter | 卡顿率,测试过程中卡顿时长的占比。 |
PerfDog Stutter
计算思路:
- 基于
PerfDog Jank
的基础上,一次Jank
卡顿,会有一次卡顿时间Jank time
。测试过程中可能有多次Jank
卡顿,即有多次卡顿时间Jank time
。测试总时长为Time
。
1 | Stutter(卡顿率) = ∑Jank time / Time |
说明:
Jank
为卡顿次数,Stutter
为卡顿率,Jank
和Stutter
趋势有一致性,但并非完全线性,因为每次Jank
卡顿严重性是不一样的。同时也说明了,没有Jank
卡顿出现,自然也就卡顿率是0
了
Frame Time
FrameTime
表示上下帧画面显示时间间隔,即认为帧耗时,iOS9.1
以下系统暂时不支持。
CPU Usage
CPU Usage
表示CPU
使用率,包含2
个参数:
Total CPU
:表示整机CPU
使用率,App CPU
:表示进程CPU
使用率。
统计结果和Xcode
一致,iOS
App中CPU
使用率公式如下:
1 | PerfDog使用率=Xcode使用率/核心数 |
备注:iOS平台
CPU Usage
是未规范化CPU使用率,由于iOS平台,频率变化一般是在电池电量极低,锁屏等极端情况下才出现。所以规范化没有很大意义。
Memory Usage
Memory Usage
统计内存使用量,包含四个参数:
Memory
:整体内存使用量。Xcode Memory
: Xcode统计内存。Real Memory
:实际占用物理内存Virtual Memory
:虚拟内存
Memory
是使用FootPrint
命令统计内存,Footprint
是苹果推荐的内存度量及优化的指标。而Memory Footprint
的值达到Limit line
时,就会触发内存警告,并进一步导致OOM
。
关于footprint
的详细说明见官方文档:Minimizing your app’s Memory Footprint
注意:
OOM
与FootPrint
有关,与系统、机型无关。只与RAM
有关,如1G
内存机器。FootPrint
超过650MB
,引发OOM
)。PerfDog
暂时在iOS9
、iOS10
系统无法获取,其他版本OK。后续版本增加,如做性能测试,建议升级iOS系统版本。
Xcode Memory
XCode Debug gauges
统计方式即XCode Memory
。注:iOS9
、iOS10
系统暂时无法获取,其他版本ok。后续版本增加。如做性能测试,建议升级iOS
系统版本
Real Memory
Xcode Instrument
统计方式即Real Memory
,实际占用物理内存。物理内存系统策略有关,衡量内存指标时不会关注,但是它有助于分析定位整体性能问题。
比如:footprint
没有降低,说明应用没有释放内存,但是real memory
却降低了,说明系统对内存做了压缩。由于压缩会占用CPU
资源,同时相应会导致FPS
降低)。
Virtual Memory
Virtual Memory
表示虚拟内存, 关于虚拟内存详细说明见官方文档:Memory Usage Performance Guidelines: About the Virtual Memory System
Wakeups
线程唤醒次数,超过150
进程很大可能会被系统kill
,特别是iOS13.2
闷杀后台进程事件,建议重点关注。该数据收集目前仅支持iOS11
以上的系统。
a sleep/wake cycle on each thread per second,Exceeding limit of 150 wakeups per second over 300 seconds
CSwitch
CSwitch上下文切换测试,单核超过14000
进程会被系统Kill
。
Context Switch Limit 14000(Core/Second)
GPU Usage
GPU使用率,包含以下三个参数
Render
:渲染器利用率(像素着色处理阶段,若占比高,说明是PS
阶段出现瓶颈,shader
过于复杂或纹理大小、采样复杂等)Tiler
:Tiler
利用率(顶点着色处理阶段,若占比高,说明是VS
阶段出现瓶颈,顶点数太多等原因)Device
:设备利用率(整体GPU
利用率)
扩展资料:iOS Rendering 渲染全解析
Network
Network
(Recv/Send
,测试目标进程流量,统计结果和Xcode
一致)
Battery Temperature
Battery Temperature
(电池温度)
Battery Power
整机实时Current
电流、Voltage
电压、Power
功耗,20s
获取一次,目前最精准的统计方式,结果和Battery life
结果一致,支持所有iOS
机型。
注:Sum(Battery)是耗电量。
Energy Usage
Energy Usage
即为Xcode Energy Impact
。监控应用使用的能耗情况(包括CPU、GPU、NetWork、Location、Display (iPhone X only)、Overhead
)。
和Xcode Energy Impact
结果一致。有线模式下测试,支持iOS9
及以上系统。
Total Energy<=270
为Low
270<Total Energy<=1000
为High
Total Energy>1000
为Very High
Log
日志采集(WIFI
模式下,不支持Log
收集)
性能测试操作
记录保存
- 点击右上角记录按钮开始记录性能测试数据,再次点击可以开始保存结果数据,但是记录间隔要大于
10s
。
- 测试结束时,可自主选择两种方式保存处理(
Upload/Save
)性能数据:
- 将性能数据同步上传
PerfDog
云端web
看板 - 本地导出
Excel
文件
记录导入
点击右上角文件夹按钮,可以将已经导出的Excel
执行数据到到Perfdog
中进行查看。
批注及标定
在性能测试过程中,我们可能需要添加标记点来记录执行过程中的关键点。在Perfdog
中添加标记的操作如下:
- 鼠标左键双击,则可以自定义添加批注。
- 左键双击已生成的批注,则取消。
- 鼠标左键单击,则标定。
自定义分析阈值
可以通过鼠标框选/拖动查询时间周期内,统计数据等。同时可对框选数据进行保存。
场景Label标签
通过标签按钮给性能数据打标签,鼠标左键双击颜色区域可修改对应区域标签名。
Log日志功能
勾选日志框将会采集系统日志信息。
Web平台
报告查看
之前我们将测试数据上传到云平台后,可以登录到云平台查看测试报告。点击Perfdog
右上角的云平台按钮或者直接打开地址:https://perfdog.qq.com/mydata/cases 登录即可进入后台。
点击用例名称进入报告详情页面
数据对比
可以添加不同用例进行数据对比,点击报告右上角加入对比按钮,然后点击对比按钮,再添加用例即可进行对比,最多可以同时对比5组数据。
任务管理
当我们需要多人协作一起测试,或者需要采集不同设备的多组数据时,我们可以创建一个任务,后续可以将测试的数据都放在该任务下,方便分析查看管理。
在管理Tab
界面点击创建按钮即可创建自定义任务。
任务归档
在我的数据中,可以将用例归档到创建的任务之中。
报告分享
选择指定的用例,可以将测试报告进行公开或非公开分享。