1 # Examples of using simpleperf to profile Android applications 2 3 ## Table of Contents 4 5 - [Introduction](#introduction) 6 - [Profiling Java application](#profiling-java-application) 7 - [Profiling Java/C++ application](#profiling-javac-application) 8 - [Profiling Kotlin application](#profiling-kotlin-application) 9 10 ## Introduction 11 12 Simpleperf is a native profiler used on Android platform. It can be used to profile Android 13 applications. It's document is at [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/README.md). 14 Instructions of preparing your Android application for profiling are [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/README.md#Android-application-profiling). 15 This directory is to show examples of using simpleperf to profile Android applications. The 16 meaning of each directory is as below: 17 18 ../scripts/ -- contain simpleperf binaries and scripts. 19 SimpleperfExamplePureJava/ -- contains an Android Studio project using only Java code. 20 SimpleperfExampleWithNative/ -- contains an Android Studio project using both Java and C++ code. 21 SimpleperfExampleOfKotlin/ -- contains an Android Studio project using Kotlin code. 22 23 It can be downloaded as below: 24 25 $ git clone https://android.googlesource.com/platform/system/extras 26 $ cd extras/simpleperf/demo 27 28 ## Profiling Java application 29 30 Android Studio project: SimpleExamplePureJava 31 test device: Android O (Google Pixel XL) 32 test device: Android N (Google Nexus 5X) 33 34 steps: 35 1. Build and install app: 36 ``` 37 # Open SimpleperfExamplesPureJava project with Android Studio, 38 # and build this project sucessfully, otherwise the `./gradlew` command below will fail. 39 $ cd SimpleperfExamplePureJava 40 41 # On windows, use "gradlew" instead. 42 $ ./gradlew clean assemble 43 $ adb install -r app/build/outputs/apk/app-profiling.apk 44 ``` 45 46 2. Record profiling data: 47 ``` 48 $ cd ../../scripts/ 49 $ python app_profiler.py -p com.example.simpleperf.simpleperfexamplepurejava 50 ``` 51 52 3. Show profiling data: 53 ``` 54 a. show call graph in txt mode 55 # On windows, use "bin\windows\x86\simpleperf" instead. 56 $ bin/linux/x86_64/simpleperf report -g | more 57 If on other hosts, use corresponding simpleperf binary. 58 b. show call graph in gui mode 59 $ python report.py -g 60 c. show samples in source code 61 $ python annotate.py -s ../demo/SimpleperfExamplePureJava 62 $ gvim annotated_files/java/com/example/simpleperf/simpleperfexamplepurejava/MainActivity.java 63 check the annoated source file MainActivity.java. 64 ``` 65 66 ## Profiling Java/C++ application 67 68 Android Studio project: SimpleExampleWithNative 69 test device: Android O (Google Pixel XL) 70 test device: Android N (Google Nexus 5X) 71 72 steps: 73 1. Build and install app: 74 ``` 75 # Open SimpleperfExamplesWithNative project with Android Studio, 76 # and build this project sucessfully, otherwise the `./gradlew` command below will fail. 77 $ cd SimpleperfExampleWithNative 78 79 # On windows, use "gradlew" instead. 80 $ ./gradlew clean assemble 81 $ adb install -r app/build/outputs/apk/app-profiling.apk 82 ``` 83 84 2. Record profiling data: 85 ``` 86 $ cd ../../scripts/ 87 $ python app_profiler.py -p com.example.simpleperf.simpleperfexamplewithnative 88 It runs the application and collects profiling data in perf.data, binaries on device in binary_cache/. 89 ``` 90 91 3. Show profiling data: 92 ``` 93 a. show call graph in txt mode 94 # On windows, use "bin\windows\x86\simpleperf" instead. 95 $ bin/linux/x86_64/simpleperf report -g | more 96 If on other hosts, use corresponding simpleperf binary. 97 b. show call graph in gui mode 98 $ python report.py -g 99 c. show samples in source code 100 $ python annotate.py -s ../demo/SimpleperfExampleWithNative 101 $ find . -name "native-lib.cpp" | xargs gvim 102 check the annoated source file native-lib.cpp. 103 ``` 104 105 ## Profiling Kotlin application 106 107 Android Studio project: SimpleExampleOfKotlin 108 test device: Android O (Google Pixel XL) 109 test device: Android N (Google Nexus 5X) 110 111 steps: 112 1. Build and install app: 113 ``` 114 # Open SimpleperfExamplesOfKotlin project with Android Studio, 115 # and build this project sucessfully, otherwise the `./gradlew` command below will fail. 116 $ cd SimpleperfExampleOfKotlin 117 118 # On windows, use "gradlew" instead. 119 $ ./gradlew clean assemble 120 $ adb install -r app/build/outputs/apk/profiling/app-profiling.apk 121 ``` 122 123 2. Record profiling data: 124 ``` 125 $ cd ../../scripts/ 126 $ python app_profiler.py -p com.example.simpleperf.simpleperfexampleofkotlin 127 It runs the application and collects profiling data in perf.data, binaries on device in binary_cache/. 128 ``` 129 130 3. Show profiling data: 131 ``` 132 a. show call graph in txt mode 133 # On windows, use "bin\windows\x86\simpleperf" instead. 134 $ bin/linux/x86_64/simpleperf report -g | more 135 If on other hosts, use corresponding simpleperf binary. 136 b. show call graph in gui mode 137 $ python report.py -g 138 c. show samples in source code 139 $ python annotate.py -s ../demo/SimpleperfExampleOfKotlin 140 $ find . -name "MainActivity.kt" | xargs gvim 141 check the annoated source file MainActivity.kt. 142 ``` 143