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采用免安装软件(绿色版)模式,想要更新软件则重新在官网下载最新版即可。

启动运行

  1. 安装完成之后,启动应用,可以看到登录界面如下图所示,为了后续方便Web端查看报告需要注册一个账户。

perfdog

登录账户后即可看到Perfdog主界面

perfdog_index

设备连接

Perfdog设备主要有两种连接方式:

  • USB设备连接
  • Wifi设备连接

USB连接

USB连接手机和PCPerfdog将自动检测添加手机到设备列表中。

Android设备连接

Android设备连接有两种模式:

  • 非安装模式
  • 安装模式(请开启手机USB调试模式及允许USB应用安装)

非安装模式

手机即插即用,无需任何设置及安装,使用非常简单,但手机屏幕上没有实时性能数据显示。

安装模式

需要在手机上自动安装PerfDog.apk,手机屏幕上有实时性能数据显示(允许USB应用安装和PerfDog悬浮窗管理权限),启动PC版PerfDog.exe,则会在手机上自动PUSH安装PerfDog.apk,具体安装类似各个手机厂商安装第三方APP提示安装即可。

perfdog_apk_install

perfdog_window

注意:

由于很多手机安装需要账号密码,导致无法自动安装,如果自动安装失败,则会把安装文件PerfDog.apk释放到当前文件夹里,手动安装PerfDog.apk即可。此模式下在测试过程中,可能由于系统资源紧缺杀死PerfDog手机应用进程,导致手机界面性能数据无法显示,但不影响正常测试功能。

备注:若无法使用请参考:https://bbs.perfdog.qq.com/detail-128.html

perfdog_Android

iOS设备连接

iOS设备可以则即插即用,用户无需做任何操作。若PerfDog检测不到连接手机或无法测试,请先安装确保最新iTunes是否能连上手机。

perfdog-iOS

备注:若无法使用请参考:https://bbs.perfdog.qq.com/detail-128.html

Wifi连接

WIFI模式可以测试功率等信息。USB连线后,在设备列表选择WIFI图标设备进行WIFI模式测试。WIFI检测连接成功后,拔掉USB连接线。

Perfdog_wifi

需要PC和被测手机连接同一WIFI,WIFI检测连接成功后,拔掉被测手机USB线,一般公司WIFI可能做了安全策略限制,导致iOS平台在公司WIFI下无法使用),需要联系网络管理员进行配置。

性能指标

Andriod

  1. 选择设备和应用之后,在设备启动应用即可看到主界面的性能指标图表数据。

perfdog_Android_run

  1. 安装模式下,手机屏幕左上角有实时性能数据显示(Android手机请打开PerfDog悬浮窗管理权限,否则手机上不会显示性能参数)

perfdog_Android_window

性能参数详情

性能参数 释义
CPU Usage 表示传统CPU利用率,也叫未规范化CPU利用率,计算方法为:CPU Usage = CPU执行时间/CPU总时间,一般Android Studuioadb等获取的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(垂直同步)时间间隔,连续1vsync没有新画面刷新,则认为是一次卡顿,也就是说下一次vsync时间点没有新画面刷新,则认为是一次Jank

Google Jank

流畅度与卡顿的关联可以用以下的流程图来大致展示:

perfdog_jank

iOS

连接设备,选择需要测试的应用。在设备上面启动应用,应用界面可以看到性能指标图表开始有性能数据采集展示,拖动性能底部时间轴可以展示更细分的时间曲线图。

perfdog-ios-recording

主界面默认只展示了FPS,CPU占用率、内存占用率三个性能指标。 如果想采集更多的性能指标点击右下角+按钮可以调出更多性能指标参数。

perfdog_params

iOS性能指标

由于iOS系统对进程性能参数做严格限制,超过限制则会被系统kill,因此Perfdog与苹果官方Xcode工具参数对齐。

ScreenShot

开启之后将会对测试的应用实时截图,但只支持USB连接模式。

ios-screenshot

FPS

FPS(1秒内平均画面刷新次数),包含3个参数FPS,Jank,Stutter

Jank

Janks表示1s内卡顿次数,类似AndroidJank卡顿和iOSFramePacing平滑度统计原理。iOS9.1以下系统暂时不支持

帧率FPS高并不能说明就一定流畅。比如:FPS50帧,前200ms渲染一帧,后800ms渲染49帧,虽然时均帧率50,但依然觉得非常卡顿。同时帧率FPS低,并不代表卡顿,比如无卡顿时均匀FPS15帧。所以平均帧率FPS与卡顿无任何直接关系。

PerfDog Jank计算方法如下表所示:

卡顿指标 说明
Jank 同时满足如下条件:
当前帧耗时>前三帧平均耗时2倍。
当前帧耗时>两帧电影帧耗时(1000ms/24*2=84ms)。
BigJank 同时满足如下条件:
当前帧耗时>前三帧平均耗时2倍。
当前帧耗时>三帧电影帧耗时(1000ms/24*3=125ms)。
Stutter 卡顿率,测试过程中卡顿时长的占比。
  1. PerfDog Stutter计算思路:
  • 基于PerfDog Jank的基础上,一次Jank卡顿,会有一次卡顿时间Jank time。测试过程中可能有多次Jank卡顿,即有多次卡顿时间Jank time。测试总时长为Time
1
Stutter(卡顿率) = ∑Jank time / Time

说明:Jank为卡顿次数,Stutter为卡顿率,JankStutter趋势有一致性,但并非完全线性,因为每次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

注意:OOMFootPrint有关,与系统、机型无关。只与RAM有关,如1G内存机器。FootPrint超过650MB,引发OOM)。PerfDog暂时在iOS9iOS10系统无法获取,其他版本OK。后续版本增加,如做性能测试,建议升级iOS系统版本。

Xcode Memory

XCode Debug gauges统计方式即XCode Memory。注:iOS9iOS10系统暂时无法获取,其他版本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<=270Low
  • 270<Total Energy<=1000High
  • Total Energy>1000Very High
Log

日志采集(WIFI模式下,不支持Log收集)

性能测试操作

记录保存

  1. 点击右上角记录按钮开始记录性能测试数据,再次点击可以开始保存结果数据,但是记录间隔要大于10s

perfdog_save_result

  1. 测试结束时,可自主选择两种方式保存处理(Upload/Save)性能数据:
  • 将性能数据同步上传PerfDog云端web看板
  • 本地导出Excel文件

result_web

result_excel

记录导入

点击右上角文件夹按钮,可以将已经导出的Excel执行数据到到Perfdog中进行查看。

import_result

批注及标定

在性能测试过程中,我们可能需要添加标记点来记录执行过程中的关键点。在Perfdog中添加标记的操作如下:

  • 鼠标左键双击,则可以自定义添加批注。
  • 左键双击已生成的批注,则取消。
  • 鼠标左键单击,则标定。

perfdog_mark

自定义分析阈值

可以通过鼠标框选/拖动查询时间周期内,统计数据等。同时可对框选数据进行保存。

perfdog_parttime

场景Label标签

通过标签按钮给性能数据打标签,鼠标左键双击颜色区域可修改对应区域标签名。

perfdog_label

Log日志功能

勾选日志框将会采集系统日志信息。

perfdog_logging

Web平台

报告查看

之前我们将测试数据上传到云平台后,可以登录到云平台查看测试报告。点击Perfdog右上角的云平台按钮或者直接打开地址:https://perfdog.qq.com/mydata/cases 登录即可进入后台。

perfdog_web_case

点击用例名称进入报告详情页面

case_detail

数据对比

可以添加不同用例进行数据对比,点击报告右上角加入对比按钮,然后点击对比按钮,再添加用例即可进行对比,最多可以同时对比5组数据。

perfdog_compare

任务管理

当我们需要多人协作一起测试,或者需要采集不同设备的多组数据时,我们可以创建一个任务,后续可以将测试的数据都放在该任务下,方便分析查看管理。

在管理Tab界面点击创建按钮即可创建自定义任务。

perfdog_manager

任务归档

在我的数据中,可以将用例归档到创建的任务之中。
perfdog_Archive

报告分享

选择指定的用例,可以将测试报告进行公开或非公开分享。

perfdog_report_share

参考资料