简介
在调试 C/C++ 算法时,我通常喜欢在 Mac 或者 PC 上做 Profiling(性能剖析),因为很多成熟的 IED 自带 Profiler,例如 CLion Profiler。但 C/C++ 算法集成至 app 后,为了拿到更为精确的 Profiling 数据,就需要对 app 进行 native 层的 profiling。
Simpleperf 刚好满足了这样的需求。本文将会通过一个例子来说明如何使用Simpleperf,主要目的是想推荐这款好用的工具给大家,例子也尽量简单,更多深入的使用方式,有兴趣的看官可以自己探索一下。
举个例子
Step 1. 下载 Simpleperf
Android NDK 中自带 Simpleperf,所以下载 Android NDK 即可。例如在我的机器上,它在 ~/NDK/android-ndk-r21b/simpleperf
。这个文件夹下,包含了多个脚本,此外在 bin
目录下包含不同平台不同架构的 simplerperf 可执行程序。
Step 2. 下载Demo,并安装
SimpleperfExampleWithNative 是用于测试的安卓工程,下载它,编译它,安装它。
Step 3. 运行 Simpleperf 脚本
首先,运行 app_profiler.py
,该脚本会启动 simpleperf,并记录一段时间内(默认10s)的性能数据,并将其输出到文件(默认为 perf.data)
cd path/to/simpleperf/
python app_profiler.py -p com.example.simpleperf.simpleperfexamplewithnative
该脚本有很多选项可以设置,例如输出文件名,监控时长等,详细设置说明可以通过 python app_profiler.py -h
获取
接着,运行report_html.py
生成 profiling 数据报告。该脚本以 app_profiler.py
的输出的性能数据作为输入,并生成 html 文件。
python report_html.py --add_disassembly
该脚本有很多选项可以设置,例如输出文件名等,详细设置说明可以通过 python report_html.py -h
获取。
就这么简单,两步搞定,你就能得到一个漂亮的 html 性能报告,截图如下:
总结
本文粗略地介绍了 simpleperf 的使用方式,通过脚本来监控数据和生成报表。本质上这些脚本都是在调用 bin 目录下 simpleperf 可执行程序进行工作的,这种傻瓜式的操作方式能够满足我的需求,所以就没有深入研究它们了。
参考资料
Examples of using simpleperf to profile Android applications