參考:
https://blog.csdn.net/weixin_43297891/article/details/137241935
https://hqber.com/archives/483/
定義
Simpleperf 是Google隨NDK一起釋出的一款profile工具(注:從NDK r13開始),它是針對Android平臺的一個 native 層效能分析工具。
使用步驟
本篇是分析執行在android裝置下的程式
1. 將NDK中Simpleperf工具的可執行程式 push 到手機上
cd <NDK>/simpleperf/bin/android/<對應的版本,根據被測程式和CPU,來選擇對應的版本>
例如 :我的路徑是 /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/bin/android/arm64
cd /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/bin/android/arm64
adb push simpleperf /data/local/tmp
adb shell chmod 777 /data/local/tmp/simpleperf
2. 啟動手機上的被測程式,ps 出該程式的程序ID
adb shell ps -ef | grep "需要分析的應用程式包名"
3. 使用Simpleperf工具進行分析
(1)record-記錄執行結果資料:
adb shell /data/local/tmp/simpleperf record -p <程序號> --duration <持續的時間(秒為單位)> -o <輸出檔名稱> --call-graph fp
--call-graph dwarf 用在32位系統中,64位則採用--call-graph fp
例子:adb shell /data/local/tmp/simpleperf record -p 4844 --duration 10 -o /data/local/tmp/perf.data --call-graph fp
輸出:simpleperf I cmd_record.cpp:658] Samples recorded: 12013. Samples lost: 0.
(2)報告結果資料
adb shell /data/local/tmp/simpleperf report -i /data/local/tmp/perf.data -o /data/local/tmp/perf_report.txt
4. 解析火焰圖
(1)將data檔案和txt檔案,從手機pull到電腦
電腦上新建simpleperf_test目錄,例子:/home/hqb/simpleperf_test
mkdir simpleperf_test
adb pull /data/local/tmp/perf.data /home/hqb/simpleperf_test
adb pull /data/local/tmp/perf_report.txt /home/hqb/simpleperf_test
經常使用simpleperf就用alias設定別名
vim ~/.bashrc
alias pf='python /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/report_html.py'
source ~/.bashrc
(2)data格式轉化成html格式
cd /home/hqb/simpleperf_test
//設定別名
pf -i ./perf.data -o ./perf.html
//如果不設定別名
python /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf/report_html.py -i ./perf.data -o ./perf.html
(3)下載FlameGraph到simpleperf_test目錄下,將simpleperf複製到simpleperf_test目錄下
git clone <https://github.com/brendangregg/FlameGraph.git>
chmod 777 FlameGraph/flamegraph.pl
chmod 777 FlameGraph/stackcollapse-perf.pl
cp -r /home/hqb/Android/Sdk/ndk/21.3.6528147/simpleperf /home/hqb/simpleperf_test
(4)生成火焰圖
cd /home/hqb/simpleperf_test
python ./simpleperf/report_sample.py > out.perf
./FlameGraph/stackcollapse-perf.pl out.perf > out.folded
./FlameGraph/flamegraph.pl out.folded > out.svg
out.svg就是最後得到的火焰圖,用瀏覽器開啟就可以看