Simpleperf is a native profiler used on Android platform. It can be used to profile Android applications. Its documentation is here. Instructions of preparing your Android application for profiling are here. This directory is to show examples of using simpleperf to profile Android applications. The meaning of each directory is as below:
../scripts/ -- contain simpleperf binaries and scripts. SimpleperfExampleJava/ -- contains an Android Studio project using only Java code. SimpleperfExampleCpp/ -- contains an Android Studio project using both Java and C++ code. SimpleperfExampleKotlin/ -- contains an Android Studio project using Kotlin code. CppApi/ -- contains an Android Studio project using c++ app_api to record. JavaApi/ -- contains an Android Studio project using Java app_api to record.
It can be downloaded as below:
$ git clone https://android.googlesource.com/platform/system/extras $ cd extras/simpleperf/demo
The testing environment:
Android Studio 3.2 test device: Android O (Google Pixel 2) test device: Android N (Google Nexus 6P) Please make sure your device having Android version >= N.
Android Studio project: SimpleExampleJava
steps:
# Open SimpleperfExampleJava project with Android Studio, # and build this project successfully, otherwise the `./gradlew` command below will fail. $ cd SimpleperfExampleJava # Build and install a debuggable app. We can also build and install a released app on Android >= Q. # On windows, use "gradlew" instead. $ ./gradlew clean assemble $ adb install -r app/build/outputs/apk/debug/app-debug.apk
$ cd ../../scripts/ # app_profiler.py collects profiling data in perf.data, and binaries on device in binary_cache/. $ python app_profiler.py -p simpleperf.example.java
# report_html.py generates profiling result in report.html. $ python report_html.py --add_source_code --source_dirs ../demo --add_disassembly
Android Studio project: SimpleExampleCpp
steps:
# Open SimpleperfExampleCpp project with Android Studio, # and build this project sucessfully, otherwise the `./gradlew` command below will fail. $ cd SimpleperfExampleCpp # On windows, use "gradlew" instead. $ ./gradlew clean assemble $ adb install -r app/build/outputs/apk/debug/app-debug.apk
$ cd ../../scripts/ # app_profiler.py collects profiling data in perf.data, and binaries on device in binary_cache/. $ python app_profiler.py -p simpleperf.example.cpp -lib app/build
# report_html.py generates profiling result in report.html. $ python report_html.py --add_source_code --source_dirs ../demo --add_disassembly
Android Studio project: SimpleExampleKotlin
steps:
# Open SimpleperfExampleKotlin project with Android Studio, # and build this project sucessfully, otherwise the `./gradlew` command below will fail. $ cd SimpleperfExampleKotlin # Build and install a debuggable app. We can also build and install a released app on Android >= Q. # On windows, use "gradlew" instead. $ ./gradlew clean assemble $ adb install -r app/build/outputs/apk/debug/app-debug.apk
$ cd ../../scripts/ # app_profiler.py collects profiling data in perf.data, and binaries on device in binary_cache/. $ python app_profiler.py -p simpleperf.example.kotlin
# report_html.py generates profiling result in report.html. $ python report_html.py --add_source_code --source_dirs ../demo --add_disassembly
Android Studio project: CppApi and JavaApi
steps:
# Open CppApi project with Android Studio, # and build this project sucessfully, otherwise the `./gradlew` command below will fail. $ cd CppApi # On windows, use "gradlew" instead. $ ./gradlew clean assemble $ adb install -r app/build/outputs/apk/debug/app-debug.apk
$ cd ../../scripts/ $ python api_profiler.py prepare
# launch the app via cmdline, can also launch it on device. # A profiling file is generated each time running the app. $ adb shell am start simpleperf.demo.cpp_api/.MainActivity
$ python api_profiler.py collect -p simpleperf.demo.cpp_api
$ python report_html.py -i simpleperf_data/* --aggregate-by-thread-name