zoukankan      html  css  js  c++  java
  • 安卓 App 性能专项测试之流畅度深度解析-中篇

    背景

    毫无疑问,流畅度在Android众多性能指标中其重要程度不言而喻,而且也是最为复杂的一个。为了描述这样的一个维度,业界大佬纷纷提出了各种指标来对其进行衡量。在上篇文章中给大家介绍了FPS这一项指标的由来及卡顿的原理(丢帧),不熟悉的小伙伴可以点击进入http://www.lemfix.com/topics/245先去了解一番。
    但是仅凭借fps指标来去衡量流畅度是远远不够的。

    连续绘制的Android应用

    对于连续绘制的应用(游戏、视频)我们可以选用fps指标。

    步骤如下:

    • 将手机通过USB线连接之PC端,开发者选项中USB调试打开,保证adb devices能够检测到设备
    • 再次进入到开发者选项中,找到GPU呈现模式分析

    • 选择“在adb shell dumpsys gfxinfo中”

    • 查询自己要测试应用的包名,可有如下方式:

      1. app运行在前台,通过adb shell dumpsys activity | find "mFocusedActivity"查询
      2. aapt工具解析APK安装包,aapt dump badging APK安装包路径
      3. 等等...
    • 启动测试App应用,测试对应的场景,结束后在命令行输入adb shell dumpsys gfxinfo 应用包名

    Draw+Prepare+Process+Execute=完整显示一帧的时间

    这个时间需要小于16.67ms才能保证不丢帧

    fps数据分析:

    计算总数据的行数(跳过第一行)

    frameCount=rowNum(总行数)

    计算每帧的渲染时间

    renderTime=Draw+Prepare+Process+Execute

    当渲染时间renderTime大于16.67ms,该帧渲染超时,算一次丢帧,需要用掉额外的Vsync个数为(多需要的同步信号):

    vsyncOverNum=renderTime/16.67-1

    fps计算公式为

    fps=frameCount*60 / frameCount+vsyncOverNum

    非连续绘制的应用

    实际上在现在很多的Android应用中,很少有需要不断的去绘制的场景。比如:

    fps很低,为什么我们感觉不到卡顿?

    因为本来就用不到那么高的fps,如画一个动画0.5秒就画完了,那么fps最高也就只有30帧/秒,而如果屏幕根本就没有绘制需求,即屏幕显示的画面是静止的,那fps就是为1。

    还有一种情况是:app停止操作后,fps还一直变化,这样的话fps是否会影响fps准确性?

    app停止操作后fps还一直变化,是因为屏幕每一帧的合成都是针对手机里的所有进程,那么即使你的App停止了绘制,手机里其他进程还可能在绘制,比如通知栏的各种消息,这会导致fps继续变化。

    究竟如何衡量非连续绘制应用的流畅度?

    在上一篇文章我们讲过Vsync信号会通知系统开始绘制并且显示在屏幕LCD上,如果某一个Vsync信号发过来绘制没有及时完成,那么Vsync会等到下一周期(16.67ms)再次发送。所以我们可以根据Vsync信号的发送来得到流畅度情况-SM(SMoothness)指标。

    恰好有这样一款工具可以辅助我们得到-腾讯GT(前提是需要将手机root)

    勾选要调试的进程

    返回到参数界面可以看到SM参数已被勾选

    点击红色按钮即可开始测试,场景测试完毕之后即可保存

    得到的就是SM相关的数据。

  • 相关阅读:
    MFC——9.多线程与线程同步
    hdu 1598 find the most comfortable road(并查集+枚举)
    POJ3107Godfather[树形DP 树的重心]
    Codeforces 410C.Team[构造]
    Codeforces 715A. Plus and Square Root[数学构造]
    BZOJ1015[JSOI2008]星球大战starwar[并查集]
    洛谷U4727小L的二叉树[树转序列 LIS]
    Codeforces 500B. New Year Permutation[连通性]
    Codeforces 549D. Hear Features[贪心 英语]
    Codeforces 549C. The Game Of Parity[博弈论]
  • 原文地址:https://www.cnblogs.com/yyoba/p/11051404.html
Copyright © 2011-2022 走看看