本篇介紹如何在 Android 開發使用 systrace 指令,Android 開發工具包內提供一個 systrace.py 供開發者使用,systrace 是開發 Android 時常用到的性能分析工具,使用 systrace 工具可對 android 程式進行錄製 trace 資料並轉換成可視覺化的 html 格式,以便後續分析,以下內容為如何安裝 Android systrace 與 systrace 基本使用教學。
Google 官方的 SDK Platform Tools release notes 有各版本的釋出說明。
Windows 安裝方式
從官方下載 Windows 最新版
目前最新版為 platform-tools_r34.0.5-windows.zip
Mac 安裝方式
從官方下載 Mac 最新版
目前最新版為 platform-tools_r34.0.5-darwin.zip
Ubuntu 安裝方式
從官方下載 Linux 最新版
目前最新版為 platform-tools_r34.0.5-linux.zip
下載好後 systrace.py 的路徑位於 android-sdk/platform-tools/systrace 目錄下,
systrace.py 是用 python2 寫成的,目前還不支援 Python3,所以在執行上要先有 Python 2 的運行環境。
systrace 指令基本教學
安裝好 systrace 後將 Android 裝置插上電腦的 USB 孔,執行要分析的 App 或程式後,再輸入 systrace 指令開始錄製,
systrace 指令的語法如下,1
python systrace.py [options] [categories]
最基本最簡單的範例如下,什麼參數也沒帶的話 systrace 程式會需要你按下任何按鍵才會停止錄製,
預設輸出檔名為 trace.html。1
$ python systrace
指定輸出檔名為 systrace.html1
$ python systrace -o systrace.html
指定錄製 7 秒,但是如果提前使用完預設的 buffer 也會提前結束錄製1
$ python systrace -t 7
指定錄製 7 秒,並加大 buffer,我自己是常用 1024000KB,官方文件的範例是 96000KB,1
$ python systrace -t 7 -b 2048000
只想關注 CPU 排程的話,可以像下面這樣下,CPU 排程(sched)算是最常用到且實用的功能了,要看 CPU Frequency 的話可以用 freq,
預設不下的話會錄製出很多類別是自己不想關注的,二來錄製出來的東西會顯示很多同時檔案也較肥大,
指定自己想關注的類別的話,這樣其他類別的就不會錄製到,將能儲存更多的資料,檔案也會小很多,算是個小技巧,1
$ python systrace -t 7 -b 96000 sched freq
要看還支援其它什麼類別的話可以用下列指令查看。1
2
3$ python systrace -l
或
$ python systrace.py --list-categories
以下列出 category 與說明,gfx
: Graphicsinput
: Inputview
: View Systemwebview
: WebViewwm
: Window Manageram
: Activity Managersm
: Sync Manageraudio
: Audiovideo
: Videocamera
: Camerahal
: Hardware Modulesres
: Resource Loadingdalvik
: Dalvik VMrs
: RenderScriptbionic
: Bionic C Librarypower
: Power Managementpm
: Package Managerss
: System Serverdatabase
: Databasenetwork
: Networkadb
: ADBvibrator
: Vibratoraidl
: AIDL callsnnapi
: NNAPIrro
: Runtime Resource Overlaycore_services
: Core servicespdx
: PDX servicessched
: CPU Schedulingfreq
: CPU Frequencyidle
: CPU Idledisk
: Disk I/Osync
: Synchronizationmemreclaim
: Kernel Memory Reclaimbinder_driver
: Binder Kernel driverbinder_lock
: Binder global lock tracememory
: Memorygfx
: Graphics (HAL)ion
: ION allocation (HAL)
systrace 指令選項
以下為常用的 systrace 指令,有想到在陸續增加吧!
-o
: 設定輸出檔名(預設為trace.html)-t
: 秒數-b
: 設定緩衝區大小KB
chrome 開啟 systrace 的 HTML 常用操作
錄製完的 systrace.html 一定要用 chrome 瀏覽器才開得起來,
開啟 systrace.html 的方式有兩種,一種是直接對該 html 右鍵選擇用 chrome 開啟,或者預設瀏覽器就是 chrome 就雙擊開啟,
另一種是在 chrome 瀏覽器網址列輸入 chrome://tracing/
再按 load
按鈕開啟該 html,w/s
:放大 zoom in、縮小 zoom outa/d
:向左捲動、向右捲動m
:高亮顯示當前所選的區塊f
:放大當前所選取的區塊0
:恢復縮放與平移,恢復到預設大小1
:鼠標模式2
:3
:4
:範圍選取模式E
:時間軸置於當前滑鼠游標位置的中心G
:從當前選取區塊的開始處顯示網格,網格間距為16.6ms,再按一次則取消顯示Shift + G
:從當前選取區塊的結束處顯示網格,網格間距為16.6ms,再按一次則取消顯示<左方向鍵>
:跳至上一個的相同選取區塊<右方向鍵>
:跳至下一個的相同選取區塊/
:搜尋字串Enter
:下一個搜尋結果?
:顯示幫助
systrace 名詞解釋
以下為常見 systrace 的資訊以及解釋,通常框選多個 slice 時會顯示更多統計數據,
Wall Duration:持續時間
CPU Duration:cpu耗時
Self Time:自身方法耗時(不包含其呼叫方法)
CPU Self Time:自身方法cpu執行時間
Average CPU Duration:平均cpu耗時
Occurrence:發生次數
我的使用心得
systrace 的操作就介紹到這邊,systrace 的操作並不難,
實際上從 systrace 中分析出有用的資訊,並改善系統效能才是最精髓最難的地方,同時這也是需要多方面實務經驗的累積。
這部份經驗及技巧未來有機會再來談談。
其他參考
了解 Systrace Android 開源項目 - Android Open Source Project
https://source.android.com/devices/tech/debug/systrace
Capture a system trace on the command line | Android Developers
https://developer.android.com/topic/performance/tracing/command-line
手把手教你使用Systrace(一)
https://zhuanlan.zhihu.com/p/27331842
[Android] 效能工具Systrace的使用- IT閱讀
https://www.itread01.com/content/1545024620.html
Android Systrace 使用详解
https://www.jianshu.com/p/75aa88d1b575
Android Systrace使用介绍
https://www.jianshu.com/p/f83d84dcd0b8
os-android:性能分析工具(systrace,starce,top,iotop)_智能多媒体-CSDN博客
https://blog.csdn.net/shareviews/article/details/84749549
開發用的文章參考
Define custom events | Android Developers
https://developer.android.com/topic/performance/tracing/custom-events
說明在 Managed code (Java/Kotlin) 怎麼使用 beginSection 與 endSection
說明在 Native code (C/C++) 怎麼使用 ATrace_beginSection 與 ATrace_endSection
說明在 Native code (C/C++) 怎麼使用 ATRACE_NAME (aka ScopedTrace)
systrace/trace.h at master · ganadist/systrace · GitHub
https://github.com/ganadist/systrace/blob/master/libs/c/trace.h
C 版本的 TRACE_BEGIN 和 TRACE_END
systrace/systrace.py at master · ganadist/systrace · GitHub
https://github.com/ganadist/systrace/blob/master/libs/python/systrace.py
pyhton 版本的 traceBegin 和 traceEnd
其他技巧推薦
如果你是常常在Android adb shell下做事情的話,尤其是需要使用到vi,建議安裝busybox,使用busybox附帶的vi會方便很多,
如果還想知道busybox支援哪些指令或busybox基本用法的話請看這篇。
其他的 Android 系列文章可以看這篇,
下一篇來介紹Android fastboot指令的安裝與用法教學吧~