性能工具Systrace

无论是系统开发者,还是应用开发者都应该掌握systrace这一神技。

一、概述

保证系统流畅度,也就是保证系统能连续不间断地提供每秒60帧的运行状态。当出现掉帧时(也可称为Jank),需要知道当前整个系统所处的状态,systrace便是最佳的选择,它能手机检测android系统各个组件随着时间的运行状态,并能提示该如何有效地修复问题,接下来说说systrace如何使用以及如何解读。

二、Systrace

2.1 自定义systrace

java framework层

import android.os.Trace;
Trace.traceBegin(long traceTag, String methodName)
Trace.traceEnd(long traceTag)

在代码中必须成对出现,一般将traceEnd放入到finally语句块,另外,必须在同一个线程。

app层

import android.os.Trace;
Trace.beginSection(String sectionName)
Trace.EndSection()

这里默认的traceTag为TRACE_TAG_APP,systrace命令通过指定app参数即

native framework层

#include<utils/Trace.h>
ATRACE_CALL();

2.2 命令用法

命令行

python systrace.py [options] [category1] [category2] ... [categoryN]

2.2.1 options

其中options可取值:

options解释
-o <FILE>输出的目标文件
-t N, –time=N执行时间,默认5s
-b N, –buf-size=Nbuffer大小(单位kB),用于限制trace总大小,默认无上限
-k <KFUNCS>,–ktrace=<KFUNCS>追踪kernel函数,用逗号分隔
-a <APP_NAME>,–app=<APP_NAME>追踪应用包名,用逗号分隔
–from-file=<FROM_FILE>从文件中创建互动的systrace
-e <DEVICE_SERIAL>,–serial=<DEVICE_SERIAL>指定设备
-l, –list-categories列举可用的tags

2.2.2 category

category可取值:

category解释
gfxGraphics
inputInput
viewView System
webviewWebView
wmWindow Manager
amActivity Manager
smSync Manager
audioAudio
videoVideo
cameraCamera
halHardware Modules
appApplication
resResource Loading
dalvikDalvik VM
rsRenderScript
bionicBionic C Library
powerPower Management
schedCPU Scheduling
irqIRQ Events
freqCPU Frequency
idleCPU Idle
diskDisk I/O
mmceMMC commands
loadCPU Load
syncSynchronization
workqKernel Workqueues
memreclaimKernel Memory Reclaim
regulatorsVoltage and Current Regulators

2.2.3 示例

例如,在systrace.py所在目录下执行指令:

python systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq
./systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq //等价

又例如,输出全部的trace信息

python systrace.py -b 32768 -t 5 -o mytrace.html gfx input view webview wm am sm audio video camera hal app res dalvik rs bionic power sched irq freq idle disk mmc load sync workq memreclaim regulators

注:收集trace,需要提前安装python,并且一定要注意必须是python 2.x,而不是能3.x,否则可能会出现问题。另外,buffer大小不可过大,否则会出现oom异常。

2.3 图形化

横坐标是以时间为单位,纵坐标是以进程-线程的方式来划分,同一进程的线程为一组放在一起,可收缩/展开,如下图:

《性能工具Systrace》

2.3.1 Frames

产生的html格式的trace文件必须使用Google Chrome打开,才能正确地解析并已图标形式展现。上图中红色圈起来的,都是可以点击操作的地方,最上方是搜索栏,往下处是Alerts按钮,再往下是鼠标操作模式。

在每个app进程,都有一个Frames行,正常情况以绿色的圆点表示。当圆点颜色为黄色或者红色时,意味着这一帧超过16.6ms(即发现丢帧),这时需要通过放大那一帧进一步分析问题。对于Android 5.0(API level 21)或者更高的设备,该问题主要聚焦在UI Thread和Render Thread这两个线程当中。对于更早的版本,则所有工作在UI Thread。

《性能工具Systrace》

2.3.2 Alerts

Systrace能自动分析trace中的事件,并能自动高亮性能问题作为一个Alerts,建议调试人员下一步该怎么做。

比如对于丢帧是,点击黄色或红色的Frames圆点便会有相关的提示信息;另外,在systrace的最右上方,有一个Alerts tab可以展开,这里记录着所有的的警告提示信息。

注:本文讲到最新版的systrace,其中sdk 23,chrome版本49.0,部分功能在老版本systrace并没有。

三、 快捷操作

3.1 导航操作

导航操作作用
w放大,[+shift]速度更快
s缩小,[+shift]速度更快
a左移,[+shift]速度更快
d右移,[+shift]速度更快

3.2 快捷操作

常用操作作用
f放大当前选定区域
m标记当前选定区域
v高亮VSync
g切换是否显示60hz的网格线
0恢复trace到初始态,这里是数字0而非字母o
一般操作作用
h切换是否显示详情
/搜索关键字
enter显示搜索结果,可通过← →定位搜索结果
`显示/隐藏脚本控制台
?显示帮助功能

对于脚本控制台,除了能当做记事本的功能,目前还不清楚有啥功能,或许还在开发中。

3.3 模式切换

  1. Select mode: 双击已选定区能将所有相同的块高亮选中;(对应数字1)
  2. Pan mode: 拖动平移视图(对应数字2)
  3. Zoom mode:通过上/下拖动鼠标来实现放大/缩小功能;(对应数字3)
  4. Timing mode:拖动来创建或移除时间窗口线。(对应数字4)

可通过按数字1~4,用于切换鼠标模式; 另外,按住alt键,再滚动鼠标滚轮能实现放大/缩小功能。

    原文作者:Gityuan
    原文地址: http://gityuan.com/2016/01/17/systrace/
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞