安卓 App 性能专项测试之流畅度深度解析-中篇
背景
毫无疑问,流畅度在Android众多性能指标中其重要程度不言而喻,而且也是最为复杂的一个。为了描述这样的一个维度,业界大佬纷纷提出了各种指标来对其进行衡量。在上篇文章中给大家介绍了FPS这一项指标的由来及卡顿的原理(丢帧),不熟悉的小伙伴可以点击进入http://www.lemfix.com/topics/245先去了解一番。
但是仅凭借fps指标来去衡量流畅度是远远不够的。
连续绘制的Android应用
对于连续绘制的应用(游戏、视频)我们可以选用fps指标。
步骤如下:
- 将手机通过USB线连接之PC端,开发者选项中USB调试打开,保证adb devices能够检测到设备
- 再次进入到开发者选项中,找到GPU呈现模式分析
- 选择“在adb shell dumpsys gfxinfo中”
查询自己要测试应用的包名,可有如下方式:
- app运行在前台,通过adb shell dumpsys activity | find "mFocusedActivity"查询
- aapt工具解析APK安装包,aapt dump badging APK安装包路径
- 等等...
启动测试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相关的数据。
安卓 App 性能专项测试之流畅度深度解析-中篇的更多相关文章
- 安卓 App 性能专项测试之流畅度深度解析-上篇
指标背景 流畅度,顾名思义是用户感知使用App页面时的流畅情况,"App卡不卡",这是用户最直接的感受. 但是要用量化之后的数据衡量流畅度,在Android平台这边并没有直接有效的 ...
- 安卓 App 性能专项测试指标之 CPU 深度解析
指标背景 很多场景下我们去使用App,可能会碰到手机会出现发热发烫的现象.这是因为CPU使用率过高.CPU过于繁忙,会使得整个系统无法响应用户,整体性能降低,用户体验变得相当差,也容易引起ANR等等一 ...
- Android性能专项测试之耗电量统计API
版权声明:本文为Doctorq原创文章,未经博主允许不得转载. https://blog.csdn.net/qhshiniba/article/details/49155979 参考文章:Androi ...
- Android App性能评测分析-流畅度篇
1.前言 在手机App竞争越来越激烈的今天,Android App的各项性能特别是流畅度不如IOS,安卓基于java虚拟机运行,触控响应的延迟和卡顿比IOS系统严重得多.一些下拉上滑.双指缩放快速打字 ...
- Android APP性能及专项测试
移动测试. Android测试 .APP测试 Android篇 1. 性能测试 Android性能测试分为两类:1.一类为rom版本(系统)的性能测试2.一类为应用app的性能测试 Android的a ...
- Android APP性能及专项测试(个人整理)
移动测试. Android测试 .APP测试 Android篇 1. 性能测试 Android性能测试分为两类:1.一类为rom版本(系统)的性能测试2.一类为应用app的性能测试 Android ...
- 测开之Python自动化全栈工程师+性能专项(送思维导图)
测开之Python自动化全栈工程师+性能专项 功能测试基础 接口测试基础接口的通信原理与本质cookie.session.token详解接口测试的意义与测试方法接口测试用例的设计 app测试 app流 ...
- 专项测试实战 | 如何测试 App 流畅度(基于 FPS 和丢帧率)
本文为霍格沃兹测试学院学员学习笔记. FPS 和丢帧率可以在一定程度上作为 APP 流畅度的一项衡量标准,本文介绍利用 adb shell dumpsys gfxinfo 命令获取软件渲染加载过程的数 ...
- 【腾讯优测干货分享】安卓专项测试之GPU测试探索
本文来自于Dev Club 开发者社区,非经作者同意,请勿转载,原文地址:http://dev.qq.com/topic/57c7ffdc0569a1191bce8a63 作者:章未哲——腾讯SNG质 ...
随机推荐
- SqlServer简单的操作XML以及SQl的 try catch等统一格式
1:SqlServer简单的操作XML: ALTER PROCEDURE [dbo].[SP_CRM_FranchiseeRecharge_Money] @Create_By VARCHAR(), @ ...
- LoadRunner 11 的兼容问题及权限问题
1.LoadRunner 11 在服务器系统中可能出现 不兼容问题. 要对 安装目录bin\LRLauncherApp.exe 和 bin\wlrun.exe 右键属性兼容性(视系统定). 2.如果填 ...
- SpringJDBC源码解析
读完本篇文章需要很长很长时间.... 传统JDBC 相信大家对传统的jdbc已经很熟悉了,无非就是下面这个流程 1234567891011 //1.加载驱动程序Class.forName(" ...
- vue 的 Class 与 Style 绑定
操作元素的 class 列表和内联样式是数据绑定的一个常见需求.因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可.不过,字符串拼接麻烦且易错.因此,在将 ...
- 2019CISCN web题赛-JustSoSo;love_math(复现)
0x00前言 这几天从网上找个CMS源码开始练习审计,盯着众多的代码debug调呀调头晕脑胀的,还不错找到个文件读取和一个ssrf... 上月底结束的CISCN线上赛,web四道,仔细研究的2道,做出 ...
- FileZilla_Server:425 Can't open data connection 问题解决
25 Can't open data connection 和 读取目录列表失败 问题解决 这个问题主要是由于使用Passive Mode模式造成的,解决这个问题很简单:1.在ftp服务软件中设置指定 ...
- Modern Cpp记录
#include <iostream> # include <set> #include <chrono> #ifndef UNUSED #define UNUSE ...
- mysql官网下载对应的mysql包
1. 在百度搜索mysql,点击mysql官网上下载mysql的地址 在url直接输入mysql的下载地址也可以:https://dev.mysql.com/downloads/mysql/ 如图: ...
- frameset frame 页面空白
<html style="background:#213039;"> <head> <title>网站后台管理中心</title> ...
- Nginx 核心配置-检测文件是否存在
Nginx 核心配置-检测文件是否存在 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. try_files会按顺序检查文件是否存在,返回第一个找到的文件或文件夹(结尾加斜线表示为文件 ...