Android流畅度原理&优化
活动时间:2016年5月26日
活动介绍:微信线上交流群活动介绍TMQ微信沙龙第一期分享圆满结束啦~本次分享的主题是Android流畅度相关的知识。共有来自四十多个公司的超过100位小伙伴参加了活动,他们有安卓开发,有移动测试,还有来自高校的老师哦~想知道活动分享了啥吗?往下看吧!
活动嘉宾:
嘉宾简介:罗小松,2014年加入腾讯,在TencentOS、腾讯车联开放平台、QQ浏览器等产品中承担性能测试及优化的工作。专注于Android性能测试,参与了腾讯开源软件"GT(随身调)"的版本迭代开发,对流畅度测试方法有一定经验积累。
分享主题:深入浅出Android流畅度原理&优化
● 你是谁——这些指标具体反映了什么问题 ● 你从哪儿来——这些指标数值是怎么得到的 ● 你要到哪儿去——这些指标如何落地来指导优化
活动流程
1报名参加:5月25日~5月26日
2微信建群:5:00PM
3嘉宾介绍:7:50PM
4分享演讲:8:00PM~8:40PM
5观众问答:8:40PM~9:00PM
6自由交流:9:00PM~
问答环节
1 为什么在列表页滑动很顺畅的时候,会突然卡一下?
答:可能导致这个现象的原因很多,它可能会是程序自主设定的功能(例如不同栏目间切换需要一定的停顿间隔),也可能使其他三方应用引起的(例如突然有push信息,或者接收到短信之类的)。要明确具体的原因,还需要更多的辅助信息才能具体定位。
2 怎么判断卡顿是因为代码引起的还是因为内存问题,或者机型引起的呢?
答:这个问题其实涉及到了卡顿原因定位及优化的相关工作了。如果说我们仅仅知道卡顿发生了,而没有其他辅助信息协助我们来判读,我们也无法获知真正的原因在哪儿。例如,在以往工作中,卡顿发生时,我们会用traceview来判断是否是有函数运行超时,或者用Hierarchy Viewer来判读是否是UI层设计不够合理等等。
3 在测试app的时候应该测试app中得哪些接口?
答:不确定这位同学想要探讨的是否是如何测试APP的哪些性能指标。一般来说,APP性能指标的选取跟我们产品的特性、面向的人群以及提供的服务是密切相关的,此外它也受我们的测试资源的限制。所以在一个具体的项目中如何科学的确定需要关注的性能指标,就需要我们对项目本身进行需要“测试分析”了
4 请问罗老师,三个指标都能够反映流畅度,请问一下这三个指标之间是否有权重?是否某些特定场景下可以关注FPS 某些场景关注SM多一点?
答:FPS对系统要求很低,相对而言适用范围也较广,但它仅能对页面内容不停刷新的场景进行是否流畅的判定。举个例子,假如我们打开微信,此时不作任何操作页面上也有没任何的变化,那么此时FPS的数值将为0,那岂不是说我们什么也没做的时候,微信已经卡到不行了?这显然不对。而SM就是这个问题而设计,因此它对于绝大部分页面非连续绘制的场景都能有很好的刻画。但SM也有它自身的限制,例如它要求被测系统至少是Android 4.2,而且被测应用的绘制需要基于Choreographer的doframe的回调实现,才能进行测量。
5 系统可以保证1秒有60个sync吗?我以前有systrace测过,sync本身也受系统的局限性,自身并不能百分之百的均匀出现,所以分享里sm的计算方式本身不准确,sm的计算是(60*totaltime-skippedframe)/totaltime。这是基于1秒60个sync计算的,但sync自身都不能保证他1秒一定出现60次
答:VSYNC信号的触发,可以有硬件或软件两种方案实现。在少数情况中确实存在VSYNC无法保证1秒触发60次的情况。但在绝大多数情况下,一秒钟60次的VSYNC还是能得到保证的,因此在绝大多数情况下SM的数值是准确的。此外,在SM中,我们仅仅监控进程自己的vsync信号,这样的设计确保了SM的基础数据来源仅限于本进程,减少了干扰。另外,我们设计SM的目的是为了对标FPS,也就是基于跳帧的数据来衡量两个场景流畅度的优劣,所以即使此时VSYNC无法达到60,就算它只有59或者58,但只要它还是稳定的,这样的计算公式也不会使得我们在衡量流畅度优劣是产生结果错位的现象。
6 如何进行测试呢?比如一个列表页的sm,我滑动的快慢肯定会影响到sm值,那sm值怎么测量合理?
答:其实Choreographer的doframe中除了有处理图像绘制的回调以外,也有处理输入事件的回调。就是说其实输入本身也会引起掉帧,也是影响流畅度的一个因素。所以输入对流畅度的影响无法避免。关于什么样的输入是合适的这个问题,我们内部也有过多次讨论。目前我们认为以下两种输入都是可以的:1.接近用户使用场景的输入(sm排除fps的低帧情况的干扰,所以sm就可以像用户使用一样测试就好了);2.特定场景的输入(例如上下快速滑动,一般用于测试极限性能)。所以,我们可以根据性能测试用例的具体要求来开展流畅度的测试。
7 这种方法手机需要root吗?我看ppt里很多命令都是root身份下输入的
答:FPS可能会需要adb root,SM用logcat的方式采集,也需要adb root(用于设置系统参数),用callback的方式就不需要了。
8 有听到您讲,注入方式获取SM指标需要被测应用源码。但是GT里面的注入插件,是怎样那个做到不需要注入源码就可以获取SM的呢?
答:通过注入方式实现时,注入的对象是Choreographer的doframe,这部分是Android开源,所以通过注入方式实现SM的获取并不需要知道被测应用的源码。另外,现阶段GT的流畅度(SM)的获取方法已经从注入方式改为了Logcat方式了。
9 目前腾讯内部比较实用或者市面上比较实用的自动化框架有哪些?
答:腾讯内部使用的自动化测试框架有自研和通用两类。在现有框架无法满足我们项目需求的时候,我们会自行设计开发一系列的工具来辅助我们工作,其中部分自研框架将会通过我们移动品质中心的官网TMQ(http://tmq.qq.com/)公开出来。而又如Robotium、Espresso、UIAutomator和Appium等等常用的自动化测试框架,我们也会根据项目的具体情况,选择最合适的方案在工作中进行使用,这方面TMQ中也有相关的介绍。
10 GT测试的流畅度得看哪些参数,以及怎么分析,谢谢
答:在GT中,流畅度所采用的指标就是本次分享中提到的SM指标。GT的主要目的是用于场测,所以在GT中的流畅度主要的目的在于观察当前应用的实时流畅度的变化情况从而发现潜在性能缺陷。因此,我们建议大家在使用GT进行流畅度测试时,重点关注流畅度骤降的场景,发现问题后尝试复现,再进行缺陷定位,最终实现性能缺陷的修复。
获奖名单
问题幸运奖 盛夏-魅族-测试工程师 微信名:@懒懒
问卷幸运奖 张家俊-途牛旅游网-测试工程师 微信名:@张家俊
主办方 腾讯移动品质中心TMQ 介绍
腾讯移动品质中心-Tencent Mobile Quality Center 它是腾讯最早专注在移动APP测试的团队,在十余年的时间内承担了近十款业界领先产品测试工作,近七年的android及iOS自动化测试项目经验,为腾讯向移动转型提供了多项质量方案和关键专利。想知道腾讯多款亿级APP的品质秘密么?欢迎关注腾讯移动品质中心TMQ公众号,这里有TMQ专家团给您带来的移动测试技术精华。