[Android] 效能工具Systrace的使用
Systrace 是用於收集和檢測裝置在執行過程中的時序資訊的一個指令碼工具,它結合了來自Android核心的資料,例如CPU排程程式,磁碟活動和應用程式執行緒,最終會以HTML的形式報告。
如何使用systrace
- Step1.安裝systrace 在android studio中,Tools -> Android -> SDK Manager -> SDK Tools,點選Android SDK platform-Tools並安裝,安裝完成後,進入/platform-tools/systrace中,systrace指令碼便位於這裡。
- Step2.安裝python systrace是一個python指令碼,因此需要安裝Python才能執行:
sudo apt-get install python3.6
- Step3.連線手機
使用USB連線要測試的手機,並開啟USB除錯開關。
完成以上步驟,就可以進入android-sdk/platform-tools/systrace使用systrace了,下面來看看執行systrace時的一些命令。
命令
systrace執行的命令格式如下:
python systrace.py [options] [category1 [category2 ...]]
options表示選項,category表示需要抓取的trace類別,預設抓取所有的類別,也可以進行指定。
常用options有:
Global options | Description |
---|---|
-h |–help | 獲取幫助資訊. |
-l | --list-categories | 列出連線裝置上所有的trace category. |
-o file.html | 指定一個報告結果的html檔案 |
-t N | 設定一個時間(秒),到達時間後,自動結束,不指定時按Enter鍵結束 |
如:
$ python systrace.py -o mynewtrace.html sched freq idle am wm gfx view \
binder_driver hal dalvik camera input res
可以通過如下命令檢視所有的category:
$ python systrace.py -l
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
res - Resource Loading
dalvik - Dalvik VM
rs - RenderScript
bionic - Bionic C Library
power - Power Management
pm - Package Manager
ss - System Server
database - Database
network - Network
adb - ADB
vibrator - Vibrator
aidl - AIDL calls
pdx - PDX services
sched - CPU Scheduling
irq - IRQ Events
i2c - I2C Events
freq - CPU Frequency
idle - CPU Idle
disk - Disk I/O
load - CPU Load
sync - Synchronization
workq - Kernel Workqueues
memreclaim - Kernel Memory Reclaim
regulators - Voltage and Current Regulators
binder_driver - Binder Kernel driver
binder_lock - Binder global lock trace
NOTE: more categories may be available with adb root
其他的選項使用較少,就不列舉了。 通過以上的這些命令,最終將會獲得html型別的報告結果,下面我們就看看如何分析該HTML報告。
檢視報告
通過chrome瀏覽器開啟html報告,將會出現類似如下圖的結果: 左側這一欄表示各個程序中trace的TraceName,中間則是各個Trace對應的時間軸,可以看到由各種顏色標記。其中綠色表示正常,其他顏色如紅色、黃色則表示需要優化。
調查UI效能
Frames
正常情況下,大約以每秒60幀,一幀約16.6ms的速率渲染,如果超過這個時間,F圓圈就會變成紅色或者黃色.這時可以點選F圓圈,會給出詳細資訊,以及可能的解決方案,如下圖所示:
對於Android 5.0(API level 21)或者更高的裝置,渲染幀的工作在UI Thread和Render Thread這兩個執行緒當中。對於更早的版本,則所有工作在UI Thread上進行.
Alerts
當點選較慢的渲染後(紅色F圓圈),會在報告的底部窗格中看到Alert.此外還可以通過點選右側欄"Alerts"檢視所有的警報,通常,一個區域的微小變化或改進可以消除應用程式中的整個警報類別。
在Alert一欄中,列出了所有的Alert,點選後可以檢視詳細的資訊: 點選單個Alert後:
快捷鍵
以下是操作HTML報告的快捷鍵,通過這幾個鍵,可以對整個報告進行放大,縮小,搜尋,高亮等操作,可以快速的檢視測試過程中哪裡耗時較多。
Key | Description |
---|---|
W | 放大時間線 |
S | 縮小時間線 |
A | 左移時間線 |
D | 右移時間線 |
f | 放大當前所選部分 |
0 | 恢復縮放和平移 |
E | 時間軸置於當前滑鼠位置的中心 |
G | 從所選任務端的開始處顯示網格 |
Shift + G | 從所選任務端的結束處顯示網格 |
-> | 在當前選定的時間軸上選擇下一個事件 |
<- | 在當前選定的時間軸上選擇上一個事件 |
m | 高亮顯示所選部分 |
? | 顯示幫助 |
/ | 搜尋欄位 |
Enter | 逐步搜尋結果 |