summaryrefslogtreecommitdiff
path: root/simpleperf/demo/README.md
blob: e17c27d822e0c8542e1faaa803e05139e87e55d9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
# Examples of using simpleperf to profile Android applications

## Table of Contents

- [Introduction](#introduction)
- [Profiling Java application](#profiling-java-application)
- [Profiling Java/C++ application](#profiling-javac-application)

## Introduction

Simpleperf is a native profiler used on Android platform. It can be used to profile Android
applications. It's document is at [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/README.md).
Instructions of preparing your Android application for profiling are [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/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.
    SimpleperfExampleWithNative/ -- contains an Android Studio project using both Java and C++ code.

It can be downloaded as below:

    $ git clone https://android.googlesource.com/platform/system/extras
    $ cd extras/simpleperf/demo

## Profiling Java application

    Android Studio project: SimpleExamplePureJava
    test device: Android O (Google Pixel XL)
    test device: Android N (Google Nexus 5X)

steps:
1. Build and install app:
```
# Open SimpleperfExamplesPureJava project with Android Studio,
# and build this project sucessfully, 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:
```
$ cd ../../scripts/
$ gvim app_profiler.config
    change app_package_name line to: app_package_name = "com.example.simpleperf.simpleperfexamplepurejava"
$ python app_profiler.py
    It runs the application and collects profiling data in perf.data, binaries on device in binary_cache/.
```

3. Show profiling data:
```
a. show call graph in txt mode
    # On windows, use "bin\windows\x86\simpleperf" instead.
    $ bin/linux/x86_64/simpleperf report -g --brief-callgraph | more
        If on other hosts, use corresponding simpleperf binary.
b. show call graph in gui mode
    $ python report.py -g
c. show samples in source code
    $ gvim annotate.config
        change source_dirs line to: source_dirs = ["../demo/SimpleperfExamplePureJava"]
    $ python annotate.py
    $ gvim annotated_files/java/com/example/simpleperf/simpleperfexamplepurejava/MainActivity.java
        check the annoated source file MainActivity.java.
```

## Profiling Java/C++ application

    Android Studio project: SimpleExampleWithNative
    test device: Android O (Google Pixel XL)
    test device: Android N (Google Nexus 5X)

steps:
1. Build and install app:
```
# Open SimpleperfExamplesPureJava project with Android Studio,
# and build this project sucessfully, otherwise the `./gradlew` command below will fail.
$ cd SimpleperfExampleWithNative

# On windows, use "gradlew" instead.
$ ./gradlew clean assemble
$ adb install -r app/build/outputs/apk/app-profiling.apk
```

2. Record profiling data:
```
$ cd ../../scripts/
$ gvim app_profiler.config
    change app_package_name line to: app_package_name = "com.example.simpleperf.simpleperfexamplewithnative"
$ python app_profiler.py
    It runs the application and collects profiling data in perf.data, binaries on device in binary_cache/.
```

3. Show profiling data:
```
a. show call graph in txt mode
    # On windows, use "bin\windows\x86\simpleperf" instead.
    $ bin/linux/x86_64/simpleperf report -g --brief-callgraph | more
        If on other hosts, use corresponding simpleperf binary.
b. show call graph in gui mode
    $ python report.py -g
c. show samples in source code
    $ gvim annotate.config
        change source_dirs line to: source_dirs = ["../demo/SimpleperfExampleWithNative"]
    $ python annotate.py
    $ find . -name "native-lib.cpp" | xargs gvim
        check the annoated source file native-lib.cpp.
```