PerfDog性能狗简介
(性能狗)是移动全平台Android/iOS性能测试和分析⼯具平台(,需)。快速定位分析性能问题,提升App应⽤及游戏的性能和品质。
⼿机⽆需root或越狱,App应⽤及游戏也⽆需做任何修改,极简化即插即⽤。本⽂的内容主要来⾃于:
在win10上profile android应⽤
在macOS Big Sur(11.2.3)上profile ios应⽤
Win7上安装iTools4来profile ios应⽤
FTime(帧耗时):上下帧画⾯显⽰时间间隔
1)    Avg(FTime):平均帧耗时
2)    Delta(FTime):增量耗时(平均每⼩时两帧之间时间差>100ms的次数)
FPS(帧率):1秒内游戏画⾯或者应⽤界⾯真实平均刷新次数
1)    Avg(FPS):平均帧率(⼀段时间内平均FPS)
2)    Var(FPS):帧率⽅差(⼀段时间内FPS⽅差)
注:⼀段时间内,30帧占⽐80%,31帧占⽐11%,29帧占⽐6%,32帧占⽐3%
Avg(FPS)为这段时间的平均FPS,即这段时间FPS的数学期望E(X) = 30*0.8 + 31*0.11 + 29*0.06 + 32*0.03 = 30.11
Var(FPS)为这段时间的FPS⽅差。⽅差D(X)反映X与E(X)的偏离程度的⼤⼩。⽅差越⼩,X越集中在E(X)附近
D(X) = E(X平⽅) - E(X)*E(X) = 30*30*0.8 + 31*31*0.11 + 29*29*0.06 + 32*32*0.03 - 30.11*30.11 = 0.2779
3)    Drop(FPS):降帧次数(平均每⼩时相邻两个FPS点下降⼤于8帧的次数)
Jank:1s内卡顿次数。
BigJank:1s内严重卡顿次数
帧率FPS⾼并不能反映流畅或不卡顿。⽐如:FPS为50帧,前200ms渲染⼀帧,后800ms渲染49帧,
虽然帧率50,但依然觉得⾮常卡顿。同时帧率FPS低,并不代表卡顿,⽐如⽆卡顿时均匀FPS为15帧。
因此,平均帧率FPS与卡顿⽆任何直接关系,需要⽤Jank来衡量游戏的卡顿情况。
PerfDog Jank计算⽅法:
同时满⾜以下两条件,则认为是⼀次卡顿Jank.
(a) 当前帧耗时>前三帧平均耗时2倍。
(b) 当前帧耗时>两帧电影帧耗时(1000ms/24*2=84ms)。
同时满⾜两条件,则认为是⼀次严重卡顿BigJank.
(a) 当前帧耗时>前三帧平均耗时2倍。
(b) 当前帧耗时>三帧电影帧耗时(1000ms/24*3=125ms)。
扩展阅读:
Stutter:测试过程中,卡顿时长的占⽐
的⼀些性能指标
FPS卡顿:当相邻两秒的帧时间差⼤于100ms
FPS抖动:当相邻两秒的FPS差值⼤于8
FPS低帧:FPS低于5帧
CPU Usage:传统CPU利⽤率,也叫未规范化CPU利⽤率。为CPU执⾏时间/CPU总时间。
⼀般Android Studuio、adb、Xcode等获取的CPU利⽤率都是未规范化CPU利⽤率。
注:iOS下,该值与Xcode使⽤率/核⼼数⼀致
CPU Usage(Normalized):规范化CPU利⽤率。考虑CPU频率变化。为 (CPU执⾏时间/CPU总时间) * (当前时刻所有CPU频率之和/所有CPU频率最⼤值之和)
注1:由于移动设备CPU频率时刻变化,⽤传统CPU利⽤率计算⽅法,假定在低频率时刻计算出CPU利⽤率=30%,和在CPU ⾼频时刻计算出CPU利⽤率=30%。
同样都是30%但性能消耗是完全不样的,明显⾼频消耗更⾼。传统CPU利⽤率已⽆法真实反映性能消
耗。
注2:Android下要⽤规范化CPU利⽤率作为衡量性能指标;iOS平台,频率变化⼀般是在电池电量极低,锁屏等极端情况下才出现,所以规范化CPU利⽤率没有很⼤意义。
1)    TotalCPU:表⽰整机CPU使⽤率
2)    AppCPU:进程CPU使⽤率注:建议低于60%,⾼于90%说明有严重的CPU性能问题
扩展阅读:
Memory(物理内存)
(a) Andorid下为PSS。注:与dumpsys meminfo的Pss TOTAL数值⼀样。
(b) iOS下为FootPrint。OOM与FootPrint有关,与系统、机型⽆关。只与RAM有关,如1G内存机器。FootPrint超过650MB,引发OOM;2G 内存机器,FootPrint超过1300MB,引发OOM。
Xcode Memory (XCode Debug gauges统计⽅式)即FootPrint。
注:FootPrint = Resident dirty(常驻脏内存) + Compressed origin(Swap内存压缩前⼤⼩),不包
含⼲净页(代码、⽂件),统计了⽤户能决定的内存⼤⼩
Virtual Memory(VSS):虚拟内存。64位app该值都超⼤。
Available Memory:整机可⽤剩余物理内存。
Network(Recv/Send):测试⽬标进程流量
注1:Android下,USB/WiFi测试模式下均为APP数据
注2:iOS下,USB测试模式下是app的,WiFi测试模式下可能是整机可能是app。结果与Xcode统计⼀致。
温度
注1:Android下,CTemp(CPU温度)
注2:iOS下,BTemp(电池温度)
Battery Power(仅WIFI模式,Current电流、Voltage电压、Power功耗)
注1:Sum(Battery)是耗电量。
注3:iOS下,20s获取⼀次,⽬前最精准的统计⽅式,结果和Battery life结果⼀致,⽀持所有iOS机型)
ScreenShot(截图):只⽀持USB模式,注:部分机型截图影响性能
Android特有
InterFrame:部分机型具有动态补帧/插帧技术,此参数可真实反映1秒内插⼊的帧数
CPU Clock:各个CPU核⼼的未规范化频率和未规范化使⽤率
Swap Memory:在启⽤Swap功能后,系统会对PSS内存进⾏压缩,Swap增加,PSS会相应减少,由于压缩会占⽤CPU资源,同时相应会导致FPS降低
对应adb shell cat /proc/<pid>/status中的VmSwap
NativePss:对应dumpsys meminfo的Native Heap
Gfx:对应dumpsys meminfo的Gfx dev
GL:对应dumpsys meminfo的GL mtrack
JavaHeap:对应dumpsys meminfo的Java Heap
Unknown:对应dumpsys meminfo的Unknown
GPU Frequency(⽬前仅⽀持部分⼿机)。
1)    Non-fragment:⾮⽚段着⾊器(顶点着⾊器,细分着⾊器,计算着⾊器)耗费的GPU时间占渲染耗费的GPU时间的⽐例。
2)    Fragment:⽚段着⾊器耗费的GPU时间占渲染耗费的GPU时间的⽐例。
Mali Memory & Bus Bandwidth(仅⽀持Mali芯⽚GPU)
1)    L2Load/Store:Load/Store单元读取L2内存的实际带宽 (包括顶点缓存,原⼦,图像数据)。
2)    L2Texture:Texture单元读取L2内存的实际带宽 (纹理采样)。
3)    Bus Read:定义GPU到DRAM或者GPU外部的系统内存的实际读带宽。
4)    Bus Write:定义GPU到DRAM或者GPU外部的系统内存的实际写带宽。
Mali Pixels Info(仅⽀持Mali芯⽚GPU)
1)    OverDraw:表⽰每个像素由多少个⽚段分层组成,通常⽤于表⽰像素被重复绘制的次数。
2)    PixelsThroughput:表⽰每个被渲染的像素耗费的GPU的时钟的数量。
iOS特有
Real Memory:Xcode Instrument统计⽅式,实际占⽤物理内存。即Resident,为常驻内存,含⼲净页(代码、⽂件)和dirty页。
与物理内存系统策略有关,衡量内存指标时不会关注,但是它有助于分析定位整体性能问题。
⽐如:机器内存充⾜时,Real Memory会⼤于FootPrint。原因是⼲净页(代码、⽂件)占⽤了内存。
⽐如:机器内存紧张时,Real Memory会⼩于FootPrint。原因是⼲净页(代码、⽂件)被释放,且⼀部分dirty页被压缩。
由于⼲净页(代码、⽂件)释放后在需要时要再次加载进内存,压缩dirty页被使⽤时需再次解压加载进内存,都会占⽤
CPU资源,会导致FPS降低
Wakeups(线程唤醒次数):超过150进程很⼤可能会被系统kill。a sleep/wake cycle on each thread per second,Exceeding limit of 150 wakeups per second over 300 seconds,特别是iOS13.2闷杀后台进程事件,建议重点关注
CSwitch(上下⽂切换测试):单核超过14000进程会被系统Kill。Context Switch Limit 14000(Core/Second)
GPU Utilization
手机unknown是什么意思1)    Render(渲染器利⽤率):像素着⾊处理阶段,若占⽐⾼,说明是PS阶段出现瓶颈,shader过于复杂或纹理⼤⼩、采样复杂等
2)    Tiler(Tiler利⽤率):顶点着⾊处理阶段,若占⽐⾼,说明是VS阶段出现瓶颈,顶点数太多等原因
3)    Device(设备利⽤率):整体GPU利⽤率
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。
当⼿机发热严重时,cpu会出现降频,帧率从60降到29,具体数据见,如下: