前言
本章主要是針對初識Systrace的同學(xué)挺勿,這里講解Systrace的基本使用。
一喂柒、Systrace介紹
二不瓶、Systrace使用
三禾嫉、如何使用命令抓取trace信息
一、Systrace介紹
Systrace是Android4.1版本之后推出的蚊丐,主要用來分析android性能問題(主要診斷應(yīng)用的不流暢的問題)熙参,trace信息中大致包含以下內(nèi)容。
1. CPU使用情況
2. UI刷新掉幀情況
3. 函數(shù)執(zhí)行時間情況
4. Android各個子系統(tǒng)的運(yùn)行狀況
二麦备、Systrace使用
1.通過DDMS的Systrace工具來抓起trace信息
打開DDMS孽椰,在Android SDK目錄下可以啟動DDMS,位于android/sdk/tools目錄下凛篙,(windows下直接點(diǎn)擊monitor.bat啟動即可黍匾,linux下在命令行執(zhí)行./minitor)
你在抓取trace的時候,需要先鏈接設(shè)備呛梆,對應(yīng)選擇你要抓取的進(jìn)程锐涯,之后點(diǎn)擊如下圖紅色圈的按鈕,設(shè)置systrace抓取的相關(guān)數(shù)據(jù)
Destibnation File :抓取trace文件的保持路徑
Trace duration :抓取的時長填物,這里需要注意一下纹腌,盡量在15s以內(nèi),太長時間可能會造成抓取超時數(shù)據(jù)丟失的問題
Trace Buffer Size 抓取內(nèi)容的大小融痛,默認(rèn)即可
Enable Application Traces from :對應(yīng)抓取的進(jìn)程
*Commonly Used Tags:默認(rèn)都選擇即可
Advanced Options :抓取相關(guān)數(shù)據(jù)類型壶笼,可以選擇,或者全部選擇都可以
選擇完之后點(diǎn)擊ok雁刷,此時要同步操作你設(shè)備的對應(yīng)app或者對應(yīng)流程覆劈,比如我發(fā)現(xiàn)我自己listview滑動的時候會很卡,此時點(diǎn)擊ok后沛励,同時操作滑動listview界面责语,此時Systrace就會抓取你設(shè)定時間內(nèi)的trace,最后會在你設(shè)置的輸出目錄下生成一個trace.html文件目派,這個文件需要用Google Chrom瀏覽器來打開
[后面文章會詳細(xì)講解Trace的分析]
三坤候、如何使用命令抓取trace信息
3.1 android-sdk自帶了trace.py工具
命令如下
python systrace.py [options] [category1] [category2] ... [categoryN]
android-sdk/platform-tools/systrace
//cd到當(dāng)前目錄執(zhí)行以下命令,在執(zhí)行以下命令的時候要準(zhǔn)備好操作你的設(shè)備
python systrace.py --time=10 -o mytrace.html sched gfx view wm
3.2 相關(guān)options
options | 描述 |
---|---|
-o file | 輸出的目標(biāo)文件 |
-t N, –time=N | 執(zhí)行時間企蹭,默認(rèn)5s |
-b N, –buf-size=N | 用于限制trace總大小 |
-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 | 可舉例用的tag |
3.3 相關(guān)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 | Applacation |
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 |
3.4 在app添加自己的systrace log
Trace.traceBegin("performTraversals");
try {
……
} finally {
Trace.traceEnd();
}
需要保證 traceBegin 與 traceEnd 一定要成對出現(xiàn)徒河。 并且一定要在同一個線程里面。Trace.traceBegin和Trace.traceEnd();之間也是可以再用Trace.traceBegin和Trace.traceEnd的送漠,加入trace的好處在于顽照,生成的trace文件中,會在跟蹤的代碼段執(zhí)行對應(yīng)時間軸區(qū)間打上一個tag標(biāo)記(比如上例中的performTraversals)如果在代碼中加入了trace闽寡,在生成trace文件時代兵,必須指定進(jìn)程為trace所在的進(jìn)程
相關(guān)參考文獻(xiàn)
http://www.reibang.com/p/0670fe8507ff
https://www.pianshen.com/article/550436274/