Android Systrace

Systrace简介

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

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

Systrace 在Android 4.1 (API Level 16)引入

项目地址

Systrace 是android AOSP项目中的一个,git仓库地址:
https://android.googlesource.com/platform/external/chromium-trace.git

Systrace工具的使用

  • 图形界面
    AndroidStudio中: Tools > Android > Android Device Monitor
  • 命令行
    python systrace.py --time=10 -o mynewtrace.html category[eg:sched gfx view wm ]

这个python脚本的工作流程:

  1. 执行DUT中的atrace并且获得atrace命令的stdout
  2. 将atrace的stdout嵌入systrace工具目录下的systrace_trace_viewer.html,这就是我们执行命令时给出的mynewtrace.html文件的内容。
    mynewtrace.html = atrace stdout + systrace_trace_viewer.html
  3. systrace_trace_viewer.html存在解析atrace stdout的JS脚本,所以当我们打开生成的mynewtrace.html时,会得到图形化的trace结果

具体有哪些category 可以通过python systrace.py -l 查看,不同的机器可能不一样,每个厂商可以定制自己的category,不同的Android版本也会不一样

Systrace的官方文档:

应用中嵌入Systrace信息

  • 应用层
    import android.os.Trace; Trace.beginSection(String sectionName) Trace.EndSection()
  • Java framework层 [API有@hide注解]
    import android.os.Trace; Trace.traceBegin(long traceTag, String methodName) Trace.traceEnd(long traceTag)

注: 在APP层不能指定traceTag,应用层的trace log默认tag是application

Todo:如何分析Systrace

Eastmoney应用的systrace图

Todo: Activity Dialog PopupWindow的区别

Todo: 硬件加速

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容