Systrace 是 Android 系統級性能分析首選工具,能記錄系統組件隨時間運行狀態、自動標註掉幀並給出修復建議。本文涵蓋埋點 API、命令參數、HTML 報表解讀、快捷鍵操作與模式切換。
| 層級 | API | 說明 |
|---|---|---|
| Java Framework | Trace.traceBegin(tag, name) / Trace.traceEnd(tag) | 成對使用,同一線程,建議 finally 區塊呼叫 end |
| App 層 | Trace.beginSection(name) / Trace.endSection() | 預設 tag=TRACE_TAG_APP,命令需加 app 參數 |
| Native Framework | ATRACE_CALL() | C++ 宏,自動配對 begin/end |
python systrace.py [options] [category1] [category2] ...
| 參數 | 說明 |
|---|---|
| -o <FILE> | 輸出 HTML 文件路徑 |
| -t N / --time=N | 錄製秒數 (預設 5s) |
| -b N / --buf-size=N | Buffer 大小 KB (限制總量,預設無上限) |
| -k <KFUNCS> / --ktrace | Kernel 函數追蹤,逗號分隔 |
| -a <APP_NAME> / --app | 追蹤指定應用包名,逗號分隔 |
| --from-file <FILE> | 從文件生成互動報表 |
| -e <SERIAL> / --serial | 指定設備序列號 |
| -l / --list-categories | 列出所有可用 tag |
gfx input viewwm am sm (Window/Activity/Sync Manager)audio video camerahal app res dalvik rs bionicpower sched irq freq idledisk mmc load sync workq memreclaimregulators# 核心場景:UI 掉幀分析
python systrace.py -b 32768 -t 10 -o trace.html wm gfx input view sched freq
# 全量收集 (需大 buffer)
python systrace.py -b 65536 -t 15 -o full.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
注意:需 Python 2.x (非 3.x),buffer 過大導致 OOM。

每個 App 進程有 Frames 行,綠點=正常 (≤16.6ms),黃/紅點=掉幀。點擊黃/紅點查看詳細 Alert。Android 5.0+ 重點關注 UI Thread 與 Render Thread。

右上角 Alerts 標籤頁彙總所有警告,點擊可跳轉對應時間點,給出具體優化建議 (如「減少 onDraw 複雜度」、「避免主線程 I/O」等)。
| 類別 | 按鍵 | 動作 |
|---|---|---|
| 導航 | W | 放大 (+Shift 加速) |
| S | 縮小 (+Shift 加速) | |
| A | 左移 (+Shift 加速) | |
| D | 右移 (+Shift 加速) | |
| 常用 | F | 放大選區 |
| M | 標記選區 | |
| V | 高亮 VSync | |
| G | 切換 60Hz 網格線 | |
| 0 (數字) | 恢復初始視圖 | |
| 一般 | H | 切換詳情面板 |
| / | 搜索關鍵字 | |
| Enter | 跳轉搜索結果 (←→ 導航) | |
| ` | 顯示/隱藏腳本控制台 | |
| ? | 顯示幫助 |
輔助:Alt + 滾輪 縮放。