summaryrefslogtreecommitdiff
path: root/simpleperf/demo/README.md
blob: 1ecd9dd51c22519acd135a3de548e6d8459a850c (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
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# 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)
- [Profiling Kotlin application](#profiling-kotlin-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.
    SimpleperfExampleOfKotlin/   -- contains an Android Studio project using Kotlin 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 | 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 SimpleperfExamplesWithNative 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 | 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.
```

## Profiling Kotlin application

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

steps:
1. Build and install app:
```
# Open SimpleperfExamplesOfKotlin 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:
```
$ cd ../../scripts/
$ gvim app_profiler.config
    change app_package_name line to: app_package_name = "com.example.simpleperf.simpleperfexampleofkotlin"
$ 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 | 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/SimpleperfExampleOfKotlin"]
    $ python annotate.py
    $ find . -name "MainActivity.kt" | xargs gvim
        check the annoated source file MainActivity.kt.
```