1. 程式人生 > >Android systrace效能工具使用說明

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
,–serial=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 顯示搜尋結果,可通過← →定位搜尋結果
` 顯示/隱藏指令碼控制檯
? 顯示幫助功能

對於指令碼控制檯,除了能當做記事本的功能,目前還不清楚有啥功能,或許還在開發中。