183 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
			
		
		
	
	
			183 lines
		
	
	
		
			5.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
| # Examples of using simpleperf to profile Android applications
 | |
| 
 | |
| ## Table of Contents
 | |
| 
 | |
| - [Examples of using simpleperf to profile Android applications](#examples-of-using-simpleperf-to-profile-android-applications)
 | |
|   - [Table of Contents](#table-of-contents)
 | |
|   - [Introduction](#introduction)
 | |
|   - [Profile a Java application](#profile-a-java-application)
 | |
|   - [Profile a Java/C++ application](#profile-a-javac-application)
 | |
|   - [Profile a Kotlin application](#profile-a-kotlin-application)
 | |
| - [Profile via app_api](#profile-via-app_api)
 | |
| 
 | |
| ## Introduction
 | |
| 
 | |
| Simpleperf is a native profiler used on Android platform. It can be used to profile Android
 | |
| applications. Its documentation is [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/doc/README.md).
 | |
| Instructions of preparing your Android application for profiling are [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/doc/README.md#Android-application-profiling).
 | |
| 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.
 | |
|     SimpleperfExamplePureJava/   -- contains an Android Studio project using only Java code.
 | |
|     SimpleperfExampleCpp/        -- contains an Android Studio project using both Java and C++ code.
 | |
|     SimpleperfExampleOfKotlin/   -- 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:
 | |
| 
 | |
| ```sh
 | |
| $ 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.
 | |
| ```
 | |
| 
 | |
| ## Profile a Java application
 | |
| 
 | |
| Android Studio project: SimpleExamplePureJava
 | |
| 
 | |
| steps:
 | |
| 1. Build and install the application:
 | |
| 
 | |
| ```sh
 | |
| # Open SimpleperfExamplePureJava project with Android Studio,
 | |
| # and build this project successfully, otherwise the `./gradlew` command below will fail.
 | |
| $ cd SimpleperfExamplePureJava
 | |
| 
 | |
| # On windows, use "gradlew" instead.
 | |
| $ ./gradlew clean assemble
 | |
| $ adb install -r app/build/outputs/apk/app-profiling.apk
 | |
| ```
 | |
| 
 | |
| 2. Record profiling data:
 | |
| 
 | |
| ```sh
 | |
| $ cd ../../scripts/
 | |
| # app_profiler.py collects profiling data in perf.data, and binaries on device in binary_cache/.
 | |
| $ python app_profiler.py -p com.example.simpleperf.simpleperfexamplepurejava
 | |
| ```
 | |
| 
 | |
| 3. Show profiling data:
 | |
| 
 | |
| ```sh
 | |
| # report_html.py generates profiling result in report.html.
 | |
| $ python report_html.py --add_source_code --source_dirs ../demo --add_disassembly
 | |
| ```
 | |
| 
 | |
| ## Profile a Java/C++ application
 | |
| 
 | |
| Android Studio project: SimpleExampleCpp
 | |
| 
 | |
| steps:
 | |
| 1. Build and install the application:
 | |
| 
 | |
| ```sh
 | |
| # 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
 | |
| ```
 | |
| 
 | |
| 2. Record profiling data:
 | |
| 
 | |
| ```sh
 | |
| $ 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
 | |
| ```
 | |
| 
 | |
| 3. Show profiling data:
 | |
| 
 | |
| ```sh
 | |
| # report_html.py generates profiling result in report.html.
 | |
| $ python report_html.py --add_source_code --source_dirs ../demo --add_disassembly
 | |
| ```
 | |
| 
 | |
| ## Profile a Kotlin application
 | |
| 
 | |
| Android Studio project: SimpleExampleOfKotlin
 | |
| 
 | |
| steps:
 | |
| 1. Build and install the application:
 | |
| 
 | |
| ```sh
 | |
| # Open SimpleperfExampleOfKotlin project with Android Studio,
 | |
| # and build this project sucessfully, otherwise the `./gradlew` command below will fail.
 | |
| $ cd SimpleperfExampleOfKotlin
 | |
| 
 | |
| # On windows, use "gradlew" instead.
 | |
| $ ./gradlew clean assemble
 | |
| $ adb install -r app/build/outputs/apk/profiling/app-profiling.apk
 | |
| ```
 | |
| 
 | |
| 2. Record profiling data:
 | |
| 
 | |
| ```sh
 | |
| $ cd ../../scripts/
 | |
| # app_profiler.py collects profiling data in perf.data, and binaries on device in binary_cache/.
 | |
| $ python app_profiler.py -p com.example.simpleperf.simpleperfexampleofkotlin
 | |
| ```
 | |
| 
 | |
| 3. Show profiling data:
 | |
| 
 | |
| ```sh
 | |
| # report_html.py generates profiling result in report.html.
 | |
| $ python report_html.py --add_source_code --source_dirs ../demo --add_disassembly
 | |
| ```
 | |
| 
 | |
| # Profile via app_api
 | |
| 
 | |
| Android Studio project: CppApi and JavaApi
 | |
| 
 | |
| steps:
 | |
| 1. Build and install the application:
 | |
| 
 | |
| ```sh
 | |
| # 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
 | |
| ```
 | |
| 
 | |
| 2. Prepare recording environment.
 | |
| 
 | |
| ```sh
 | |
| $ cd ../../scripts/
 | |
| $ python api_profiler.py prepare
 | |
| ```
 | |
| 
 | |
| 3. Run the CppApi app.
 | |
| 
 | |
| ```sh
 | |
| # 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
 | |
| ```
 | |
| 
 | |
| 4. Collect profiling data.
 | |
| 
 | |
| ```sh
 | |
| $ python api_profiler.py collect -p simpleperf.demo.cpp_api
 | |
| ```
 | |
| 
 | |
| 5. Report profiling data.
 | |
| 
 | |
| ```sh
 | |
| $ python report_html.py -i simpleperf_data/* --aggregate-by-thread-name
 | |
| ```
 |