转自 腾讯Bugly

叶方正,2008年加入腾讯,就职于无线研发部【专项测试组】。曾经负责多个产品的性能优化工作,积累大量的移动终端平台优化以及评测经验。

怎样获取SM值?

前文我们分析了通过测量应用的帧率FPS并不能准确评价App的流畅度(如何量化Android应用的“卡”?流畅度原理&定义篇),FPS较低并不能代表当前App在UI上界面不流畅,而1s内VSync这个Loop运行了多少次更加能说明当前App的流畅程度。

那么我们可以直接在App代码中通过Choreographer的回调FrameCallback来计算Loop被运行了几次,从而知道应用的流畅度。但在实际情况下我们不一定能修改代码(实际发布的版本不允许加入测试代码)或者根本拿不到代码(譬如和竞品进行对比)。

今天我们介绍一种更简单直观测量Android应用流畅度的方法,就是通过开源测试工具GT(http://gt.qq.com)。

1、先启动要测试的应用。

2、启动GT,在插件中选择GT Injector,再选择被测进程,点击“射它”。


3、点击后,Para界面会出现流畅度指标以及被插入程序的CPU占有率,并且会带上被插入的进程名。将流畅度后面小方框勾选(表示需要记录SM值到log文件),然后点击右个角“Gather & Warning”下小红圈(表示开始记录数值)。


4、启动App,开始做相关的测试。

5、完成测试后,在GT界面点击流畅度(SM),则会出现已经记录的SM值图表,点击右上角磁盘图标,保存log到指定名字的文件夹。


6、最后利用工具(比如应用宝),把log导入到PC端进行后期处理(一般情况下,文件保存路径在:SD卡/GT/GW/进程名/自定义文件夹)。

温馨提醒:以上的操作因为涉及到进程注入需要手机Root权限,如有问题,可以加GT交流群咨询(QQ群号:145535035)。

SM测试效果如何?

我们已经收集了SM的测试数据,但测试数据是否准确?我们拿一些浏览器产品为例子,来评测下SM的数据和人的感受是否对应得上。

首先,我们为了把感官和人的感受对应上,特把主动感官分数对应到以下几种描述。

流畅度主观评分 描述
4~5 界面滑动流畅
并且能够快速响应用户输入(各种操作)
3~4 界面滑动顿挫感
并且能够及时响应用户输入(各种操作)
2~3 界面滑动明显顿挫感
响应用户输入(各种操作)有种慢半拍的感觉
1~2 界面滑动明显画面跳跃感
响应用户输入(各种操作)有严重的延迟
0~1 不能动了

1、先看看流畅度(SM)和丢帧(SF)之间的关系

测试场景:浏览器看妹子图

评测手机:Nexus 4

流畅度主观评分(总体):2.5(界面滑动明显顿挫感,响应用户输入有种慢半拍的感觉


因为丢帧是个不连续的过程,所以图中的丢帧都是以点来表示其离散的状态。从上面图表可以看出:

  • 丢帧(SF)越多,流畅度(SM)越低。
  • 26:16~26:42之间的流畅度很低,并且丢帧最密集。

再整体梳理一下这期间流畅度、丢帧和主观评分的数据:

主观评分 流畅度均值 丢帧均值
2.50 25.26 34.15

从这个数据可以看到,丢帧(SF)越多流畅度(SM)越低,并且主观感觉比较卡,这个关系是成立的。

2、再引入FPS看看三者关系

测试场景:浏览器看妹子图

评测手机:Nexus 4

流畅度主观评分(总体):2.5


这次测试引入了FPS数据,从图表中可以看出:

  • FPS曲线和SM曲线差不多,而且同样受丢帧的影响。
  • 有段比较奇怪的地方:流畅度很高,但FPS比较低,无丢帧情况,将这段数据放大来看:

检查这个时段的测试场景:静置在某个界面没有动,主观评分在4.5左右。

再整体梳理一下这个时间段FPS、流畅度、丢帧和主观的数据:

主观分 流畅度均值 丢帧均值 FPS均值
4.5 58.375 0.5 16.333

可以看出,流畅度SM会比FPS更加适合客观描述App卡的程度。

如何有效利用SM值判断App流畅度?

确定了使用SM值来评估手机App的流畅度后,我们会开始进行一个产品在不同场景,以及多个产品间在相同场景下的测试对比。场景太多,测试数据巨大,该如何有效使用SM测试结果去判断App流畅情况?

1、一些思路

  • 不能直接用平均值和方差

根据以往经验,通过平均值,方差等一些指标,并不好说明问题。如果卡顿时间出现较短,测试时间较长,则平均值和方差这种指标不容易发现问题,但是又确实有卡顿。平均值和方差适合描述服从正态分布的随机变量,但是测试得到的SM值并不是这样的随机变量。

  • 将测试结果按卡顿和流畅分段,对每个卡顿区间段打分

之前参考了一篇游戏流畅度评分的文章,该文章结合FPS平均值和卡顿的程度以及频率,对游戏整体流畅度打分。但是普通App和游戏的区别比较大。对普通App来说,用户不是一直在操作,而且不同的操作差异也较大,因此卡顿的频率一般较低,用平均值和卡顿的频率打分得到的结果可能会偏高。所以把测试过程按照卡顿和流畅分段,计算每个卡顿区间的打分和持续时间可能更有参考意义。

  • 总体打分时加大卡顿时的权重,降低流畅区间的权重

虽然我们重点关注的可能是卡顿的地方,但是竞品测试,以及两个版本对比需要有总体评判结果,不能只看局部。为了加大结果的区分度,对卡顿区间增加权重,对流畅区间降低权重,来突出卡顿对整体评分的影响。因此,评估结果将包括两部分:总体打分,以及卡顿区间、流畅区间的持续时间和打分。

2、流畅度评估方法

  • 预处理,每5个(秒)一组,取最低值。如果5秒内出现多于一次卡顿(SM低于40),则再乘以一个和卡顿次数有关的权值(小于1)。

【说明】如果卡顿出现次数较少,平均值和方差不容易发现问题。因此没有直接对数据评估,先进行了预处理,突出SM值低的部分,加大卡顿对总分的影响。

处理前的三组数据:


处理后的三组数据:

  • 将处理后的数据按卡顿和流畅分段,针对每段打分。

【说明】如果只有最后总分,且流畅的时间较长,卡顿的数据容易被流畅的数据淹没。而且有些测试场景存在一段流畅,一段卡顿的现象,卡顿并不一定在整个测试过程中存在。这样分开流畅和卡顿的区间处理,更容易看出卡顿的程度。

  • 根据测试经验,对SM值对应的卡顿严重程度打分。

【说明】根据测试同学的经验,流畅度指标SM低于40时,用户能感知到卡顿,SM在20以下卡顿比较严重。因此在打分时,SM值在20以下时打分最低,对应0-20,在20-30区间打分低,对应20-60,30-40区间打分较低,对应60-70,40以上打分在70以上。

  • 总体打分时降低流畅区间的权重。

【说明】这样处理的原因和第一项的原因一样,我们更关注的是卡顿,流畅区间过长时会淹没卡顿的数据。

3、对比几个浏览器产品在同一个场景下的测试数据

测试场景:浏览网页

评测手机:Nexus 4

测试方法:打开凤凰网,来回上下滑动,在滑动的过程中记录流畅度数据


流畅度评估后数据:

从上面的数据可以看出,在滑动浏览网页时,C浏览器略微好于A浏览器和B浏览器。

当然这都是在性能比较好的手机(Nexus 4)上测试,其实主观感受差距不大,但从量化数据上就可以看出优略。

小编有话说

卡顿的问题严重性,可能不像崩溃来得那么强烈,但对于用户的流失影响是潜移默化,慢慢深入。若想知道自己产品流畅度如何,也可以试试用SM来评测自己产品性能。

本文系腾讯Bugly特邀文章,转载请注明作者和出处“腾讯Bugly(http://bugly.qq.com)”

【MIG专项测试组】如何准确评测Android应用的流畅度?的更多相关文章

  1. 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)

    本文为霍格沃兹测试学院学员学习笔记. FPS 和丢帧率可以在一定程度上作为 APP 流畅度的一项衡量标准,本文介绍利用 adb shell dumpsys gfxinfo 命令获取软件渲染加载过程的数 ...

  2. Android App性能评测分析-流畅度篇

    1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...

  3. Android流畅度测试

    Android流畅度测试 测试方法一:系统自带-开发者模式 测试方法二:FPS Meter测试安卓帧数 H5页面加载速度:window.performance.timing 测试方法一:系统自带-开发 ...

  4. [原] Android持续优化 - 提高流畅度

    一.形象的感官一下流畅度概念 1. 这是官方给出的概念:Android流畅运行,需要运行60帧/秒, 则需要每帧的处理时间不超过16ms. 2. 每秒帧数,实际上就是指动画或视频每秒放映的画面数.因此 ...

  5. android流畅度比Ios差的原因

    Andorid更新了一个版本又一个版本,硬件从单核到双核到四核,系统流畅度总算基本能和iOS持平了.不过人们不禁会问,为什么都是基于Linux,两个系统会差别如此大?为什么iPhone 4用单核处理器 ...

  6. Android实现图片相似度

    Android实现图片相似度 最近公司有一个需求,就是希望能判断用户提交的照片是否是身份证的正面或者反面.可以通过预设一张拍摄清晰的身份证正面或者反面,来对比是否相似,那么问题就转化为如何计算两张图片 ...

  7. 安卓 App 性能专项测试之流畅度深度解析-中篇

    背景 毫无疑问,流畅度在Android众多性能指标中其重要程度不言而喻,而且也是最为复杂的一个.为了描述这样的一个维度,业界大佬纷纷提出了各种指标来对其进行衡量.在上篇文章中给大家介绍了FPS这一项指 ...

  8. 安卓 App 性能专项测试之流畅度深度解析-上篇

    指标背景 流畅度,顾名思义是用户感知使用App页面时的流畅情况,"App卡不卡",这是用户最直接的感受. 但是要用量化之后的数据衡量流畅度,在Android平台这边并没有直接有效的 ...

  9. Android之线程池深度剖析

    1.线程池的引入   引入的好处:   1)提升性能.创建和消耗对象费时费CPU资源   2)防止内存过度消耗.控制活动线程的数量,防止并发线程过多.   使用条件:      假设在一台服务器完成一 ...

随机推荐

  1. Tomcat服务器与HTTP协议

    Tomcat服务器与HTTP协议 一.  Tomcat服务器 1.tomcat服务器 1.web :网页,它代表的是网络上的资源.(java技术开发动态的web资源,即动态web页面,在Java中,动 ...

  2. POJ3261 Milk Patterns(二分+后缀数组)

    题目求最长的重复k次可重叠子串. 与POJ1743同理. 二分枚举ans判定是否成立 height分组,如果大于等于ans的组里的个数大于等于k-1,这个ans就可行 #include<cstd ...

  3. [COCI2015]ZGODAN

    题目大意: 给你一个数$n(n\leq10^1000)$,定义一个数是“美丽数”当且仅当这个数各个数位上的数奇偶性不同. 求最接近$n$的“美丽数”,若有多个,则依次输出. 思路: 贪心+高精度. 首 ...

  4. Ubuntu 16.04通过网络配置工具NetworkManager设置IP、网关、DNS和查看IP、网关、DNS

    说明: 1.NetworkManager工具是Ubuntu桌面版的GUI设置工具. 2.这个工具推荐直接在GUI上操作,不建议用命令行进行管理,比如Wifi这些配置等. 3.当然,这个工具能带有命令行 ...

  5. VisualStudio Shell简介 — 界面定制

    项目组成 首先我们来看一下模板自动生成的工程文件:      它包括两个C++工程和两个C#工程,首先我们来看两个C++的工程: VSShellStub1, 这个是系统的启动项,它是最终的exe文件的 ...

  6. Linux内核分析 - 网络

    http://blog.csdn.net/column/details/network-kernel-yoyo.html

  7. 用nodejs和js写增删查模块

    文件目录如下:public是静态资源文件,index.html入门页面,server.js就是用nodejs创建的服务端代码,users.json就类似是数据库. 目录 显示界面 listUsers ...

  8. linux 多线程那点事

    说明:对多线程与相互排斥锁不熟悉的请參考其他 #include <pthread.h> #include <stdio.h> #include <stdlib.h> ...

  9. docker开发之pyudev模块用法

    一.实现功能:获取docker_id #docker数据源: [root@docker scripts]# docker ps -a CONTAINER ID IMAGE COMMAND CREATE ...

  10. 2017.4.28 SSM框架搭建与配置

    1.项目结构 2.配置文件 对配置文件进行总结: pom.xml web.xml -> 配置web相关 -> 读取application*.xml 5 -> 读取logback.xm ...