Android 效能分析記錄
阿新 • • 發佈:2018-11-12
TraceView介面資訊介紹。
TraceView介面包括時間面板和方法面板
(1) 時間面板(Timeline Panel)
時間面板展示了每個執行緒的執行情況,其中的[1]main即為ui主執行緒。
移動到某個位置可以檢視該點對應的方法的執行資訊,點選方法面板則會選中相應的方法。
可以左鍵按住不放選中區域放大區域性精細檢視,不同方法用不同顏色標註
(2) 方法面板(Profile Panel)
方法面板展示了所有方法的執行情況,點選某個方法可以檢視在對應執行緒上的執行時間區域,並會顯示其父方法及子方法。
每個方法包括如下資訊列,可點選某列進行排序,從而確定產生效能問題的函式:
Systrace 效能分析的工具
Systrace的功能包括跟蹤系統的I/O操作、核心工作佇列、CPU負載以及Android各個子系統的執行狀況等
你可以通過python systrace.py -h 來檢視systrace 的使用幫助
- Usage: systrace.py [options] [category1 [category2 ...]]
- Example: systrace.py -b 32768 -t 15 gfx input view sched freq
- Options:
- -h, --help show this help message and exit
- -o FILE write HTML to FILE
- -t N, --time=N trace for N seconds
- -b N, --buf-size=N use a trace buffer size of N KB
- -k KFUNCS, --ktrace=KFUNCS
- specify a comma-separated list of kernel functions to
- trace
- -l, --list-categories
- list the available categories and exit
- -a APP_NAME, --app=APP_NAME
- enable application-level tracing for comma-separated
- list of app cmdlines
- --link-assets link to original CSS or JS resources instead of
- embedding them
- --from-file=FROM_FILE
- read the trace from a file (compressed) rather than
- running a live trace
- --asset-dir=ASSET_DIR
- -e DEVICE_SERIAL, --serial=DEVICE_SERIAL
- adb device serial number
(1). 由於在systrace.py中指定了-f -l和-i引數,Systrace將生成CPU頻率、負載和狀態相關的資訊。它們為圖中第一個紅框所示。由於筆者所測手機CPU為雙核,故圖中有CPU0和CPU1之分。為行文方便,用CPU N來指代CPU的某個核。
“CPU N“所示行對應於整個測試時間內,某個核上執行的程序資訊。
“CPU N C-State“所示行為整個測試時間內,某個CPU狀態的變化。C-State取值見下表。
“CPU N Clock Frequency”所示行展示了某個CPU執行的頻率。通過點選這一行的色塊可以檢視某個時間點上CPU N的執行頻率。
“cpufreq”:該行所示內容和CPU互動式頻率調節器(Interactive Governor)的工作有關。互動式CPU調節器驅動添加了對CPU頻率調節事件的跟蹤。感興趣的讀者不妨閱讀kernel中的 include/trace/events/cpufreq_interactive.h檔案以瞭解更多的資訊。
(2). VSYNC:顯示了每次Tick Tack的時間大概都在16ms左右
(3). 圖中 com.example.systracedemo/com.example.systracedemo.MainActivity所示為應用程式佔用顯示Buffer的Tick-Tack情況。如果使用時間超過16ms,將導致介面顯示遲滯等現象。
(4). 圖中SurfaceFlinger行展示了其函式呼叫的CPU耗時情況(如箭頭1所指,SurfaceFlinger中的onMessageReceived函式的執行資訊)。
(5). 圖中最下部的方框中,詳細顯示了當前滑鼠在時間線中選擇的部分(即SurfaceFlinger中的onMessageReceived)的詳細資訊。