首页 > 技术知识 > 正文

1. 前言

Systrace是Android4.1中新增的性能数据采样和分析工具。它可帮助开发者收集Android关键子系统的运行信息,从而帮助开发者更直观的分析系统瓶颈,改进性能。

2. Systrace工具使用简介

(1).google chrome浏览器安装版本 54.0.2840.71 m (2).打开chrome,在搜索栏输入chrome://tracing

Android Systrace调试使用记录 (3)运行ddms工具,选中应用进程,开启systrace跟踪选项,抓取trace.html文件。 Android Systrace调试使用记录1

(4)在chrome浏览器tracing界面下,点击Load按钮,加载trace.html文件。 Android Systrace调试使用记录2

加载成功后如下如所示: Android Systrace调试使用记录3

3. systrace性能分析 3.1.SurfaceFlinger显示性能分析

SurfaceFlinger显示性能分析主要是观察平台的综合性能,包括硬件的cpu负载能力、irq响应速度和优先级策略、gpu渲染能力、平台总线响应速度、DDR I/O带宽性能、emmc/nand存储的I/O读写性能、系统软件的负载资源分布、调度优先级分配策略和框架层的软件设计优化程度等。

3.1.1.Systrace surfaceflinger简介 HW_VSYNC_ON_0:Atrace值为‘1’(如下图中红色框图1中的蓝色竖条)或‘0’(如下图中红色框图2中空白竖条)。 ‘1’表示前台应用UI正在更新frame,surfaceflinger需要接收并派发VSYNC信号; ‘0’表示前台应用UI没有更新frame,surfaceflinger主动关闭对VSYNC信号的接收和响应;

HW_VSYNC_0:androwcomposer 捕获的display硬件VSYNC中断信号; VSYNC_app:android hwcomposer分发给应用的VSYNC信号; VSYNC_sf:android hwcomposer分发给surfaceflinger进程的VSYNC信号; VSYNC_app 和HW_VSYNC_0存在vsyncSrc绘图延时,VSYNC_sf和HW_VSYNC_0存在合成延时。

Android Systrace调试使用记录4

3.1.2.Systrace surfaceflinger性能分析

SurfaceFlinger在一个VSYNV-sf周期内的图像合成过程低于16ms,是满足60P视觉流畅度的性能要求,如图所示。

Android Systrace调试使用记录5

当合成超过VSYNC-sf周期时,需要检查耗时原因,如下图所示,surfaceflinger合成过程在等待gpu模块释放绘图buffer的fence出现超时, Android Systrace调试使用记录6

4.UI流畅度性能分析 4.1.Systrace UI frame简介

应用程序的每一帧frame都是从接收到 display VSYNC信号后进行计算和绘制的。使用Systrace分析UI流畅度性能时,需要对UI Thread和RenderThread线程以及Atrace追踪函数有基本了解。 UI Thread 线程主要负责处理UI组件分发事件(包括绘制事件),并从显示子系统接收VSYNC信号。 RenderThread线程负责对发送GPU的绘制命令,减轻UI线程的压力,在UI线程阻塞时保持动画平滑。

Android Systrace调试使用记录7

将红色方框中的内容方法后,可以看到UI Thread 线程和 RenderThread线程的关键函数调用层级和耗时。

Android Systrace调试使用记录8

UI Thread 线程中的Choreographer类实例作用是协调动画,输入和绘制的时间,它从显示子系统接收VSYNC,然后安排绘制下一个frame的一部分工作。Choreographer类控制外部input输入事件的处理,动画执行,UI变化,以及提交执行;Choreographer对象中有四条链表,分别保存着待处理的输入事件,待处理的动画事件,待处理的遍历事件,以及待处理的提交时间。Choreographer会根据当前的时间,只处理事件链表中最后一个事件,当有耗时操作在主线程时,事件不能及时执行,就会出现所谓的“跳帧”,“卡顿”现象。

UI Thread 线程中 doFrame方法做的就是绘制下一帧frame,方法中会执行CallBack,优先级为:Choreographer.CALLBACK_INPUT>Choreographer.CALLBACK_ANIMATION>Choreographer.CALLBACK_TRAVERSAL>Choreographer.CALLBACK_COMMIT ViewRootImpl#scheduleTraversals–>Choreographer#postCallback(Choreographer.CALLBACK_TRAVERSAL,mTraversalRunnable, null)–>Traversal(measure,layout,draw)

4.2.Systrace UI frame警告分析

图抓取的systrace截图中,绿色的F表示帧率正常,黄色的F表示Alart警告,红色的F标识严重Alart警告;

Android Systrace调试使用记录9

绿色的F表示前台应用这一帧的绘制在16ms以内,流畅度60P正常。 Android Systrace调试使用记录10

黄色的F表示Alart警告,红色的F标识严重Alart警告,表示前台应用这一帧的绘制超过了16ms,出现卡顿。 Android Systrace调试使用记录11

用鼠标点击 红色或者黄色的F,绿色的F会变成灰色,同时下方会展示具体的Alart信息内容,该内容会提UI Thread渲染超时,出现JACK的可能性原因,可以帮助工程师进行排查问题。UI Thread渲染超时原因如下:

1). UI Thread 线程的代码执行出现阻塞,例如等待其他线程的资源释放或者信号量;

2). 网络资源线程和bitmap加载线程的优先级低于UI Thread 线程,避免此类后台线程抢占UI 线程调度资源,其优先级低于android.os.Process#THREAD_PRIORITY_BACKGROUND;

Android Systrace调试使用记录12

猜你喜欢