Systrace簡介
Systrace的功能包括跟蹤系統(tǒng)的I/O操作喜爷、內(nèi)核工作隊列澜沟、CPU負載以及Android各個子系統(tǒng)的運行狀況等撬槽。在Android平臺中,它主要由3部分組成:
- 內(nèi)核部分:Systrace利用了Linux Kernel中的ftrace功能恤煞。所以屎勘,如果要使用Systrace的話,必須開啟kernel中和ftrace相關(guān)的模塊
- 數(shù)據(jù)采集部分:Android定義了一個Trace類居扒。應(yīng)用程序可利用該類把統(tǒng)計信息輸出給ftrace概漱。同時,Android還有一個atrace程序喜喂,它可以從ftrace中讀取統(tǒng)計信息然后交給數(shù)據(jù)分析工具來處理
- 數(shù)據(jù)分析工具:Android提供一個systrace.py(python腳本文件瓤摧,位于Android SDK目錄/tools/systrace中,其內(nèi)部將調(diào)用atrace程序)用來配置數(shù)據(jù)采集的方式(如采集數(shù)據(jù)的標簽玉吁、輸出文件名等)和收集ftrace統(tǒng)計數(shù)據(jù)并生成一個結(jié)果網(wǎng)頁文件供用戶查看
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腳本的工作流程:
- 執(zhí)行DUT中的atrace并且獲得atrace命令的stdout
- 將atrace的stdout嵌入systrace工具目錄下的systrace_trace_viewer.html,這就是我們執(zhí)行命令時給出的mynewtrace.html文件的內(nèi)容进副。
mynewtrace.html = atrace stdout + systrace_trace_viewer.html - systrace_trace_viewer.html存在解析atrace stdout的JS腳本这揣,所以當我們打開生成的mynewtrace.html時,會得到圖形化的trace結(jié)果
具體有哪些category 可以通過python systrace.py -l
查看,不同的機器可能不一樣给赞,每個廠商可以定制自己的category机打,不同的Android版本也會不一樣
Systrace的官方文檔:
- https://developer.android.com/studio/profile/systrace-commandline.html
- https://developer.android.com/studio/profile/systrace.html
應(yīng)用中嵌入Systrace信息
- 應(yīng)用層
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,應(yīng)用層的trace log默認tag是application
Todo:如何分析Systrace
Eastmoney應(yīng)用的systrace圖