android应用性能测试分享——流畅度篇

上传人:ji****en 文档编号:111893677 上传时间:2019-11-04 格式:PPTX 页数:36 大小:3.67MB
返回 下载 相关 举报
android应用性能测试分享——流畅度篇_第1页
第1页 / 共36页
android应用性能测试分享——流畅度篇_第2页
第2页 / 共36页
android应用性能测试分享——流畅度篇_第3页
第3页 / 共36页
android应用性能测试分享——流畅度篇_第4页
第4页 / 共36页
android应用性能测试分享——流畅度篇_第5页
第5页 / 共36页
点击查看更多>>
资源描述

《android应用性能测试分享——流畅度篇》由会员分享,可在线阅读,更多相关《android应用性能测试分享——流畅度篇(36页珍藏版)》请在金锄头文库上搜索。

1、目录 绘制原理 测试项及操作 测试标准 课后练习 目录 绘制原理 测试项及操作 测试标准 课后练习 测试标准 专项目的适用范围测试项测试标准 流畅度 确保用户有流 畅的展示体验 1、新增列表页 2、旧列表页有较大改动 过渡绘制页面不能有超过1/4的3倍及以上过渡绘制 帧率平均FPS=30,最小FPS=24 目录 绘制原理 测试项及操作 测试标准 课后练习 系统绘制原理 l Android系统要求每一帧都要在 16ms 内绘制完成,平滑的完成一帧 意味着任何特殊的帧需要执行所有的渲染代码(包括 framework 发 送给 GPU 和 CPU 绘制到缓冲区的命令)都要在 16ms 内完成,保持

2、流畅的体验。这个速度允许系统在动画和输入事件的过程中以约 60 帧每秒( 1秒 / 0.016帧每秒 = 62.5帧/秒 )的平滑帧率来渲染。 掉帧 l 如果你的应用没有在 16ms 内完成这一帧的绘制,假设你花了 34ms 来绘制 这一帧,那么就会出现掉帧的情况。系统准备将新的一帧绘制到屏幕上,但是 这一帧并没有准备好,所有就不会有绘制操作,画面也就不会刷新。反馈到用 户身上,就是用户盯着同一张图看了 34ms 而不是 16ms ,这时候掉帧就发 生了,也就是我们常说的卡顿、不流畅。 为什么是60Fps l Android系统要求每一帧都要在 16ms 内绘制完成,那么1秒的帧率就是约 60

3、 帧每秒( 1秒 / 0.016帧每秒 = 62.5帧/秒 ),那为什么要以 60 Fps来作为 App 性能的衡量标准呢?这是因为人眼和大脑之间的协作无法感知到超过 60 Fps的画面更新。 l 市面上绝大多数Android设备的屏幕刷新频率是 60 HZ。当然,超过 60 Fps 是没有意义的,人眼感知不到区别。24 Fps 是人眼能感知的连续线性的运动 ,所以是电影胶圈的常用帧率,因为这个帧率已经足够支撑大部分电影画面所 要表达的内容,同时能最大限度地减少费用支出。但是,低于 30 Fps 是无法 顺畅表现绚丽的画面内容的,此时就需要用到 60 Fps 来达到想要表达的效 果。 不流畅的

4、原因 l 花了非常多时间重新绘制界面中的大部分东西,这样非常浪费CPU周期; l 动画播放,消耗 CPU 、 GPU 资源; l 频繁的触发垃圾回收(GC); l 耗资源的操作,比如 IO 操作、网络操作,占用了主线程; l 过度绘制严重,在绘制用户看不到的对象上花费了太多的时间。 小结 l16MS l60FPS 目录 绘制原理 测试项及操作 测试标准 课后练习 过渡绘制 l 过渡绘制是一个术语,表示某些组件在屏幕上的一个像素点的绘制次数超过 1 次。 l 通俗来讲,绘制界面可以类比成一个涂鸦客涂鸦墙壁,涂鸦是一件工作量很大的事情,墙 面的每个点在涂鸦过程中可能被涂了各种各样的颜色,但最终呈现

5、的颜色却只可能是 1 种。这意味着我们花大力气涂鸦过程中那些非最终呈现的颜色对路人是不可见的,是一种 对时间、精力和资源的浪费,存在很大的改善空间。绘制界面同理,花了太多的时间去绘 制那些堆叠在下面的、用户看不到的东西,这样是在浪费CPU周期和渲染时间! l 官方例子:被用户激活的卡片在最上面,而那些没有激活的卡片在下面,在绘制用户看不到 的对象上花费了太多的时间。 过渡绘制检测 l 在开发者选项里打开 “ 显示 GPU 过度绘制 ” ,来查看应用所有界面及分支界面下的过 度绘制情况: 过渡绘制检测 l Android 会在屏幕上显示不同深浅的颜色来表示过度绘制: 没颜色:没有过度绘制,即一个

6、像素点绘制了 1 次,显示应用本来的颜色; 蓝色:1倍过度绘制,即一个像素点绘制了 2 次; 绿色:2倍过度绘制,即一个像素点绘制了 3 次; 浅红色:3倍过度绘制,即一个像素点绘制了 4 次; 深红色:4倍过度绘制及以上,即一个像素点绘制了 5 次及以上; 过渡绘制检测 l 测试标准:页面不能有超过1/4的3倍及以上过渡绘制 过渡绘制根源 l 过度绘制很大程度上来自于视图相互重叠的问题,其次还有不必要的背景重叠。 l 官方例子:比如一个应用所有的View都有背景的话,就会看起来像第一张图中那样,而在 去除这些不必要的背景之后(指的是Window的默认背景、Layout的背景、文字以及图片 的

7、可能存在的背景),效果就像第二张图那样,基本没有过度绘制的情况。 帧率 l 初步的监控:在开发者选项里打开 “ GPU 呈现模式分析” 选项,选择 ”在屏幕上显示为 条纹“ 。 帧率 l 这个工具会在Android 设备的屏幕上实时显示当前界面的最近 128 帧 的 GPU 绘制图形数 据,界面上一共有 128 个小柱状图,代表的是当前界面最近的 128 帧 GPU 绘制图形数 据。一个小柱状图代表的这一帧画面渲染的耗时,柱状图越高代表耗时越长。随着界面的 刷新,柱状图信息也会实时滚动刷新,中间有一条绿线,代表 16 ms ,保持动画流畅的关 键就在于让这些垂直的柱状条尽可能地保持在绿线下面,

8、任何时候超过绿线,你就有可能丢失 一帧的内容。 帧率 l 每一个柱状图都是由三种颜色构成:蓝、红、黄。 l 蓝色(Draw)代表的是这一帧绘制 Display List 的时间。通俗来说,就是记录了需要花费 多长时间在屏幕上更新视图。用代码语言来说,就是执行视图的 onDraw 方法,创建或更 新每一个视图的 Display List 的时间。 l 红色(Process)代表的是这一帧 OpenGL 渲染 Display List 所需要的时间。通俗来说, 就是记录了执行视图绘制的耗时。用代码语言来说,就是 Android 用 OpenGL ES 的 API 接口进行 2D 渲染 Displa

9、y List 的时间。 l 黄色(Execute)代表的是这一帧 CPU 等待 GPU 处理的时间。通俗来说,就是 CPU 等待 GPU 发出接到命令的回复的等待时间。用代码语言来说,就是这是一个阻塞调用。 帧率测试 l 使用同样的滑动操作脚本,保证滑动速度统一,例如: for /l %a in (1,1,20) do ( adb shell input swipe 50 830 50 30 ) l 在应用宝或者360的应用市场下载安装GT工具,使用GT实时统计FPS,手机要root 帧率测试 l 打开GT,选择被测应用 帧率测试 l 点击参数编辑,将FPS拖拽到悬浮窗展示的参数或者已关注的参

10、数,勾选: 帧率测试 l 点击AUT,点击右上角的“启动”或者“running”可以快速切换到被测应用: 帧率测试 l 运行滑动脚本,点击开始采集,在滑动结束前,点击结束采集: 帧率测试 l 点击参数查看采集结果,也可以点击清除数据或者保存数据到SD卡: 帧率测试 l 测试标准:平均FPS=30,最小FPS=24 l 一般都要覆盖高、中、低端机型 l 对比:不同版本对比,竞品对比 不流畅问题定位 l 工具:systrace l 使用前提: (1)是4.1之后才提供的工具。 (2)手机的内核一定要支持trace(可以查看是否存在/sys/kernel/debug/tracing 这个目录 ) (

11、3)安装python并配置好环境变量 l 运行方式一:eclipseDDMS 不流畅问题定位 l 工具:填写输出文件保存路径,采集时间,对应的进程,勾选Graphics和View System, 点击OK后即开始采集,采集时间结束后输出对应文件。 不流畅问题定位 l 运行方式二:在android-sdkplatform-toolssystrace目录下运行命令行: l python systrace.py -time=5 -o systrace.html gfx view l 这个参数跟之前在eclipse里一样 不流畅问题定位 l 使用chrome打开采集到的文件,关注以下3行:VSYNC(

12、时钟中断信号), SurfaceFlinger(系统绘制UI的服务),对应app的UI线程 不流畅问题定位 l 总体看下app的帧绘制时间比较长的地方,常用操作:W放大,S缩小,A向左,D向右, 也可以用鼠标拖动。 l 看帧之间间隔较大的地方,或者红色F的地方,就是丢帧比较严重的时间段。 不流畅问题定位 l 放大丢帧比较严重的时间段 l 备注:performTraversals,该函数是android系统View树遍历工作的核心,其执行过程可 简单概括为根据之前所有设置好的状态,判断是否需要计算视图大小(measure)、是否 需要重新安置视图的位置(layout),以及是否需要重绘(draw)视图。 不流畅问题定位 l 有的情况,也有可能是在performTraversals之前调用其他方法造成的耗时: l Systrace参数全部勾选,或者命令行不输入选项python systrace.py -time=5 -o systrace.html ,可以把GC信息也抓取到,下图这一帧GC耗时较长: 小结 l过渡绘制检测 lGT lSystrace 目录 绘制原理 测试项及操作 测试标准 课后练习 课后练习 l 挑选一个符合要求的项目列表页面,完成流畅度测试,输出测试报告和bug 单 Q & A

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 电子/通信 > 综合/其它

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号