Systrace
命令用法
命令行
python systrace.py [options] [category1] [category2] ... [categoryN]
options
其中options可取值:
options | 解釋 |
---|---|
-o <FILE > |
輸出的目標文件 |
-t N, –time=N | 執(zhí)行時間烫葬,默認5s |
-b N, –buf-size=N | buffer大薪缁 (單位kB),用于限制trace總大小凡蜻,默認無上限 |
-k <KFUNCS >,–ktrace=<KFUNCS > |
追蹤kernel函數(shù)垢箕,用逗號分隔 |
-a <APP_NAME >,–app=<APP_NAME > |
追蹤應用包名划栓,用逗號分隔 |
–from-file=<FROM_FILE > |
從文件中創(chuàng)建互動的systrace |
-e <DEVICE_SERIAL >,–serial=<DEVICE_SERIAL > |
指定設備 |
-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 //等價
又例如条获,輸出全部的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異常。
Frames
產(chǎn)生的html格式的trace文件必須使用Google Chrome打開萍悴,才能正確地解析并已圖標形式展現(xiàn)。上圖中紅色圈起來的寓免,都是可以點擊操作的地方,最上方是搜索欄撕予,往下處是Alerts按鈕蜈首,再往下是鼠標操作模式实抡。
在每個app進程,都有一個Frames行欢策,正常情況以綠色的圓點表示吆寨。當圓點顏色為黃色或者紅色時踩寇,意味著這一幀超過16.6ms(即發(fā)現(xiàn)丟幀),這時需要通過放大那一幀進一步分析問題俺孙。對于Android 5.0(API level 21)或者更高的設備辣卒,該問題主要聚焦在UI Thread和Render Thread這兩個線程當中。對于更早的版本睛榄,則所有工作在UI Thread。
Alerts
Systrace能自動分析trace中的事件场靴,并能自動高亮性能問題作為一個Alerts港准,建議調試人員下一步該怎么做票罐。
比如對于丟幀是,點擊黃色或紅色的Frames圓點便會有相關的提示信息疗杉;另外,在systrace的最右上方烟具,有一個Alerts tab可以展開奠蹬,這里記錄著所有的的警告提示信息。
注:本文講到最新版的systrace囤躁,其中sdk 23狸演,chrome版本49.0言蛇,部分功能在老版本systrace并沒有腊尚。
快捷操作
導航操作
導航操作 | 作用 |
---|---|
w | 放大满哪,[+shift]速度更快 |
s | 縮小,[+shift]速度更快 |
a | 左移哨鸭,[+shift]速度更快 |
d | 右移,[+shift]速度更快 |
快捷操作
常用操作 | 作用 |
---|---|
f | 放大當前選定區(qū)域 |
m | 標記當前選定區(qū)域 |
v | 高亮VSync |
g | 切換是否顯示60hz的網(wǎng)格線 |
0 | 恢復trace到初始態(tài)勘高,這里是數(shù)字0而非字母o |
一般操作 | 作用 |
---|---|
h | 切換是否顯示詳情 |
/ | 搜索關鍵字 |
enter | 顯示搜索結果华望,可通過← →定位搜索結果 |
` | 顯示/隱藏腳本控制臺 |
? | 顯示幫助功能 |
對于腳本控制臺仅乓,除了能當做記事本的功能,目前還不清楚有啥功能夸楣,或許還在開發(fā)中子漩。
模式切換
- Select mode: 雙擊已選定區(qū)能將所有相同的塊高亮選中石洗;(對應數(shù)字1)
- Pan mode: 拖動平移視圖(對應數(shù)字2)
- Zoom mode:通過上/下拖動鼠標來實現(xiàn)放大/縮小功能;(對應數(shù)字3)
- Timing mode:拖動來創(chuàng)建或移除時間窗口線缕棵。(對應數(shù)字4)
可通過按數(shù)字1~4涉兽,用于切換鼠標模式; 另外别厘,按住alt鍵拥诡,再滾動鼠標滾輪能實現(xiàn)放大/縮小功能。
traceView
Traceview
方法1代碼實現(xiàn):
Debug.startMethodTracing("demo");
Debug.stopMethodTracing();
定位準確
生成位置:
/sdcard/Android/data/packageName/files
方法2--DDMS:
選中進程,點擊開始記錄,再次點擊結束,
通過DDMS記錄,不容定位開始和結束的代碼位置;
視圖
參數(shù)說明:
-
Name
: 該線程運行過程中所調用的函數(shù)名 -
Incl Cpu Time
: 某函數(shù)占用的CPU時間雕蔽,包含內部調用其它函數(shù)的CPU時間 -
Excl Cpu Time
: 某函數(shù)占用的CPU時間宾娜,但不含內部調用其它函數(shù)所占用的CPU時間 -
Incl Real Time
: 某函數(shù)運行的真實時間(以毫秒為單位)扇售,內含調用其它函數(shù)所占用的真實時間 -
Excl Real Time
: 某函數(shù)運行的真實時間(以毫秒為單位),不含調用其它函數(shù)所占用的真實時間 -
Call+Recur Calls/Total
: 某函數(shù)被調用次數(shù)以及遞歸調用占總調用次數(shù)的百分比 -
Cpu Time/Call
: 某函數(shù)調用CPU時間(Incl Cpu time)與調用次數(shù)的比华弓,等價于該函數(shù)平均執(zhí)行時長困乒。 -
Real Time/Call
: 某函數(shù)調用CPU時間(Incl Real time)與調用次數(shù)的比。等價于該函數(shù)平均真實時長
重點關注項:
-
Cpu Time/Call
函數(shù)平均執(zhí)行時間較長的函數(shù)迁霎; -
Call+Recur Calls/Total
百宇,調用次數(shù)非常頻繁的函數(shù)。