使用android-ndk-profiler对native代码进行性能分析

android-ndk-profiler需要使用gcc进行编译,从NDK r13b 起NDK使用的默认编译器从gcc换成了clang,官方提供了Simpleperf工具进行性能分析,具体情况可以参考https://developer.android.google.cn/ndk/guides/simpleperf

下载

android-ndk-profiler的项目地址:https://github.com/richq/android-ndk-profiler

使用

编译方面的改动

修改Android.mk以导入android-ndk-profiler模块

# compile with profiling
LOCAL_CFLAGS := -pg
LOCAL_STATIC_LIBRARIES := android-ndk-profiler

# 在 Android.mk 最后
$(call import-add-path,$your_path) #导入android-ndk-profiler的路径
$(call import-module,android-ndk-profiler)

代码方面的改动

在开始和结束的方法里分别调用monstartup 和 moncleanup。

//在代码开始前
monstartup("your_lib.so");

//在代码结束后
moncleanup();

代码分析生成的gmon.out文件保存在/sdcard/gmon.out。在AndroidManifest.xml文件添加写入权限,以便应用能写入到sd卡。

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

得到结果

编译程序运行,使用adb把gmon.out文件拉到电脑上。

adb pull /sdcard/gmon.out .

运行gprof工具,将带有调试信息的库(通常在 $PROJECT/obj/local/armeabi-v7a/libXXXX.so)作为参数传给gprof工具就能得到结果了。

$ANDROID_NDK/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86/bin/arm-linux-androideabi-gprof your_lib.so

猜你喜欢

转载自blog.csdn.net/u012815193/article/details/81048395