安卓专项测试之帧率

请参考这篇文章

https://bbs.perfdog.qq.com/article-detail.html?id=6

该文章主要是讲解PerfDog卡顿Jank定义、原理、Stutter(卡顿率)及影响等。内容将分为六部分:FrameTime、FPS、流畅度、Jank(卡顿次数)、Stutter(卡顿率)、影响。从深层次分析在性能测试工作中这六部分起到的重要意义。

SoloPi源码分析
以计算帧率为例

RecordPattern pattern = new RecordPattern("帧率", "帧", "FPS");
pattern.setStartTime(startTime);
pattern.setEndTime(endTime);
result.put(pattern, fpsCurrent);

fpsCurrent代表该值,在record()函数里面dataWrapper.fps,dataWrapper由currentData赋值

FpsUtil.FpsDataWrapper dataWrapper = currentData.get(displayIdx);
if (dataWrapper.fps > 0) {
   String topActivity = dataWrapper.activity;
   fpsCurrent.add(new RecordPattern.RecordItem(System.currentTimeMillis(),
         (float)dataWrapper.fps, topActivity));

currentData通过receiveFps获得,receiveFps通过Observer模式订阅消息,

@Subscriber(@Param(FpsUtil.FPS_DATA_EVENT))
public void receiveFps(List<FpsUtil.FpsDataWrapper> dataWrappers)

在FpsUtil.java文件中,通过执行adb shell dumpsys gfxinfo < PACKAGE_NAME > 获得应用界面的帧信息

if (Build.VERSION.SDK_INT < Build.VERSION_CODES.LOLLIPOP) {
    // 如果topActivity存在,查找Activity对应的Profile Data
    result = CmdTools.execAdbCmd("dumpsys gfxinfo " + processName + " | grep '" + activity + "' -A129 | grep Draw -B1 -A128", 1000);
} else {
    // 如果topActivity存在,并且版本在5.0及以上,可以通过visibility进行过滤,查找Activity对应的Profile Data
    result = CmdTools.execAdbCmd("dumpsys gfxinfo " + processName + " | grep '" + activity + ".*visibility=0' -A129 | grep Draw -B1 -A128", 1000);
}
LogUtil.w(TAG, "Fps get gfxinfo cost: " + (System.currentTimeMillis() - startTime) + "ms");

具体换算过程,有兴趣的可以继续研究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值