安卓 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质 ...
随机推荐
- Python连接MongoDB数据库并执行操作
原文:https://blog.51cto.com/1767340368/2092813 环境设置: [root@mongodb ~]# cat /etc/redhat-release CentOS ...
- 【转载】ArrayList使用LastIndexOf方法查找最后一个符合条件的元素位置
在C#的编程开发中,ArrayList集合是一个常用的非泛型类集合,在ArrayList集合中如果需要查找最后一个符合条件的元素所在的位置,可以使用ArrayList集合的LastIndexOf方法, ...
- ES6的强大变量声明
ES6是javascript的新特性,今天来说说声明变量 过去我们声明变量,都是一个一个声明,现在有了一种新的声明方式,它可以将一个多个变量同时声明,声明后变量同时存在一个集合中,集合的数据类型是对象 ...
- python列表推导式及其简单应用
列表推导式(又称列表解析式)提供了一种简明扼要的方法来创建列表 一个简单平方 普通for循环 for i in range(1,5): print(i*i,end='') 列表推导式 res = [x ...
- 浅谈MongoDB基础及架构
1.简述MongDB是一个强大.灵活而可扩展的数据存储系统,其将强大的可扩展特性与关系库最有用的特性进行了整合,像:次级索引,范围查询和排序等特性.而MongDB也内建了类似MapReduce汇聚和地 ...
- Mysql 主从报错:1141
主从同步,从库报错代码:1141 ,错误信息如下: Master_Port: 3306 Connect_Retry: 60 Master_Log_File: binlog.000086 Read_Ma ...
- Django rest framework ---- 权限
Django rest framework ---- 权限 添加权限 api/utils文件夹下新建premission.py文件,代码如下: message是当没有权限时,提示的信息 # FileN ...
- Fork/Join框架与Java8 Stream API 之并行流的速度比较
Fork/Join 框架有特定的ExecutorService和线程池构成.ExecutorService可以运行任务,并且这个任务会被分解成较小的任务,它们从线程池中被fork(被不同的线程执行)出 ...
- Mysql数据库之慢查询
一.简介 开启慢查询日志,可以让MySQL记录下查询超过指定时间的语句,通过定位分析性能的瓶颈,才能更好的优化数据库系统的性能. 二.参数说明 slow_query_log 慢查询开启状态 slow_ ...
- Google Chrome 解决 “您的连接不是私密连接” 和被毒霸劫持
一.解决 “您的连接不是私密连接” 前一段时间,Chrome 突然显示出了“您的连接不是私密连接”,这下可难受了,大部分的网站打开都有问题. 找了各种方法,各种设置都是不行. 一.暴力.费力的方法直接 ...