性能優(yōu)化工具(二)-Systrace

一、簡介

Systrace是Android4.1引入的性能分析工具。利用ftrace,在系統(tǒng)關鍵位置都有埋點,主要用于分析系統(tǒng)調(diào)用耗時問題,可以自定義trace標簽來細化調(diào)用棧。

二、啟動

ddms

點擊左上角按鈕,出來右邊選項框,上面配置文件名、持續(xù)時長、buffer大小、調(diào)試的應用程序(如果對某個應用加了trace標簽,必須選上對應應用包名)

命令行

function systrace {
systrace_path=“/xxx/Android/sdk/platform-tools/systrace/systrace.py"
python $systrace_path gfx input audio view webview wm am hal app res dalvik rs bionic power sched freq idle load sync workq memreclaim irq disk binder_driver binder_lock -b 10240 -t 5 -o “/xxx/systrace/systrace-$1.html"
}

直接整理為腳本方法,配置到bashrc中去,方便抓取。
參數(shù)分為兩個部分options和category

options可取值:

options 解釋
-o <FILE> 指定trace數(shù)據(jù)文件的輸出路徑,如果不指定就是當前目錄的trace.html
-t N, –time=N 執(zhí)行時間,默認5s。絕對不要把時間設的太短導致你操作沒完Trace就跑完了,這樣會出現(xiàn)Did not finish 的標簽,分析數(shù)據(jù)就基本無效了
-b N, –buf-size=N buffer大小(單位kB),用于限制trace總大小,默認無上限
-k <KFUNCS>,–ktrace=<KFUNCS> 追蹤kernel函數(shù),用逗號分隔
-a <APP_NAME>,–app=<APP_NAME> 這個選項可以開啟指定包名App中自定義Trace Label的Trace功能。也就是說,如果你在代碼中使用了Trace.beginSection("tag"), Trace.endSection;默認情況下,你的這些代碼是不會生效的,因此,這個選項一定要開啟
–from-file=<FROM_FILE> 從文件中創(chuàng)建互動的systrace
-e <DEVICE_SERIAL>,–serial=<DEVICE_SERIAL> 指定設備,在特定連接設備上進行跟蹤,由設備序列號標識 。
-l, –list-categories 這個用來列出你分析的那個手機系統(tǒng)支持的Trace模塊,一般來說,高版本的支持的模塊更多

category可取值:

category 解釋
gfx Graphic系統(tǒng)的相關信息
input Input
view View繪制相關信息
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 虛擬機相關信息
rs RenderScript
bionic Bionic C Library
power Power Management
sched CPU調(diào)度的信息
binder_driver Binder驅(qū)動的相關信息
core_services SystemServer中系統(tǒng)核心Service的相關信息
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
三、標簽添加
app:
Trace.beginSection("issueMethod");
issueMethod();
Trace.endSection();

framework java:
 Trace.traceBegin(Trace.TRACE_TAG_VIEW, "inflate”);
 Trace.traceEnd(Trace.TRACE_TAG_VIEW);

native:
#define ATRACE_TAG ATRACE_TAG_ALWAYS
#include <utils/Trace.h> // for c++
#include <cutils/trace.h> // for c
ATRACE_CALL();
ATRACE_BEGIN();
ATRACE_END();

四、Systrace特征

1:幀點:對60hz頻率來說,綠:16.6ms內(nèi),黃、紅均為超過16.6ms,紅比黃更嚴重。

2:task狀態(tài)

  • 灰色:Sleeping
  • 藍色:Runnable 它可以運行,但是需要等待調(diào)度程序喚醒
  • 綠色:Running
  • 橙色:Uninterruptible sleep 不響應信號

3:函數(shù)調(diào)用
對應issue function處理:通過traceview來定位具體耗時問題,增加trace標簽細化調(diào)用棧確認問題。

iq:system_erver端事件讀取

CPU


從頻率最大值能了解CPU架構,從調(diào)度看繁忙程度和調(diào)度任務,同時可以觀察freq是否跑在最大值等。

五、使用

1 看細節(jié),比如框調(diào)度、框CPU和對應應用程序調(diào)用??丛敿殧?shù)據(jù)
2 看范圍,比如看某個階段的執(zhí)行時長

搜索框:
1 頁面搜索 比如快速定位到左邊欄對應的包名、進程uid等。
2 systrace內(nèi)部內(nèi)容搜索 比如確認pid、tid是誰,被誰喚醒等信息。

官方使用教程

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。
禁止轉載,如需轉載請通過簡信或評論聯(lián)系作者。

友情鏈接更多精彩內(nèi)容