APP性能测试-FPS测试
第一次写博客(2018-06-30),欢迎小伙伴们指点补充~~~
一:基础知识
1、手动查看页面卡顿情况:
①开发者选项-GPU呈现模式分析-柱状图
②调试GPU过度绘制:观察页面的层:
蓝色代表一层,白色代表没有过度绘制,绿色代表一个焦点三层,红色四层、深红色6层以上(最卡)。一般情况下不存在四层以上的。
所以判断的标准是:不应该超过4,3层的不能超过屏幕的1/4浅蓝色最棒,基本不会卡顿
2、帧数知识
16.67ms以内一次正常,如果一帧不到16.67,也会等待16.67才执行下一帧;
流畅的帧数/总共用的帧数(总的帧数+额外等待的帧数)=流畅度得分(满分60)
3、命令行下获取的帧数耗时:
一行的加和就是一帧渲染的耗时,有时候是3个字段(Draw、Prepaare、Process、Execute)
图1-1:数据起始位置:
图1-3:数据结束为止(红杠标识的行,代码中会用到)
二:导致页面卡顿的2点原因:
加载数据过多、页面绘制的东西太多(过度绘制)
三:查看帧数耗时的命令:
adb -s FEJC34BEKJXR1A4 shell dumpsys gfxinfo com.android.browser
其中FEJC34BEKJXR1A4为测试包的***名,如图1-3所示:
四:实现代码:
#coding:utf-8 #FPS测试,满分60,要避免动作不流畅的最低是30,要避免动作不流畅的最低是30 import os import time counter =10 #通过包名与activity名,获取帧数(查看之前记得滑动APP界面,以便获取数据) content = os.popen("adb -s FEJC34BEKJXR1A4 shell dumpsys gfxinfo com.android.browser") #读取行数 data = content.readlines() print data start = 0 end = 0 i = 0 #为获得帧数据,先找具有代表性的开始行与结束行的字段“Draw"、"View hierarchy:" for line in data: if "Draw" in line: start = i print ("start:",start) if "View hierarchy:" in line: end = i print ("end",end) i = i+1 #精确定位帧数据的开始行与结束行 result = data[start+1:end-1] print result #未操作所测试的APP时,没有数据 if len(result) == 0: print "没有数据,请操作app哈哈哈" else: badcount = 0 #还的帧数(超时16.67的帧数) addwait = 0 #额外等待的帧数 for l in result: #用""代替"\r\n",去掉"\r\n" l = l.replace("\r\n","") print "l=" ,l datalist = l.split("\t") #以"\t"对数据进行切片 print "datalist=",datalist #对每行帧数据进行加和操作 sum = float(datalist[1]) + float(datalist[2]) + float(datalist[3]) #+ float(datalist[4]) print sum if (sum - 16.67) > 0: badcount = badcount + 1 # 将float类型转化为整型,若sum=32,则addwait=1,若addwait=34,则addwait=2 addwait = addwait + int(sum/16.67) #计算公式:流畅的帧数/总共用的帧数(总的帧数+额外等待的帧数)=流畅度得分(满分60) fpssorce = (len(result) - badcount)*60/(len(result)+addwait) print "fpsscore is %d" % int(fpssorce) #好啦,完毕