Android流畅度怎么衡量?

来源:PerfDog

前言
  
从 Android 诞生的那一刻起,流畅度就为众人所关注。一时之间似乎所有人都在讨论 Android 和 iOS 谁的流畅度更好。但是毫不夸张的说,流畅度绝对是 Android 众多性能维度中最为奇葩的一个。因为为了刻画这一性能维度,业界设计了各式各样的指标来对其进行衡量,可以说弄清了这些指标我们就明白了什么是流畅度。PerfDog利用FPS与Jank相结合的方式让流畅度测试更加精准,大家可以前往文末网址中下载使用。

显示性能指标具体反映了什么问题?
 
想要明白显示性能指标具体反映了什么问题,我们需要从 Android 的图像渲染流程说起,本文只讨论图像渲染过程中的每个环节对应的指标有什么。

Android 图像渲染流程

下图是简单整理的常规情况下的图像渲染的流程图:


参考上图需要搞清楚如下两种关系:

SurfaceFlinger、HWComposer与Surface的关系

Surface:可以理解为Android系统中的一个基本显示单元。只要使用Android任意一种API绘图,绘制的结果都将反映在Surface上。

SurfaceFlinger:服务运行在System进程中,用来统一管理系统的帧缓冲区设备,其主要作用是将系统中的大部分Surface进行合成。SurfaceFlinger主要使用GPU进行Surface的合成,合成的结果将形成一个FrameBuffer。

HWComposer:即Hardware Composer HAL,其作用是将SurfaceFlinger通过GPU合成的结果与其他Surface一起最终形成BufferQueue中的一个Buffer。此外,HWComposer可以协助SurfaceFlinger进行Surface的合成,但是否进行协助是由HWComposer决定的。

Choreographer、SurfaceFlinger、HWComposer与VSYNC的关系

VSYNC:Vertical Synchronization的缩写,它的作用是使GPU的渲染频率与显示器的刷新频率(一般为固定值)同步从而避免出现画面撕裂的现象。

HWComposer:VSYNC信号主要由HWComposer通过硬件触发。

Choreographer:当收到VSYNC信号时,Choreographer将按优先级高低依次去调用使用者通过postCallback提前设置的回调函数,它们分别是:优先级最高的CALLBACK_INPUT、优先级次高的CALLBACK_ANIMATION以及优先级最低的CALLBACK_TRAVERSAL。

SurfaceFlinger:Surface的合成操作也是基于VSYNC信号进行的。

Android 图像渲染有如下特点:

Android 图像渲染架构分为绘制所在的应用层(Surface)、合成及提交上屏所在的系统层(SurfaceFlinger)、显示所在的硬件层(Screen);

上面三个层级都是只在绘制内容发生改变的时候才会对绘制内容进行处理;

SurfaceFlinger 与绝大部分 Surface 是依据 VSYNC 信号安排任务;

绝大部分 Surface 都属于 Hardware Rendering。

各个指标所代表的意义
 
知道了Android 的图像渲染流程,下面可以看看各个指标对应了渲染流程的哪些阶段。

系统层级的显示性能指标

基础数据:SurfaceFlinger 合成次数

指标意义:
系统合成帧率:FPS

特别说明:

  • SurfaceFlinger 仅在显示区域内的 Surface 有提交内容更新时才会进行合成(上屏),因此,系统合成帧率低并不一定意味着图像显示性能差,有可能是因为当前并没有任何的内容更新所导致。
  • 若显示区域内的某个待测 Surface 持续进行更新时, SurfaceFlinger的合成(上屏)的频率可以在某种程度上反映该 Surface 的显示性能,但从理论上分析该指标并不一定准确。这是因为,若显示区域内尚存在其他 Surface,它们也会影响 SurfaceFlinger 的合成(上屏)的行为,从而干扰结果。
  • 若某个 Surface 的合成不在 SurfaceFlinger 中进行(如 Camera Preview),则该 Surface 的显示性能无法用这类指标进行衡量。

应用层级的显示性能指标

基础数据:绘制过程中每一帧的关键时间点(如开始绘制时间、结束绘制时间等)

指标意义:

  • 应用绘制帧率:Frame rate
  • 应用绘制轮询频率:SM
  • 应用绘制超时(跳帧)的次数:Aggregate frame stats、Jankiness count、Skipped frames
  • 应用绘制超时(跳帧)的幅度:Aggregate frame stats、Max accumulated frames、Skipped frames

特别说明:

  • 与 SurfaceFlinger 类似, Surface也仅在有内容更新时才会进行绘制,因此,绘制频率低并不一定意味着图像显示性能差,有可能是因为当前并没有任何的内容更新所导致。
  • 如 SM、Skipped frames 这类指标,由于其基础数据取自 Choreographer,若 某些 Surface 的绘制不依赖于 Choreographer ,则这些指标无法衡量该 Surface 的显示性能。
  • 如 Aggregate frame stats、Jankiness count、Max accumulated frames、Frame rate 这类指标, 由于其基础数据仅在硬件绘制(Hardware Rendering)过程中进行统计,属于 HWUI 的功能,所以非硬件绘制的 Surface 自然无法使用这类指标进行衡量。

评价显示性能的各个指标,可以按其在图像渲染流程中的作用分为系统层级与应用层级两类,系统层级的指标仅有 FPS 一根独苗,它的限制是 Surface 的和合成需要在 SurfaceFlinger中进行;应用层级的指标较多,它们之中又可以分为两类:1. SM、Skipped frames 需要 Surface 依赖 Choreographer进行绘制,才能正常工作;2. Aggregate frame stats、Jankiness count、Max accumulated frames、Frame rate 属于 HWUI 的功能, 需要 Surface 的绘制由 HWUI 进行才能进行分析。

PerfDog高效获取移动端性能指标


面对Android复杂的显示性能指标,PerfDog给出了更加简洁清晰的测试方案,在FPS帧率测试的基础上,还引入了Jank测试。Jank统计的是1s内卡顿次数,类似Android的Jank卡顿和iOS的FramePacing平滑度统计原理。单纯的FPS数据高并不能反映流畅或不卡顿,FPS与Jank互补测试能够更全面准确的描述游戏与应用的流畅程度。作为最新的移动全平台性能测试分析工具,PerfDog不仅支持Android系统的显示性能指标测试,同时还支持iOS系统测试记录CPU与GPU使用情况,网络瞬时流量、电池功耗等信息,极大方便了开发与测试人员的工作,有需要的朋友可前往https://perfdog.qq.com/下载使用。

最新文章