一、簡介
Systrace是Android4.1引入的性能分析工具。利用ftrace,在系統(tǒng)關鍵位置都有埋點,主要用于分析系統(tǒng)調(diào)用耗時問題,可以自定義trace標簽來細化調(diào)用棧。
二、啟動
ddms

點擊左上角按鈕,出來右邊選項框,上面配置文件名、持續(xù)時長、buffer大小、調(diào)試的應用程序(如果對某個應用加了trace標簽,必須選上對應應用包名)
命令行
function systrace {
systrace_path=“/xxx/Android/sdk/platform-tools/systrace/systrace.py"
python $systrace_path gfx input audio view webview wm am hal app res dalvik rs bionic power sched freq idle load sync workq memreclaim irq disk binder_driver binder_lock -b 10240 -t 5 -o “/xxx/systrace/systrace-$1.html"
}
直接整理為腳本方法,配置到bashrc中去,方便抓取。
參數(shù)分為兩個部分options和category
options可取值:
| options | 解釋 |
|---|---|
| -o <FILE> | 指定trace數(shù)據(jù)文件的輸出路徑,如果不指定就是當前目錄的trace.html |
| -t N, –time=N | 執(zhí)行時間,默認5s。絕對不要把時間設的太短導致你操作沒完Trace就跑完了,這樣會出現(xiàn)Did not finish 的標簽,分析數(shù)據(jù)就基本無效了 |
| -b N, –buf-size=N | buffer大小(單位kB),用于限制trace總大小,默認無上限 |
| -k <KFUNCS>,–ktrace=<KFUNCS> | 追蹤kernel函數(shù),用逗號分隔 |
| -a <APP_NAME>,–app=<APP_NAME> | 這個選項可以開啟指定包名App中自定義Trace Label的Trace功能。也就是說,如果你在代碼中使用了Trace.beginSection("tag"), Trace.endSection;默認情況下,你的這些代碼是不會生效的,因此,這個選項一定要開啟 |
| –from-file=<FROM_FILE> | 從文件中創(chuàng)建互動的systrace |
| -e <DEVICE_SERIAL>,–serial=<DEVICE_SERIAL> | 指定設備,在特定連接設備上進行跟蹤,由設備序列號標識 。 |
| -l, –list-categories | 這個用來列出你分析的那個手機系統(tǒng)支持的Trace模塊,一般來說,高版本的支持的模塊更多 |
category可取值:
| category | 解釋 |
|---|---|
| gfx | Graphic系統(tǒng)的相關信息 |
| input | Input |
| view | View繪制相關信息 |
| 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 | 虛擬機相關信息 |
| rs | RenderScript |
| bionic | Bionic C Library |
| power | Power Management |
| sched | CPU調(diào)度的信息 |
| binder_driver | Binder驅(qū)動的相關信息 |
| core_services | SystemServer中系統(tǒng)核心Service的相關信息 |
| 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 |
三、標簽添加
app:
Trace.beginSection("issueMethod");
issueMethod();
Trace.endSection();
framework java:
Trace.traceBegin(Trace.TRACE_TAG_VIEW, "inflate”);
Trace.traceEnd(Trace.TRACE_TAG_VIEW);
native:
#define ATRACE_TAG ATRACE_TAG_ALWAYS
#include <utils/Trace.h> // for c++
#include <cutils/trace.h> // for c
ATRACE_CALL();
ATRACE_BEGIN();
ATRACE_END();
四、Systrace特征

1:幀點:對60hz頻率來說,綠:16.6ms內(nèi),黃、紅均為超過16.6ms,紅比黃更嚴重。
2:task狀態(tài)
- 灰色:Sleeping
- 藍色:Runnable 它可以運行,但是需要等待調(diào)度程序喚醒
- 綠色:Running
- 橙色:Uninterruptible sleep 不響應信號
3:函數(shù)調(diào)用
對應issue function處理:通過traceview來定位具體耗時問題,增加trace標簽細化調(diào)用棧確認問題。
iq:system_erver端事件讀取

CPU

從頻率最大值能了解CPU架構,從調(diào)度看繁忙程度和調(diào)度任務,同時可以觀察freq是否跑在最大值等。
五、使用

1 看細節(jié),比如框調(diào)度、框CPU和對應應用程序調(diào)用??丛敿殧?shù)據(jù)
2 看范圍,比如看某個階段的執(zhí)行時長

搜索框:
1 頁面搜索 比如快速定位到左邊欄對應的包名、進程uid等。
2 systrace內(nèi)部內(nèi)容搜索 比如確認pid、tid是誰,被誰喚醒等信息。