转 http://maoao530.github.io/2017/02/06/systrace/

理解和使用systrace。

一、介绍systrace

systrace是Android4.1版本之后推出的,对系统Performance分析的工具。

systrace的功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。在Android平台中,它主要由3部分组成:

  • 内核部分:Systrace利用了Linux Kernel中的ftrace功能。所以,如果要使用systrace的话,必须开启kernel中和ftrace相关的模块。
  • 数据采集部分:Android定义了一个Trace类。应用程序可利用该类把统计信息输出给ftrace。同时,Android还有一个atrace程序,它可以从ftrace中读取统计信息然后交给数据分析工具来处理。
  • 数据分析工具:Android提供一个systrace.py(python脚本文件,位于Android SDK目录/sdk/platform-tools/systrace中,其内部将调用atrace程序)用来配置数据采集的方式(如采集数据的标签、输出文件名等)和收集ftrace统计数据并生成一个结果网页文件供用户查看。

二、抓取systrace

有三种方式抓取systrace:

2.1 systrace.py工具

命令行的用法是:

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

需要装python,最好是2.7版本,避免出现问题,示例如下:

1
2
cd android-sdk/platform-tools/systrace
python systrace.py --time=10 -o mynewtrace.html sched gfx view wm

2.1.1 options

其中options可取值:

options 描述
-o < FILE > 输出的目标文件
-t N, –time=N 执行时间,默认5s
-b N, –buf-size=N buffer大小(单位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.1.2 category

其中category可取值:

category 描述
gfx Graphics
input Input
view View System
webview WebView
wm Window Manager
am Activity Manager
sm Sync Manager
audio Audio
video Video
camera Camera
hal Hardware Modules
app Application
res Resource Loading
dalvik Dalvik VM
rs RenderScript
bionic Bionic C Library
power Power Management
sched CPU Scheduling
irq IRQ Events
freq CPU Frequency
idle CPU Idle
disk Disk I/O
mmc eMMC commands
load CPU Load
sync Synchronization
workq Kernel Workqueues
memreclaim Kernel Memory Reclaim
regulators Voltage and Current Regulators

2.2 Device Monitor(DDMS)

可以使用Eclipse或者Android Studio集成开发工具,切换到DDMS,点击devices,点击Systrace按钮:

补充说明:

  • Destionation file :trace输出的文件路径
  • Trace duration : 配置抓取systrace的时间,通常设置5秒,并在5秒内重现问题,时间太短会导致问题重现时没有被抓到,时间太长会导致Java Heap不够而无法保存,因此在能抓到问题点的情况下,时间越小越好。
  • Trace Buffer Size : Buffer Size是存储systrace的size,同样的,太小会导致信息丢失,时间太长会导致Java Heap不够而无法保存,建议20480。
  • Enable Application Traces from :如果用户有自己在应用程序中加入自己的systrace log:
    Trace.beginSection("newInstance"); Trace.endSection();
    那么此处必须选择这个应用对应的进程名字,否则新加的systrace log不会被抓到。

三、自定义systrace

有时候为了debug方便,那么我们需要自己在apk或者framework层添加trace信息:

3.1 app层

app可以使用:

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

然后通过python systrace.py --app=sectionName 指定apk,或者通过ddms选择指定apk,抓取systrace分析。

3.2 Java framework层

Java Framework可以使用:

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

抓取systrace分析。

3.3 Native framework层

Native Framework可以使用:最好在函数开头声明定义

1
2
#include <cutils/trace.h>
ATRACE_CALL()

抓取systrace分析。

四、分析systrace

Google Chrome浏览器可以打开systrace,如果打不开,可以通过chrome://tracing/,然后load systrace。

以分析UI Performance为例:

4.1 Frame

每个应用都有一行专门显示frame,每一帧就显示为圆圈,正常绘制是1秒60帧,大约一帧16.6毫秒,在这个值以下是正常颜色绿色,如果超过它就会变成红色、黄色。非绿色的都说明有问题。这时需要通过’w’键放大那一帧,然后按‘m’键高亮,进一步分析问题。

对于Android 5.0(API level 21)或者更高的设备,该问题主要聚焦在UI ThreadRender Thread这两个线程当中。对于更早的版本,则所有工作在UI Thread

4.2 Alerts

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

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

五、快捷操作

5.1 导航操作

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

5.2 快捷操作

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

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

5.3 模式切换

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

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

Reference:

  • https://developer.android.com/studio/profile/systrace-commandline.html
  • https://developer.android.com/studio/profile/systrace.html
  • http://gityuan.com/2016/01/17/systrace/

systrace的使用相关推荐

  1. 理解和使用systrace

    理解和使用systrace. 一.介绍systrace systrace是Android4.1版本之后推出的,对系统Performance分析的工具. systrace的功能包括跟踪系统的I/O操作. ...

  2. Android 常用的性能分析工具详解:GPU呈现模式, TraceView, Systrace, HirearchyViewer(转)...

    此篇将重点介绍几种常用的Android性能分析工具: 一.Logcat 日志 选取Tag=ActivityManager,可以粗略地知道界面Displaying的时间消耗.当我们打开一个Activit ...

  3. systrace html空白,Android性能优化之Systrace工具介绍(一) _ Systrace生成的trace.html打开空白或者打不开的解决办法...

    1.必须用Chrome打开 2.在mac电脑上,可能Chrome打开也是空白,解决办法是:在chrome地址栏中输入"chrome:tracing",然后点击load按钮load你 ...

  4. TraceView(profile) and Systrace

    TraceView(profile) 代码里面 拖到AS ----------------------------------------------------------------------- ...

  5. Systrace的用法小结

    通过SysTrace可以帮助我们分析性能问题,包含方法的耗时时长.CPU的使用情况.ANR.布局情况等:相比性能工具TraceView,主要用来分析每个方法的执行时间,对于冷启动而言,想抓trace只 ...

  6. 如何抓取Camera systrace

    如何抓取Camera systrace 在分析camera performance issues时,需要抓取systrace给来定位问题. 由于平台有设置property来控制一些trace tag的 ...

  7. Chrome查看Android的systrace抓取的log

    1.在Chrome浏览器输入:chrome://tracing 2.将systrace抓取的文件拖进去即可

  8. Mac使用systrace/monitor/adb等工具

    1.Android monitor # cd android-sdks/tools # ./monitor&2.Android SDK Manager # ./android3.fastboo ...

  9. Android:通过systrace进行性能分析及使用-详细

    Android:通过systrace进行性能分析 https://www.cnblogs.com/blogs-of-lxl/p/10926824.html 一.Systrace 简介 Systrace ...

  10. btrace 开源!基于 Systrace 高性能 Trace 工具

    介绍 btrace(又名 RheaTrace) 是抖音基础技术团队自研的一款高性能 Android Trace 工具,它基于 Systrace 实现,并针对 Systrace 不足之处加以改进,核心改 ...

最新文章

  1. 201621123048《Java程序设计》第八周学习总结
  2. navicat mysql两张表建立联系_初识MySQL
  3. 在ubuntu linux 中编写一个自己的bash脚本
  4. Pandas系列(二)查询数据
  5. 复现autotune算法时遇到的若干问题及其解决方案
  6. objective-C的内存管理机制琢磨不透
  7. 从未改过的网名,一如既往的孤荷凌寒——我的信息技术之路之五
  8. GCC编译宏_GLIBCXX_USE_CXX11_ABI背景分析和实现原理
  9. HIT2020春软件构造lab1
  10. 网页兼容性调好了么?
  11. web后台管理系统框架
  12. 阿噗啊噗服务器维护,这些App我能笑一年!阿噗整理的20个奇葩App,没玩过你就OUT了!...
  13. 男人四十一枝花,我花开后百花杀!Orz..繁忙的工作之余,joke一下~~
  14. 新手如何安装ai换脸软件deepfacelab中文版
  15. 常用软件系列之快速搜索软件--光速搜索
  16. 金为什么可以生水?水为什么可以生木?
  17. FS5264内置 MOS 降压型大功率 LED 恒流驱动器
  18. 布道”织链为网“ 冒志鸿应邀在猎豹移动演讲 | ArcBlock 动态
  19. php smtp 抄送,PHP-SMTP发送邮件
  20. VB开发CAD——AutoCAD切成中望CAD

热门文章

  1. mysql 性能指标计算_干货|MySQL 性能指标及计算方法总结
  2. python3 读文件 编码_Pyhton3下的ISO8859-1编码文件的读取
  3. C++自动化(模板元)编程基础与应用(4)
  4. Qt 界面美化教程 QSS QML Qt自绘方式优缺点对比
  5. ubuntu WeChat 网易云音乐 Mac OS主题 wps 截图链接版
  6. wenz ces123
  7. DHCP与DHCP中继--原理与配置--华为实验--配置接口模式、全局模式以及中继模式
  8. atto软件测试速度,基于ATTO的传输速度VS文件大小测试
  9. 苹果android投屏,iphone怎么投屏到mac?苹果手机投屏到苹果电脑方法
  10. java解析json类型的list