環(huán)境準(zhǔn)備
Systrace.py的使用需要安裝python 2.7.16 ,不能用python 3.x
systrace.py 使用報(bào)錯(cuò)
-
systrace.py -l報(bào)錯(cuò):ImportError: No module named win32con
systrace_error.png - 安裝win32con模塊
pip install pypiwin32
pypiwin32.png - 如果pip版本過低則需要升級pip
python -m pip install --upgrade pip

- python報(bào)錯(cuò): pImportError: No module named six.moves 重新安裝
six模塊
pip uninstall six
pip install six
O@JCUZ__52V2XSZUM{WI3CX.png
- 再次驗(yàn)證systrace.py
systrace.py -l
systrace_suc.png
看到這里就表明systrace.py能使用了
命令用法
python systrace.py [options] [category1] [category2] ... [categoryN]
options
其中options可取值:
| options | 解釋 |
|---|---|
-o <FILE> |
輸出的目標(biāo)文件 |
| -t N, –time=N | 執(zhí)行時(shí)間,默認(rèn)5s |
| -b N, –buf-size=N | buffer大小(單位kB),用于限制trace總大小,默認(rèn)無上限 |
-k <KFUNCS>,–ktrace=<KFUNCS> |
追蹤kernel函數(shù),用逗號分隔 |
-a <APP_NAME>,–app=<APP_NAME> |
追蹤應(yīng)用包名,用逗號分隔 |
–from-file=<FROM_FILE> |
從文件中創(chuàng)建互動的systrace |
-e <DEVICE_SERIAL>,–serial=<DEVICE_SERIAL> |
指定設(shè)備 |
| -l, –list-categories | 列舉可用的tags |
category
category可取值:
| category | 解釋 |
|---|---|
| gfx | Graphics |
| input | Input |
| view | View System |
| 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 | Dalvik VM |
| rs | RenderScript |
| bionic | Bionic C Library |
| power | Power Management |
| sched | CPU Scheduling |
| 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 |
示例
例如,在systrace.py所在目錄下執(zhí)行指令:
python systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq
./systrace.py -b 32768 -t 5 -o mytrace.html wm gfx input view sched freq //等價(jià)
又例如,輸出全部的trace信息
python systrace.py -b 32768 -t 5 -o mytrace.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
注:收集trace,需要提前安裝python,并且一定要注意必須是python 2.x,而不是能3.x,否則可能會出現(xiàn)問題。另外,buffer大小不可過大,否則會出現(xiàn)oom異常。
- 示例1
systrace.py -t 10 -o d:/mytrace2.html wm gfx input view sched freq -a com.example.myapplication
如何分析systrace?
- 將chrome瀏覽器升級到版本 55.0.2883.75 (64-bit)
- 打開chrome瀏覽器,在地址欄輸入chrome://tracing/,然后點(diǎn)擊load,選取上述步驟中生成的html文件,正常情況下會看到如下圖所示界面
橫坐標(biāo)是以時(shí)間為單位,縱坐標(biāo)是以進(jìn)程-線程的方式來劃分,同一進(jìn)程的線程為一組放在一起,可收縮/展開,如下圖:

Frames
產(chǎn)生的html格式的trace文件必須使用Google Chrome打開,才能正確地解析并已圖標(biāo)形式展現(xiàn)。上圖中紅色圈起來的,都是可以點(diǎn)擊操作的地方,最上方是搜索欄,往下處是Alerts按鈕,再往下是鼠標(biāo)操作模式。
在每個(gè)app進(jìn)程,都有一個(gè)Frames行,正常情況以綠色的圓點(diǎn)表示。當(dāng)圓點(diǎn)顏色為黃色或者紅色時(shí),意味著這一幀超過16.6ms(即發(fā)現(xiàn)丟幀),這時(shí)需要通過放大那一幀進(jìn)一步分析問題。對于Android 5.0(API level 21)或者更高的設(shè)備,該問題主要聚焦在UI Thread和Render Thread這兩個(gè)線程當(dāng)中。對于更早的版本,則所有工作在UI Thread。
Alerts
Systrace能自動分析trace中的事件,并能自動高亮性能問題作為一個(gè)Alerts,建議調(diào)試人員下一步該怎么做。
比如對于丟幀是,點(diǎn)擊黃色或紅色的Frames圓點(diǎn)便會有相關(guān)的提示信息;另外,在systrace的最右上方,有一個(gè)Alerts tab可以展開,這里記錄著所有的的警告提示信息。
三、 快捷操作
導(dǎo)航操作
| 導(dǎo)航操作 | 作用 |
|---|---|
| w | 放大,[+shift]速度更快 |
| s | 縮小,[+shift]速度更快 |
| a | 左移,[+shift]速度更快 |
| d | 右移,[+shift]速度更快 |
快捷操作
| 常用操作 | 作用 |
|---|---|
| f | 放大當(dāng)前選定區(qū)域 |
| m | 標(biāo)記當(dāng)前選定區(qū)域 |
| v | 高亮VSync |
| g | 切換是否顯示60hz的網(wǎng)格線 |
| 0 | 恢復(fù)trace到初始態(tài),這里是數(shù)字0而非字母o |
| 一般操作 | 作用 |
|---|---|
| h | 切換是否顯示詳情 |
| / | 搜索關(guān)鍵字 |
| enter | 顯示搜索結(jié)果,可通過← →定位搜索結(jié)果 |
| ` | 顯示/隱藏腳本控制臺 |
| ? | 顯示幫助功能 |
對于腳本控制臺,除了能當(dāng)做記事本的功能,目前還不清楚有啥功能,或許還在開發(fā)中。
模式切換
- Select mode: 雙擊已選定區(qū)能將所有相同的塊高亮選中;(對應(yīng)數(shù)字1)
- Pan mode: 拖動平移視圖(對應(yīng)數(shù)字2)
- Zoom mode:通過上/下拖動鼠標(biāo)來實(shí)現(xiàn)放大/縮小功能;(對應(yīng)數(shù)字3)
- Timing mode:拖動來創(chuàng)建或移除時(shí)間窗口線。(對應(yīng)數(shù)字4)
可通過按數(shù)字1~4,用于切換鼠標(biāo)模式; 另外,按住alt鍵,再滾動鼠標(biāo)滾輪能實(shí)現(xiàn)放大/縮小功能。



