Android systrace效能工具使用說明
一、概述
保證系統流暢度,也就是保證系統能連續不間斷地提供每秒60幀的執行狀態。當出現掉幀時(也可稱為Jank),需要知道當前整個系統所處的狀態,systrace便是最佳的選擇,它能手機檢測android系統各個元件隨著時間的執行狀態,並能提示該如何有效地修復問題,接下來說說systrace如何使用以及如何解讀。
二、Systrace
2.1 自定義systrace
java framework層
import android.os.Trace; Trace.traceBegin(long traceTag, String methodName) Trace.traceEnd(long traceTag)
在程式碼中必須成對出現,一般將traceEnd放入到finally語句塊,另外,必須在同一個執行緒。
app層
import android.os.Trace;
Trace.beginSection(String sectionName)
Trace.EndSection()
這裡預設的traceTag為TRACE_TAG_APP,systrace命令通過指定app引數即
native framework層
#include<utils/Trace.h>
ATRACE_CALL();
ATRACE_NAME();
2.2 命令用法
命令列
python systrace.py [options] [category1] [category2] ... [categoryN]
2.2.1 options
其中options可取值:(備註:表格中的加粗斜體需要用實際填寫替換)
options | 解釋 |
---|---|
-o file | 輸出的目標檔案 |
-t N, –time=N | 執行時間,預設5s |
-b N, –buf-size=N | buffer大小(單位kB),用於限制trace總大小,預設無上限 |
-k KFUNCS,–ktrace= KFUNCS | 追蹤kernel函式,用逗號分隔 |
-a APP_NAME,–app=APP_NAME | 追蹤應用包名,用逗號分隔 |
–from-file=FROM_FILE | 從檔案中建立互動的systrace |
-e DEVICE_SERIAL |
指定裝置 |
-l, –list-categories | 列舉可用的tags |
2.2.2 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 |
2.2.3 示例
例如,在systrace.py所在目錄下執行指令:
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,否則可能會出現問題。另外,buffer大小不可過大,否則會出現oom異常。
2.3 圖形化
橫座標是以時間為單位,縱座標是以程序-執行緒的方式來劃分,同一程序的執行緒為一組放在一起,可收縮/展開,如下圖:
2.3.1 Frames
產生的html格式的trace檔案必須使用Google Chrome開啟,才能正確地解析並已圖示形式展現。上圖中紅色圈起來的,都是可以點選操作的地方,最上方是搜尋欄,往下處是Alerts按鈕,再往下是滑鼠操作模式。
在每個app程序,都有一個Frames行,正常情況以綠色的圓點表示。當圓點顏色為黃色或者紅色時,意味著這一幀超過16.6ms(即發現丟幀),這時需要通過放大那一幀進一步分析問題。對於Android 5.0(API level 21)或者更高的裝置,該問題主要聚焦在UI Thread和Render Thread這兩個執行緒當中。對於更早的版本,則所有工作在UI Thread。
2.3.2 Alerts
Systrace能自動分析trace中的事件,並能自動高亮效能問題作為一個Alerts,建議除錯人員下一步該怎麼做。
比如對於丟幀是,點選黃色或紅色的Frames圓點便會有相關的提示資訊;另外,在systrace的最右上方,有一個Alerts tab可以展開,這裡記錄著所有的的警告提示資訊。
注:本文講到最新版的systrace,其中sdk 23,chrome版本49.0,部分功能在老版本systrace並沒有。
三、 快捷操作
3.1 導航操作
導航操作 | 作用 |
---|---|
w | 放大,[+shift]速度更快 |
s | 縮小,[+shift]速度更快 |
a | 左移,[+shift]速度更快 |
d | 右移,[+shift]速度更快 |
3.2 快捷操作
常用操作 | 作用 |
---|---|
f | 放大當前選定區域 |
m | 標記當前選定區域 |
v | 高亮VSync |
g | 切換是否顯示60hz的網格線 |
0 | 恢復trace到初始態,這裡是數字0而非字母o |
一般操作 | 作用 |
---|---|
h | 切換是否顯示詳情 |
/ | 搜尋關鍵字 |
enter | 顯示搜尋結果,可通過← →定位搜尋結果 |
` | 顯示/隱藏指令碼控制檯 |
? | 顯示幫助功能 |
對於指令碼控制檯,除了能當做記事本的功能,目前還不清楚有啥功能,或許還在開發中。