我比来在我的Nexus 4上装备了Falcon Pro,一个新的Twitter客户端。我真的很喜好应用这个运用次序,但我在应用它时留心到了某些地方存在一些问题,看起来动弹主时间轴并没有失掉非常动摇的帧率。我深钻了一下我每天Task所用Tools和技能中的一些,我能很快地找到一些Falcon Pro 实在不如它本可以表现得那么好的启事。
我在这篇文章里的目的是告诉你怎样追踪和修复运用次序中的功用问题,即使你没有它的源代码。一切你需求的只是一份最新的Android 4.2 SDK –新的ADT bundle使设置变得简单纯真。我极力举荐你下载这个运用次序来切身运用这里描画的技能。对你来说不幸的是Falcon Pro是款付费运用,因此我将给您供应你可以下载的各种文件的链接来跟随我的分析。
Android 4.1把重点放在Butter项目的功用上,它带来了新的功用分析Tools,如systrace。Android 4.2不供应象systrace那么分明的Tools,只是供应了对你的Tools箱的一些有益补偿。在本文的后面你会创造这些新Tools中的一个。
功用分析经常是一个复杂的Task,需求大量的阅历和对某些Tools、硬件、API的深化的知识等等。阅历使我能只用几分钟就履行在这里展示的分析——你可以在我十二月一日的Twitter stream上看到它“实时”爆发。你可能要多试几次才会感到这类Task很随便。
关于功用把持,谨记最首要的一件事就是不断用测试去验证你的举动。即使Falcon Pro 在Nexus4上运转帧率下降看起来很清楚,我还是需求确认一下。因此,我将运用装备到一部供应不合于Nexus功用概略并且比Nexus4更弱小的Nexus7上。Nexus 7供应了一个幽默的更有优势的功用分析Tools,我们以后再谈。
在Nexus 7装备运用次序并没有什么差异,我仍能看到帧率下降。运用甚至显得稍差。为了描画这个问题,我决定用4.1以后引入的“GPU呈现方式分析”Tools。你可以在运用设置下的“开发者选项”中找到它。
假设“开发者选项”在你的android4.2配备上不能应用,找到“关于手机”也许“关于平板”勾选底部的7的倍数构建选项。
方法说明:除非另有规矩,本分析每个测量是颠末每次缓慢动弹主时间轴上下几点,显示最多有一个额外的列表项。
在运转运用,主时间轴Start动弹时分,我在终端实行了以下号召:
$ adb shell dumpsys gfxinfo com.jv.falcon.pro
在发作的日志中,你会创造一个标题为: Profile data in ms. 这一节包含为每个窗口所属运用发作的3列表格。 为了应用这些数据, 轻易的复制表格到你喜好的电子表格软件中就会生成一个堆叠柱状图表。下面的图是我的测量结果 (原始表格数据 可以在线反省.)
留心:使顺利在60帧,每帧必须小于16毫秒完成。
关于Execute:假设实行耗费了太长的时间,这意味着你是跑在前面的图形管线。 android在运转时可以有3个缓冲区.假设你需求别的一个运用次序将阻塞直到其中的一个缓冲区释放出来。两个启事会爆发这类情况。第一,你的运用在Dalvik中快速绘制但在GPU显示列表时分消耗了大量时间。第二,你的运用次序花了很长的时间来实行第几帧;一旦管线满了他将没法赶上,除非动画完成。我们渴望Android在未来版本中改进。
该图分明证实了我的狐疑:但凡运用运转出色,不过有时分会运转帧率下降。
固然我们汇集的数据显示,运用有时烦善费太久去衬着,可是这并不是全部的现实。帧刷新率也能够被没有调解也许差错调解的帧所影响。例如,一个运用总是以少于16ms的时间来画图,可是有时分在帧之间展现更长的Task,有时他将失去一个帧。
Systrace 是用于检查,一个Falcon Pro 可否在遭受这个问题最轻易的Tools。这个Tools是一个具有非常低开支的系统分析Tools。它的时域分析相当精确,并且给你展示了全体系统在做什么,包括你的运用。
为了让systrace升引处,进入Developer options并且选择Enable traces。一个对话框出现,并且让你选择你想要分析什么类型的工作。我们只关心Graphics 和 View。
留心: 不要遗忘关掉分析GPU rendering。
为了应用systrace,掀开一个终端,并从Android SDK的tools/systrace下运转systrace.py:
$ ./systrace.py
默许该Tools将捕获5秒钟的工作。我只是上下动弹主时间轴。跟踪结果是一个自力的HTML文件。
建议:为了在systrack中可以导航,可以使用WASD键平移和缩放。W将会放大鼠标光标处的内容。
一个systrack文件展示了十分多幽默的信息。比如,它标明你可否有一个进程计划在CUP。假设你放大到名为10440: m.jv.falcon.pro的最后一行,你能看到运用做了些什么。假设你反省performTraversals中的一块,你能看到运用绘制一帧消耗了多长时间。
当然大大大多数的performtraversals低于16毫秒的临界值,可是有点需求更多的时间,这也证实了先前获得的测量结果(放大在935 MS标记看到多么一块。)
更故意思的是,你可以看到运用有时分会损失一帧,因为它没有安排一个绘制把持。放大到标记为270毫秒的地方,找到deliverInputEvent 块,消耗25毫秒。这些块表示运用消耗25毫秒来照应用户触摸工作。由于运用次序是应用ListView,这多是由于在适配器的一个问题,我们随后会回过分来谈判。
Systrace十分有效,不只是它能检查运用消耗过量的是在绘制上,而且也能协助我们找到其他的功用瓶颈。固然它很有效,可是也存在自身的局限性。它只供应了高层次的数据,我们需求使用其他的Tools才华明白它真正爆发了什么。
绘制功用问题可能有十分多根本启事,可是其中一个经常使用的是透支。透支爆发在运用每次向系统央求在其他物体上绘制内容。想像一个最轻易的运用问题:一个白色布景的窗口,在它的上面一个按钮。当系统绘制按钮时,要绘制已存在的白色布景上。这就是透支。
透支是不成避免的,可是过量的透支就会发作问题。配备具有有限的内存带宽,假设透支招致你的运用央求本钱逾越了可用带宽,就是构成功用下降。不合配备可以清楚担当透支的数量是变卦的。
一个好的阅历纪律是针对最大透支的2倍;这意味着你可以绘制屏幕一次,再画上画两次,每个像素总量的3倍。
透支的存在也但凡表示其他问题:太多的视图,层次结构复杂,通胀时间较长,等
Android供应了三个Tools来识别和修复过火绘制: Hierarchy Viewer, Tracer for OpenGL 和 Show GPU overdraw。前两个可以在ADT也许自力的监控Tools中找到。最后一个是开发这选项的一部分。
Show GPU overdraw 应用不用的颜色来绘制屏幕,来教唆过火绘制在那边爆发和程度怎样。掀开此选项然后别忘了封锁你自己的运用 – 未来的Android版本中将不再需求多么做。
在看Falcon Pro之前,让我们看一下设置Show GPU overdraw选项的页面长什么样。
2KB项目(www.2kb.com,源码交易平台),提供担保交易、源码交易、虚拟商品、在家创业、在线创业、任务交易、网站设计、软件设计、网络兼职、站长交易、域名交易、链接买卖、网站交易、广告买卖、站长培训、建站美工等服务