> [Systrace Walkthrough](https://developer.android.com/intl/zh-cn/tools/performance/systrace/index.html)?
> [Systrace](http://developer.android.com/intl/zh-cn/tools/help/systrace.html#options)?
> [Analyzing UI Performance with Systrace](http://developer.android.com/intl/zh-cn/tools/debugging/systrace.html#app-trace)?
> [Speed up your app](http://blog.udinic.com/2015/09/15/speed-up-your-app?from=timeline&isappinstalled=0)
# Systrace能做什么?
* 計算容器的性能
* 發現性能的瓶頸
# Systrace的使用準備
* 4.1以上
* root
* Android SDK Tools 20
* python環境
# Systrace啟動
你可以通過命令行或者Device Monitor兩種方式收集Systrace信息,以下以命令行為例介紹收集方式(因為我Device Monitor的方式報錯)。?
首先進入sdk下的platform-tools/systrace目錄下:?
?
然后在命令下執行以下命令來收集數據:?
`python systrace.py --time=10 -o mynewtrace.html sched gfx view wm`
上面的參數–time為間隔時間,-o為文件名,更詳細的參數信息如下:
| 參數名 | 意義 |
| --- | --- |
| `-h,--help` | 幫助信息 |
| `-o <FILE>` | 保存的文件名 |
| `-t N,--time=N` | 多少秒內的數據,默認為5秒,以當前時間點往后倒N個時間 |
| `-b N,--buf-size=N` | 單位為千字節,限制數據大小 |
| `-k <KFUNCS> --ktrace=<KFUNCS>` | 追蹤特殊的方法 |
| `-l,--list-categories` | 設置追蹤的標簽 |
| `-a <APP_NAME>,--app=<APP_NAME>` | 包名 |
| `--from-file=<FROM_FILE>` | 創建報告的來源trace文件 |
| `-e <DEVICE_SERIAL>,--serial=<DEVICE_SERIAL>` | 設備號 |
其中標簽可選項如下:
| 標簽名 | 意義 |
| --- | --- |
| gfx | Graphics |
| input | Input |
| view | View |
| webview | Webview |
| vm | Window Manager |
| am | Activity Manager |
| audio | Audio |
| video | Video |
| camera | Camera |
| hal | Hardware Modules |
| res | Resource Loading |
| dalvik | Dalvik VM |
| rs | RenderScript |
| sched | Cpu Scheduling |
| freq | Cpu Frequency |
| membus | Memory Bus Utilization |
| idle | Cpu Idle |
| disk | Disk input and output |
| load | Cpu Load |
| sync | Synchronization Manager |
| workq | Kernel Workqueues |
以上標簽并不支持所有機型,還有要想在輸出中看到任務的名稱,需要加上sched.
上面的命令執行完后,會生成一個html文件:?
?
打開該文件后,我們會看到如下頁面:?

# systrace快捷鍵
| 快捷鍵 | 作用 |
| --- | --- |
| w | 放大 |
| s | 縮小 |
| a | 左移 |
| d | 右移 |
| f | 返回選中區域,切放大選中區域 |

# Alerts
Alerts一欄標記了以下性能有問題的點,你可以點擊該點查看詳細信息,右邊側邊欄還有一個Alerts框,點擊可以查看每個類型的Alerts的數量:

# Frame
在每個包下都有Frame一欄,該欄中都有一個一個的`F`代表每一個`Frame`,用顏色來代表性能的好壞,依次為`綠-黃-紅`(性能越來越差),點擊某一個`F`,會顯示該Frame繪制過程中的一些Alerts信息:?

如果你想查看Frame的耗時,可以點擊某個F標志,然后按`m`鍵:?
