summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2017-06-29 10:52:39 -0700
committerYabin Cui <yabinc@google.com>2017-06-29 10:52:39 -0700
commit11fb679c0d5cb898060f535f0579e0c52d24b1ce (patch)
tree8aa341d3f87de66d4cfd88e49a498acf8df5bb37
parentb7f37d2721d82fc636ac1b4ee9b9d1fad70c7ee7 (diff)
downloadsimpleperf-11fb679c0d5cb898060f535f0579e0c52d24b1ce.tar.gz
Update NDK prebuilts to build 4145589.ndk-r16-release
Taken from branch aosp-master. Change-Id: If396f96308d7a23a188ea36217ccf186036c79c2
-rw-r--r--README.md194
-rw-r--r--annotate.py26
-rw-r--r--app_profiler.config4
-rw-r--r--app_profiler.py60
-rwxr-xr-xbin/android/arm/simpleperfbin2024492 -> 2073536 bytes
-rwxr-xr-xbin/android/arm64/simpleperfbin2844920 -> 2954856 bytes
-rwxr-xr-xbin/android/x86/simpleperfbin3631844 -> 3750844 bytes
-rwxr-xr-xbin/android/x86_64/simpleperfbin3496784 -> 3640240 bytes
-rwxr-xr-xbin/darwin/x86/libsimpleperf_report.dylibbin6010868 -> 6091652 bytes
-rwxr-xr-xbin/darwin/x86/simpleperfbin6471348 -> 6569064 bytes
-rwxr-xr-xbin/darwin/x86_64/libsimpleperf_report.dylibbin6224584 -> 6346644 bytes
-rwxr-xr-xbin/darwin/x86_64/simpleperfbin6711668 -> 6851032 bytes
-rwxr-xr-xbin/linux/x86/libsimpleperf_report.sobin3709108 -> 3836084 bytes
-rwxr-xr-xbin/linux/x86/simpleperfbin4299100 -> 4454748 bytes
-rwxr-xr-xbin/linux/x86_64/libsimpleperf_report.sobin3935464 -> 4078824 bytes
-rwxr-xr-xbin/linux/x86_64/simpleperfbin4578816 -> 4767232 bytes
-rwxr-xr-xbin/windows/x86/libsimpleperf_report.dllbin3592192 -> 3622400 bytes
-rwxr-xr-xbin/windows/x86/simpleperf.exebin3375104 -> 3408896 bytes
-rwxr-xr-xbin/windows/x86_64/libsimpleperf_report.dllbin3881984 -> 3911168 bytes
-rwxr-xr-xbin/windows/x86_64/simpleperf.exebin3375104 -> 3408896 bytes
-rw-r--r--binary_cache_builder.py6
-rw-r--r--pprof_proto_generator.py17
-rw-r--r--repo.prop522
-rw-r--r--report.py17
-rw-r--r--simpleperf_report_lib.py10
-rw-r--r--utils.py41
26 files changed, 494 insertions, 403 deletions
diff --git a/README.md b/README.md
index b6dc9d7..d6c9c7f 100644
--- a/README.md
+++ b/README.md
@@ -28,6 +28,8 @@ Bugs and feature requests can be submitted at http://github.com/android-ndk/ndk/
- [Record and report call graph](#record-and-report-call-graph)
- [Visualize profiling data](#visualize-profiling-data)
- [Annotate source code](#annotate-source-code)
+- [Answers to common issues](#answers-to-common-issues)
+ - [The correct way to pull perf.data on host](#the-correct-way-to-pull-perfdata-on-host)
## Simpleperf introduction
@@ -149,10 +151,10 @@ important subcommands and options. To see all subcommands and options,
use --help.
# List all subcommands.
- $simpleperf --help
+ $ simpleperf --help
# Print help message for record subcommand.
- $simpleperf record --help
+ $ simpleperf record --help
#### Simpleperf list
@@ -161,7 +163,7 @@ simpleperf list is used to list all events available on the device. Different
devices may support different events because of differences in hardware and
kernel.
- $simpleperf list
+ $ simpleperf list
List of hw-cache events:
branch-loads
...
@@ -184,7 +186,7 @@ Below is an example.
# Stat using default events (cpu-cycles,instructions,...), and monitor
# process 7394 for 10 seconds.
- $simpleperf stat -p 7394 --duration 10
+ $ simpleperf stat -p 7394 --duration 10
Performance counter statistics:
1,320,496,145 cpu-cycles # 0.131736 GHz (100%)
@@ -200,10 +202,10 @@ Below is an example.
We can select which events to use via -e option. Below are examples:
# Stat event cpu-cycles.
- $simpleperf stat -e cpu-cycles -p 11904 --duration 10
+ $ simpleperf stat -e cpu-cycles -p 11904 --duration 10
# Stat event cache-references and cache-misses.
- $simpleperf stat -e cache-references,cache-misses -p 11904 --duration 10
+ $ simpleperf stat -e cache-references,cache-misses -p 11904 --duration 10
When running the stat command, if the number of hardware events is larger than
the number of hardware counters available in the PMU, the kernel shares hardware
@@ -212,7 +214,7 @@ time. In the example below, there is a percentage at the end of each row,
showing the percentage of the total time that each event was actually monitored.
# Stat using event cache-references, cache-references:u,....
- $simpleperf stat -p 7394 -e cache-references,cache-references:u,cache-references:k,cache-misses,cache-misses:u,cache-misses:k,instructions --duration 1
+ $ simpleperf stat -p 7394 -e cache-references,cache-references:u,cache-references:k,cache-misses,cache-misses:u,cache-misses:k,instructions --duration 1
Performance counter statistics:
4,331,018 cache-references # 4.861 M/sec (87%)
@@ -231,7 +233,7 @@ time. If we want to have some events monitored at the same time, we can use
--group option. Below is an example.
# Stat using event cache-references, cache-references:u,....
- $simpleperf stat -p 7394 --group cache-references,cache-misses --group cache-references:u,cache-misses:u --group cache-references:k,cache-misses:k -e instructions --duration 1
+ $ simpleperf stat -p 7394 --group cache-references,cache-misses --group cache-references:u,cache-misses:u --group cache-references:k,cache-misses:k -e instructions --duration 1
Performance counter statistics:
3,638,900 cache-references # 4.786 M/sec (74%)
@@ -251,13 +253,13 @@ Simpleperf can also fork a child process to run the new command and then monitor
the child process. Below are examples.
# Stat process 11904 and 11905.
- $simpleperf stat -p 11904,11905 --duration 10
+ $ simpleperf stat -p 11904,11905 --duration 10
# Stat thread 11904 and 11905.
- $simpleperf stat -t 11904,11905 --duration 10
+ $ simpleperf stat -t 11904,11905 --duration 10
# Start a child process running `ls`, and stat it.
- $simpleperf stat ls
+ $ simpleperf stat ls
**Decide how long to monitor**
When monitoring existing threads, we can use --duration option to decide how long
@@ -266,13 +268,13 @@ monitors until the child process ends. In this case, we can use Ctrl-C to stop m
at any time. Below are examples.
# Stat process 11904 for 10 seconds.
- $simpleperf stat -p 11904 --duration 10
+ $ simpleperf stat -p 11904 --duration 10
# Stat until the child process running `ls` finishes.
- $simpleperf stat ls
+ $ simpleperf stat ls
# Stop monitoring using Ctrl-C.
- $simpleperf stat -p 11904 --duration 10
+ $ simpleperf stat -p 11904 --duration 10
^C
**Decide the print interval**
@@ -280,20 +282,20 @@ When monitoring perf counters, we can also use --interval option to decide the p
interval. Below are examples.
# Print stat for process 11904 every 300ms.
- $simpleperf stat -p 11904 --duration 10 --interval 300
+ $ simpleperf stat -p 11904 --duration 10 --interval 300
# Print system wide stat at interval of 300ms for 10 seconds (rooted device only).
# system wide profiling needs root privilege
- $su 0 simpleperf stat -a --duration 10 --interval 300
+ $ su 0 simpleperf stat -a --duration 10 --interval 300
**Display counters in systrace**
simpleperf can also work with systrace to dump counters in the collected trace.
Below is an example to do a system wide stat
# capture instructions (kernel only) and cache misses with interval of 300 milliseconds for 15 seconds
- $su 0 simpleperf stat -e instructions:k,cache-misses -a --interval 300 --duration 15
+ $ su 0 simpleperf stat -e instructions:k,cache-misses -a --interval 300 --duration 15
# on host launch systrace to collect trace for 10 seconds
- (HOST)$external/chromium-trace/systrace.py --time=10 -o new.html sched gfx view
+ (HOST)$ external/chromium-trace/systrace.py --time=10 -o new.html sched gfx view
# open the collected new.html in browser and perf counters will be shown up
@@ -306,7 +308,7 @@ what frequency to dump records, how long to monitor, and where to store records.
# Record on process 7394 for 10 seconds, using default event (cpu-cycles),
# using default sample frequency (4000 samples per second), writing records
# to perf.data.
- $simpleperf record -p 7394 --duration 10
+ $ simpleperf record -p 7394 --duration 10
simpleperf I 07-11 21:44:11 17522 17522 cmd_record.cpp:316] Samples recorded: 21430. Samples lost: 0.
**Select events**
@@ -315,20 +317,20 @@ As a hardware event, it is both accurate and efficient. We can also use other
events via -e option. Below is an example.
# Record using event instructions.
- $simpleperf record -e instructions -p 11904 --duration 10
+ $ simpleperf record -e instructions -p 11904 --duration 10
**Select target to monitor**
The way to select target in record command is similar to that in stat command.
Below are examples.
# Record process 11904 and 11905.
- $simpleperf record -p 11904,11905 --duration 10
+ $ simpleperf record -p 11904,11905 --duration 10
# Record thread 11904 and 11905.
- $simpleperf record -t 11904,11905 --duration 10
+ $ simpleperf record -t 11904,11905 --duration 10
# Record a child process running `ls`.
- $simpleperf record ls
+ $ simpleperf record ls
**Set the frequency to record**
We can set the frequency to dump records via the -f or -c options. For example,
@@ -339,23 +341,23 @@ records every second. Another way is using -c option. For example, -c 10000
means dumping one record whenever 10000 events happen. Below are examples.
# Record with sample frequency 1000: sample 1000 times every second running.
- $simpleperf record -f 1000 -p 11904,11905 --duration 10
+ $ simpleperf record -f 1000 -p 11904,11905 --duration 10
# Record with sample period 100000: sample 1 time every 100000 events.
- $simpleperf record -c 100000 -t 11904,11905 --duration 10
+ $ simpleperf record -c 100000 -t 11904,11905 --duration 10
**Decide how long to monitor**
The way to decide how long to monitor in record command is similar to that in
stat command. Below are examples.
# Record process 11904 for 10 seconds.
- $simpleperf record -p 11904 --duration 10
+ $ simpleperf record -p 11904 --duration 10
# Record until the child process running `ls` finishes.
- $simpleperf record ls
+ $ simpleperf record ls
# Stop monitoring using Ctrl-C.
- $simpleperf record -p 11904 --duration 10
+ $ simpleperf record -p 11904 --duration 10
^C
**Set the path to store records**
@@ -363,7 +365,7 @@ By default, simpleperf stores records in perf.data in current directory. We can
use -o option to set the path to store records. Below is an example.
# Write records to data/perf2.data.
- $simpleperf record -p 11904 -o data/perf2.data --duration 10
+ $ simpleperf record -p 11904 -o data/perf2.data --duration 10
#### Simpleperf report
@@ -385,7 +387,7 @@ time used in each function.
# Reports perf.data, using only records sampled in libsudo-game-jni.so,
# grouping records using thread name(comm), process id(pid), thread id(tid),
# function name(symbol), and showing sample count for each row.
- $simpleperf report --dsos /data/app/com.example.sudogame-2/lib/arm64/libsudo-game-jni.so --sort comm,pid,tid,symbol -n
+ $ simpleperf report --dsos /data/app/com.example.sudogame-2/lib/arm64/libsudo-game-jni.so --sort comm,pid,tid,symbol -n
Cmdline: /data/data/com.example.sudogame/simpleperf record -p 7394 --duration 10
Arch: arm64
Event: cpu-cycles (type 0, config 0)
@@ -402,7 +404,7 @@ time used in each function.
By default, simpleperf reads perf.data in current directory. We can use -i
option to select another file to read records.
- $simpleperf report -i data/perf2.data
+ $ simpleperf report -i data/perf2.data
**Set the path to find executable binaries**
If reporting function symbols, simpleperf needs to read executable binaries
@@ -412,11 +414,11 @@ recording. However, these binaries may not exist when reporting or not contain
symbol table and debug information. So we can use --symfs to redirect the paths.
Below is an example.
- $simpleperf report
+ $ simpleperf report
# In this case, when simpleperf wants to read executable binary /A/b,
# it reads file in /A/b.
- $simpleperf report --symfs /debug_dir
+ $ simpleperf report --symfs /debug_dir
# In this case, when simpleperf wants to read executable binary /A/b,
# it prefers file in /debug_dir/A/b to file in /A/b.
@@ -425,19 +427,19 @@ When reporting, it happens that not all records are of interest. Simpleperf
supports five filters to select records of interest. Below are examples.
# Report records in threads having name sudogame.
- $simpleperf report --comms sudogame
+ $ simpleperf report --comms sudogame
# Report records in process 7394 or 7395
- $simpleperf report --pids 7394,7395
+ $ simpleperf report --pids 7394,7395
# Report records in thread 7394 or 7395.
- $simpleperf report --tids 7394,7395
+ $ simpleperf report --tids 7394,7395
# Report records in libsudo-game-jni.so.
- $simpleperf report --dsos /data/app/com.example.sudogame-2/lib/arm64/libsudo-game-jni.so
+ $ simpleperf report --dsos /data/app/com.example.sudogame-2/lib/arm64/libsudo-game-jni.so
# Report records in function checkValid or canFindSolution_r.
- $simpleperf report --symbols "checkValid(Board const&, int, int);canFindSolution_r(Board&, int, int)"
+ $ simpleperf report --symbols "checkValid(Board const&, int, int);canFindSolution_r(Board&, int, int)"
**Decide how to group records into sample entries**
Simpleperf uses --sort option to decide how to group sample entries. Below are
@@ -445,26 +447,26 @@ examples.
# Group records based on their process id: records having the same process
# id are in the same sample entry.
- $simpleperf report --sort pid
+ $ simpleperf report --sort pid
# Group records based on their thread id and thread comm: records having
# the same thread id and thread name are in the same sample entry.
- $simpleperf report --sort tid,comm
+ $ simpleperf report --sort tid,comm
# Group records based on their binary and function: records in the same
# binary and function are in the same sample entry.
- $simpleperf report --sort dso,symbol
+ $ simpleperf report --sort dso,symbol
# Default option: --sort comm,pid,tid,dso,symbol. Group records in the same
# thread, and belong to the same function in the same binary.
- $simpleperf report
+ $ simpleperf report
## Android application profiling
This section shows how to profile an Android application.
[Here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/README.md) are examples. And we use
-[SimpleperfExamplePureJava]((https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava) project to show the profiling results.
+[SimpleperfExamplePureJava](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava) project to show the profiling results.
Simpleperf only supports profiling native instructions in binaries in ELF
format. If the Java code is executed by interpreter, or with jit cache, it
@@ -501,32 +503,32 @@ the jvm running in oat mode, which is only available >= L.
To profile Java code, we need the jvm running in oat mode. But on Android O,
debuggable applications are forced to run in jit mode. To work around this,
we need to add a `wrap.sh` in the apk. So if you are running on Android O device,
-Check [here]((https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava/app/profiling.gradle)
+Check [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava/app/profiling.gradle)
for how to add `wrap.sh` in the apk.
**4. Make sure C++ code is compiled with optimizing flags.**
If the application contains C++ code, it can be compiled with -O0 flag in debug build type.
-This makes C++ code slow. Check [here]((https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava/app/profiling.gradle)
+This makes C++ code slow. Check [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava/app/profiling.gradle)
for how to avoid that.
**5. Use native libraries with debug info in the apk when possible.**
If the application contains C++ code or pre-compiled native libraries, try to use
unstripped libraries in the apk. This helps simpleperf generating better profiling
-results. Check [here]((https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava/app/profiling.gradle)
+results. Check [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava/app/profiling.gradle)
for how to use unstripped libraries.
-Here we use [SimpleperfExamplePureJava]((https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava) as an example.
+Here we use [SimpleperfExamplePureJava](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/demo/SimpleperfExamplePureJava) as an example.
It builds an app-profiling.apk for profiling.
- $git clone https://android.googlesource.com/platform/system/extras
- $cd extras/simpleperf/demo
+ $ git clone https://android.googlesource.com/platform/system/extras
+ $ cd extras/simpleperf/demo
# Open SimpleperfExamplesPureJava project with Android studio,
# and build this project sucessfully, otherwise the `./gradlew` command below will fail.
- $cd SimpleperfExamplePureJava
+ $ cd SimpleperfExamplePureJava
# On windows, use "gradlew" instead.
- $./gradlew clean assemble
- $adb install -r app/build/outputs/apk/app-profiling.apk
+ $ ./gradlew clean assemble
+ $ adb install -r app/build/outputs/apk/app-profiling.apk
### Record and report profiling data (using command-lines)
@@ -537,7 +539,7 @@ step by step. So we first show how to use command lines.
**1. Enable profiling**
- $adb shell setprop security.perf_harden 0
+ $ adb shell setprop security.perf_harden 0
**2. Fully compile the app**
@@ -546,10 +548,10 @@ in the application. This needs different commands on different Android versions.
On Android >= N:
- $adb shell setprop debug.generate-debug-info true
- $adb shell cmd package compile -f -m speed com.example.simpleperf.simpleperfexamplepurejava
+ $ adb shell setprop debug.generate-debug-info true
+ $ adb shell cmd package compile -f -m speed com.example.simpleperf.simpleperfexamplepurejava
# Restart the app to take effect
- $adb shell am force-stop com.example.simpleperf.simpleperfexamplepurejava
+ $ adb shell am force-stop com.example.simpleperf.simpleperfexamplepurejava
On Android M devices, We need root privilege to force Android to fully compile
Java code into native instructions in ELF binaries with debug information. We
@@ -557,29 +559,29 @@ also need root privilege to read compiled native binaries (because installd
writes them to a directory whose uid/gid is system:install). So profiling Java
code can only be done on rooted devices.
- $adb root
- $adb shell setprop dalvik.vm.dex2oat-flags -g
+ $ adb root
+ $ adb shell setprop dalvik.vm.dex2oat-flags -g
# Reinstall the app.
- $adb install -r app/build/outputs/apk/app-profiling.apk
+ $ adb install -r app/build/outputs/apk/app-profiling.apk
On Android L devices, we also need root privilege to compile the app with debug info
and access the native binaries.
- $adb root
- $adb shell setprop dalvik.vm.dex2oat-flags --include-debug-symbols
+ $ adb root
+ $ adb shell setprop dalvik.vm.dex2oat-flags --include-debug-symbols
# Reinstall the app.
- $adb install -r app/build/outputs/apk/app-profiling.apk
+ $ adb install -r app/build/outputs/apk/app-profiling.apk
**3. Find the app process**
# Start the app if needed
- $adb shell am start -n com.example.simpleperf.simpleperfexamplepurejava/.MainActivity
+ $ adb shell am start -n com.example.simpleperf.simpleperfexamplepurejava/.MainActivity
# Run `ps` in the app's context. On Android >= O devicces, run `ps -e` instead.
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ps | grep simpleperf
+ $ adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ps | grep simpleperf
u0_a151 6885 3346 1590504 53980 SyS_epoll_ 6fc2024b6c S com.example.simpleperf.simpleperfexamplepurejava
So the id of the app process is `6885`. We will use this number in the command lines below,
@@ -588,22 +590,22 @@ please replace this number with what you get by running `ps` command.
**4. Download simpleperf to the app's data directory**
# Find which architecture the app is using.
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava cat /proc/6885/maps | grep boot.oat
+ $ adb shell run-as com.example.simpleperf.simpleperfexamplepurejava cat /proc/6885/maps | grep boot.oat
708e6000-70e33000 r--p 00000000 103:09 1214 /system/framework/arm64/boot.oat
# The app uses /arm64/boot.oat, so push simpleperf in bin/android/arm64/ to device.
- $cd ../../scripts/
- $adb push bin/android/arm64/simpleperf /data/local/tmp
- $adb shell chmod a+x /data/local/tmp/simpleperf
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava cp /data/local/tmp/simpleperf .
+ $ cd ../../scripts/
+ $ adb push bin/android/arm64/simpleperf /data/local/tmp
+ $ adb shell chmod a+x /data/local/tmp/simpleperf
+ $ adb shell run-as com.example.simpleperf.simpleperfexamplepurejava cp /data/local/tmp/simpleperf .
**5. Record perf.data**
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record -p 6885 --duration 10 --dump-symbols
+ $ adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record -p 6885 --duration 10
simpleperf I 04-27 20:41:11 6940 6940 cmd_record.cpp:357] Samples recorded: 40008. Samples lost: 0.
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ls -lh perf.data
+ $ adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ls -lh perf.data
simpleperf I 04-27 20:31:40 5999 5999 cmd_record.cpp:357] Samples recorded: 39949. Samples lost: 0.
The profiling data is recorded at perf.data.
@@ -617,16 +619,18 @@ There are many options to record profiling data, check [record command](#simplep
**6. Report perf.data**
# Pull perf.data on host.
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava cat perf.data >perf.data
+ $ adb shell "run-as com.example.simpleperf.simpleperfexamplepurejava cat perf.data | tee /data/local/tmp/perf.data >/dev/null"
+ $ adb pull /data/local/tmp/perf.data
# Report samples using corresponding simpleperf executable on host.
# On windows, use "bin\windows\x86_64\simpleperf" instead.
- $bin/linux/x86_64/simpleperf report
+ $ bin/linux/x86_64/simpleperf report
...
Overhead Command Pid Tid Shared Object Symbol
83.54% Thread-2 6885 6900 /data/app/com.example.simpleperf.simpleperfexamplepurejava-2/oat/arm64/base.odex void com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run()
16.11% Thread-2 6885 6900 /data/app/com.example.simpleperf.simpleperfexamplepurejava-2/oat/arm64/base.odex int com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.callFunction(int)
+See [here](#the-correct-way-to-pull-perfdata-on-host) for why we use tee rather than just >.
There are many ways to show reports, check [report command](#simpleperf-report) for details.
@@ -641,7 +645,7 @@ results and native binaries on host. It is configured by `app-profiler.config`.
Change `app_package_name` line to app_package_name="com.example.simpleperf.simpleperfexamplepurejava"
Change `apk_file_path` line to apk_file_path = "../SimpleperfExamplePureJava/app/build/outputs/apk/app-profiling.apk"
Change `android_studio_project_dir` line to android_studio_project_dir = "../SimpleperfExamplePureJava/"
- Change `record_options` line to record_options = "--dump-symbols --duration 10"
+ Change `record_options` line to record_options = "--duration 10"
`apk_file_path` is needed to fully compile the application on Android L/M. It is
not necessary on Android >= N.
@@ -653,7 +657,7 @@ application. It is not necessary for profiling.
**2. Run `app-profiler.py`**
- $python app_profiler.py
+ $ python app_profiler.py
If running successfully, it will collect profiling data in perf.data in current
@@ -663,7 +667,7 @@ directory, and related native binaries in binary_cache/.
We can use `report.py` to report perf.data.
- $python report.py
+ $ python report.py
We can add any option accepted by `simpleperf report` command to `report.py`.
@@ -693,11 +697,11 @@ A call graph is a tree showing function call relations. Below is an example.
When using command lines, add `-g` option like below:
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record -g -p 6685 --duration 10 --dump-symbols
+ $ adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record -g -p 6685 --duration 10
When using python scripts, change `app-profiler.config` as below:
- Change `record_options` line to record_options = "--dump-symbols --duration 10 -g"
+ Change `record_options` line to record_options = "--duration 10 -g"
Recording dwarf based call graph needs support of debug information
in native binaries. So if using native libraries in the application,
@@ -708,11 +712,11 @@ it is better to contain non-stripped native libraries in the apk.
When using command lines, add `--call-graph fp` option like below:
- $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record --call-graph fp -p 6685 --duration 10 --dump-symbols
+ $ adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record --call-graph fp -p 6685 --duration 10
When using python scripts, change `app-profiler.config` as below:
- Change `record_options` line to record_options = "--dump-symbols --duration 10 --call-graph fp"
+ Change `record_options` line to record_options = "--duration 10 --call-graph fp"
Recording stack frame based call graphs needs support of stack frame
register. Notice that on arm architecture, the stack frame register
@@ -724,9 +728,9 @@ architecture, or profiling in arm64 environment.**
#### Report call graph
-To report call graph using command lines, add `-g --brief-callgraph` option.
+To report call graph using command lines, add `-g` option.
- $bin/linux/x86_64/simpleperf report -g --brief-callgraph
+ $ bin/linux/x86_64/simpleperf report -g
...
Children Self Command Pid Tid Shared Object Symbol
99.97% 0.00% Thread-2 10859 10876 /system/framework/arm64/boot.oat java.lang.Thread.run
@@ -741,7 +745,7 @@ To report call graph using command lines, add `-g --brief-callgraph` option.
To report call graph using python scripts, add `-g` option.
- $python report.py -g
+ $ python report.py -g
# Double-click an item started with '+' to show its callgraph.
### Visualize profiling data
@@ -753,9 +757,9 @@ to other formats. Below are two examples.
### Show flamegraph
- $python report_sample.py >out.perf
- $stackcollapse-perf.pl out.perf >out.folded
- $./flamegraph.pl out.folded >a.svg
+ $ python report_sample.py >out.perf
+ $ stackcollapse-perf.pl out.perf >out.folded
+ $ ./flamegraph.pl out.folded >a.svg
### Visualize using pprof
@@ -764,8 +768,8 @@ pprof is a tool for visualization and analysis of profiling data. It can
be got from https://github.com/google/pprof. pprof_proto_generator.py can
generate profiling data in a format acceptable by pprof.
- $python pprof_proto_generator.py
- $pprof -pdf pprof.profile
+ $ python pprof_proto_generator.py
+ $ pprof -pdf pprof.profile
### Annotate source code
@@ -786,7 +790,7 @@ in PATH environment variable.
**2. Run `annotate.py`**
- $python annotate.py
+ $ python annotate.py
**3. Read annotated code**
@@ -808,3 +812,15 @@ It's content is similar to below:
// p field means how much time is spent just in current line.
/* acc_p: 99.966552%, p: 83.628188% */ i = callFunction(i);
+
+## Answers to common issues
+
+### The correct way to pull perf.data on host
+As perf.data is generated in app's context, it can't be pulled directly to host.
+One way is to `adb shell run-as xxx cat perf.data >perf.data`. However, it
+doesn't work well on Windows, because the content can be modified when it goes
+through the pipe. So we first copy it from app's context to shell's context,
+then pull it on host. The commands are as below:
+
+ $adb shell "run-as xxx cat perf.data | tee /data/local/tmp/perf.data >/dev/null"
+ $adb pull /data/local/tmp/perf.data
diff --git a/annotate.py b/annotate.py
index d88a916..2b253bd 100644
--- a/annotate.py
+++ b/annotate.py
@@ -65,7 +65,7 @@ class Addr2Line(object):
dso = self.dso_dict.get(dso_name)
if dso is None:
self.dso_dict[dso_name] = dso = dict()
- if not dso.has_key(addr):
+ if addr not in dso:
dso[addr] = None
@@ -95,7 +95,8 @@ class Addr2Line(object):
addr_str = '\n'.join(addr_str)
subproc = subprocess.Popen([self.addr2line_path, '-e', dso_path, '-aifC'],
stdin=subprocess.PIPE, stdout=subprocess.PIPE)
- (stdoutdata, _) = subproc.communicate(addr_str)
+ (stdoutdata, _) = subproc.communicate(str_to_bytes(addr_str))
+ stdoutdata = bytes_to_str(stdoutdata)
stdoutdata = stdoutdata.strip().split('\n')
if len(stdoutdata) < len(addrs):
log_fatal("addr2line didn't output enough lines")
@@ -270,7 +271,7 @@ class SourceFileAnnotator(object):
'annotate_dest_dir', 'comm_filters', 'pid_filters',
'tid_filters', 'dso_filters', 'addr2line_path']
for name in config_names:
- if not config.has_key(name):
+ if name not in config:
log_fatal('config [%s] is missing' % name)
symfs_dir = config['symfs_dir']
if symfs_dir and not os.path.isdir(symfs_dir):
@@ -435,7 +436,7 @@ class SourceFileAnnotator(object):
def _add_dso_period(self, dso_name, period, used_dso_dict):
- if not used_dso_dict.has_key(dso_name):
+ if dso_name not in used_dso_dict:
used_dso_dict[dso_name] = True
dso_period = self.dso_periods.get(dso_name)
if dso_period is None:
@@ -444,7 +445,7 @@ class SourceFileAnnotator(object):
def _add_file_period(self, source, period, used_file_dict):
- if not used_file_dict.has_key(source.file_key):
+ if source.file_key not in used_file_dict:
used_file_dict[source.file_key] = True
file_period = self.file_periods.get(source.file)
if file_period is None:
@@ -453,14 +454,14 @@ class SourceFileAnnotator(object):
def _add_line_period(self, source, period, used_line_dict):
- if not used_line_dict.has_key(source.line_key):
+ if source.line_key not in used_line_dict:
used_line_dict[source.line_key] = True
file_period = self.file_periods[source.file]
file_period.add_line_period(source.line, period)
def _add_function_period(self, source, period, used_function_dict):
- if not used_function_dict.has_key(source.function_key):
+ if source.function_key not in used_function_dict:
used_function_dict[source.function_key] = True
file_period = self.file_periods[source.file]
file_period.add_function_period(source.function, source.line, period)
@@ -471,14 +472,14 @@ class SourceFileAnnotator(object):
with open(summary, 'w') as f:
f.write('total period: %d\n\n' % self.period)
dso_periods = sorted(self.dso_periods.values(),
- cmp=lambda x, y: cmp(y.period.acc_period, x.period.acc_period))
+ key=lambda x: x.period.acc_period, reverse=True)
for dso_period in dso_periods:
f.write('dso %s: %s\n' % (dso_period.dso_name,
self._get_percentage_str(dso_period.period)))
f.write('\n')
file_periods = sorted(self.file_periods.values(),
- cmp=lambda x, y: cmp(y.period.acc_period, x.period.acc_period))
+ key=lambda x: x.period.acc_period, reverse=True)
for file_period in file_periods:
f.write('file %s: %s\n' % (file_period.file,
self._get_percentage_str(file_period.period)))
@@ -489,8 +490,7 @@ class SourceFileAnnotator(object):
for func_name in file_period.function_dict.keys():
func_start_line, period = file_period.function_dict[func_name]
values.append((func_name, func_start_line, period))
- values = sorted(values,
- cmp=lambda x, y: cmp(y[2].acc_period, x[2].acc_period))
+ values = sorted(values, key=lambda x: x[2].acc_period, reverse=True)
for value in values:
f.write('\tfunction (%s): line %d, %s\n' % (
value[0], value[1], self._get_percentage_str(value[2])))
@@ -515,7 +515,7 @@ class SourceFileAnnotator(object):
def _collect_source_files(self):
self.source_file_dict = dict()
- source_file_suffix = ['h', 'c', 'cpp', 'cc', 'java']
+ source_file_suffix = ['h', 'c', 'cpp', 'cc', 'java', 'kt']
for source_dir in self.config['source_dirs']:
for root, _, files in os.walk(source_dir):
for file in files:
@@ -633,4 +633,4 @@ if __name__ == '__main__':
config = load_config(args.config)
annotator = SourceFileAnnotator(config)
annotator.annotate()
- log_info('annotate finish successfully, please check result in annotated_files/.') \ No newline at end of file
+ log_info('annotate finish successfully, please check result in annotated_files/.')
diff --git a/app_profiler.config b/app_profiler.config
index 4b61edb..752b85f 100644
--- a/app_profiler.config
+++ b/app_profiler.config
@@ -49,8 +49,8 @@ if recompile_app and not launch_activity and not launch_inst_test:
# Profiling record options that will be passed directly to `simpleperf record` command on device.
-# As we can't stop profiling by Ctrl-C, we need to set how long to profile using "--duration".
-record_options = "-e cpu-cycles:u -f 4000 -g --dump-symbols --duration 10"
+# You can set how long to profile using "--duration" option, or use Ctrl-C to stop profiling.
+record_options = "-e cpu-cycles:u -f 4000 -g --duration 10"
# The path to store generated perf.data on host.
diff --git a/app_profiler.py b/app_profiler.py
index 6c889b4..e2a137f 100644
--- a/app_profiler.py
+++ b/app_profiler.py
@@ -49,7 +49,7 @@ class AppProfiler(object):
'record_options', 'perf_data_path', 'adb_path', 'readelf_path',
'binary_cache_dir']
for name in config_names:
- if not config.has_key(name):
+ if name not in config:
log_fatal('config [%s] is missing' % name)
native_lib_dir = config.get('native_lib_dir')
if native_lib_dir and not os.path.isdir(native_lib_dir):
@@ -121,7 +121,7 @@ class AppProfiler(object):
self.adb.set_property('security.perf_harden', '0')
if self.is_root_device:
# We can enable kernel symbols
- self.adb.run(['shell', 'echo', '0', '>/proc/sys/kernel/kptr_restrict'])
+ self.adb.run(['shell', 'echo 0 >/proc/sys/kernel/kptr_restrict'])
def _recompile_app(self):
@@ -265,16 +265,41 @@ class AppProfiler(object):
def start_and_wait_profiling(self):
- self.run_in_app_dir([
- './simpleperf', 'record', self.config['record_options'], '-p',
- str(self.app_pid), '--symfs', '.'])
+ subproc = None
+ returncode = None
+ try:
+ args = self.get_run_in_app_dir_args([
+ './simpleperf', 'record', self.config['record_options'], '-p',
+ str(self.app_pid), '--symfs', '.'])
+ adb_args = [self.adb.adb_path] + args
+ log_debug('run adb cmd: %s' % adb_args)
+ subproc = subprocess.Popen(adb_args)
+ returncode = subproc.wait()
+ except KeyboardInterrupt:
+ if subproc:
+ self.stop_profiling()
+ returncode = 0
+ log_debug('run adb cmd: %s [result %s]' % (adb_args, returncode == 0))
+
+
+ def stop_profiling(self):
+ """ Stop profiling by sending SIGINT to simpleperf, and wait until it exits
+ to make sure perf.data is completely generated."""
+ has_killed = False
+ while True:
+ (result, _) = self.run_in_app_dir(['pidof', 'simpleperf'], check_result=False)
+ if not result:
+ break
+ if not has_killed:
+ has_killed = True
+ self.run_in_app_dir(['pkill', '-l', '2', 'simpleperf'], check_result=False)
+ time.sleep(1)
def collect_profiling_data(self):
- self.run_in_app_dir(['chmod', 'a+rw', 'perf.data'])
- self.adb.check_run(['shell', 'cp',
- '/data/data/%s/perf.data' % self.config['app_package_name'], '/data/local/tmp'])
- self.adb.check_run(['pull', '/data/local/tmp/perf.data', self.config['perf_data_path']])
+ self.run_in_app_dir(['cat perf.data | tee /data/local/tmp/perf.data >/dev/null'])
+ self.adb.check_run_and_return_output(['pull', '/data/local/tmp/perf.data',
+ self.config['perf_data_path']])
config = copy.copy(self.config)
config['symfs_dirs'] = []
if self.config['native_lib_dir']:
@@ -283,13 +308,20 @@ class AppProfiler(object):
binary_cache_builder.build_binary_cache()
- def run_in_app_dir(self, args):
+ def run_in_app_dir(self, args, stdout_file=None, check_result=True):
+ args = self.get_run_in_app_dir_args(args)
+ if check_result:
+ return self.adb.check_run_and_return_output(args, stdout_file)
+ else:
+ return self.adb.run_and_return_output(args, stdout_file)
+
+
+ def get_run_in_app_dir_args(self, args):
if self.is_root_device:
- cmd = 'cd /data/data/' + self.config['app_package_name'] + ' && ' + (' '.join(args))
- return self.adb.check_run_and_return_output(['shell', cmd])
+ return ['shell', 'cd /data/data/' + self.config['app_package_name'] + ' && ' +
+ (' '.join(args))]
else:
- return self.adb.check_run_and_return_output(
- ['shell', 'run-as', self.config['app_package_name']] + args)
+ return ['shell', 'run-as', self.config['app_package_name']] + args
if __name__ == '__main__':
diff --git a/bin/android/arm/simpleperf b/bin/android/arm/simpleperf
index 4bb1ef9..77d636a 100755
--- a/bin/android/arm/simpleperf
+++ b/bin/android/arm/simpleperf
Binary files differ
diff --git a/bin/android/arm64/simpleperf b/bin/android/arm64/simpleperf
index 365a943..e16dba7 100755
--- a/bin/android/arm64/simpleperf
+++ b/bin/android/arm64/simpleperf
Binary files differ
diff --git a/bin/android/x86/simpleperf b/bin/android/x86/simpleperf
index 6d77115..580e605 100755
--- a/bin/android/x86/simpleperf
+++ b/bin/android/x86/simpleperf
Binary files differ
diff --git a/bin/android/x86_64/simpleperf b/bin/android/x86_64/simpleperf
index c31dc40..07bf5fe 100755
--- a/bin/android/x86_64/simpleperf
+++ b/bin/android/x86_64/simpleperf
Binary files differ
diff --git a/bin/darwin/x86/libsimpleperf_report.dylib b/bin/darwin/x86/libsimpleperf_report.dylib
index cccfd9c..b60acab 100755
--- a/bin/darwin/x86/libsimpleperf_report.dylib
+++ b/bin/darwin/x86/libsimpleperf_report.dylib
Binary files differ
diff --git a/bin/darwin/x86/simpleperf b/bin/darwin/x86/simpleperf
index a73138b..e505397 100755
--- a/bin/darwin/x86/simpleperf
+++ b/bin/darwin/x86/simpleperf
Binary files differ
diff --git a/bin/darwin/x86_64/libsimpleperf_report.dylib b/bin/darwin/x86_64/libsimpleperf_report.dylib
index a734c87..f260a92 100755
--- a/bin/darwin/x86_64/libsimpleperf_report.dylib
+++ b/bin/darwin/x86_64/libsimpleperf_report.dylib
Binary files differ
diff --git a/bin/darwin/x86_64/simpleperf b/bin/darwin/x86_64/simpleperf
index 3ca9e1a..fbb43de 100755
--- a/bin/darwin/x86_64/simpleperf
+++ b/bin/darwin/x86_64/simpleperf
Binary files differ
diff --git a/bin/linux/x86/libsimpleperf_report.so b/bin/linux/x86/libsimpleperf_report.so
index d79ed74..54e93b8 100755
--- a/bin/linux/x86/libsimpleperf_report.so
+++ b/bin/linux/x86/libsimpleperf_report.so
Binary files differ
diff --git a/bin/linux/x86/simpleperf b/bin/linux/x86/simpleperf
index 7459a3e..1621233 100755
--- a/bin/linux/x86/simpleperf
+++ b/bin/linux/x86/simpleperf
Binary files differ
diff --git a/bin/linux/x86_64/libsimpleperf_report.so b/bin/linux/x86_64/libsimpleperf_report.so
index 5f5671b..74968a4 100755
--- a/bin/linux/x86_64/libsimpleperf_report.so
+++ b/bin/linux/x86_64/libsimpleperf_report.so
Binary files differ
diff --git a/bin/linux/x86_64/simpleperf b/bin/linux/x86_64/simpleperf
index 186cf1a..3c5f0be 100755
--- a/bin/linux/x86_64/simpleperf
+++ b/bin/linux/x86_64/simpleperf
Binary files differ
diff --git a/bin/windows/x86/libsimpleperf_report.dll b/bin/windows/x86/libsimpleperf_report.dll
index 1f985ed..6803307 100755
--- a/bin/windows/x86/libsimpleperf_report.dll
+++ b/bin/windows/x86/libsimpleperf_report.dll
Binary files differ
diff --git a/bin/windows/x86/simpleperf.exe b/bin/windows/x86/simpleperf.exe
index 46822bd..bcab5c1 100755
--- a/bin/windows/x86/simpleperf.exe
+++ b/bin/windows/x86/simpleperf.exe
Binary files differ
diff --git a/bin/windows/x86_64/libsimpleperf_report.dll b/bin/windows/x86_64/libsimpleperf_report.dll
index e774593..a3d59bb 100755
--- a/bin/windows/x86_64/libsimpleperf_report.dll
+++ b/bin/windows/x86_64/libsimpleperf_report.dll
Binary files differ
diff --git a/bin/windows/x86_64/simpleperf.exe b/bin/windows/x86_64/simpleperf.exe
index 46822bd..bcab5c1 100755
--- a/bin/windows/x86_64/simpleperf.exe
+++ b/bin/windows/x86_64/simpleperf.exe
Binary files differ
diff --git a/binary_cache_builder.py b/binary_cache_builder.py
index aa0e6e6..950e2fb 100644
--- a/binary_cache_builder.py
+++ b/binary_cache_builder.py
@@ -39,7 +39,7 @@ class BinaryCacheBuilder(object):
config_names = ['perf_data_path', 'symfs_dirs', 'adb_path',
'readelf_path', 'binary_cache_dir']
for name in config_names:
- if not config.has_key(name):
+ if name not in config:
log_fatal('config for "%s" is missing' % name)
self.perf_data_path = config.get('perf_data_path')
@@ -82,7 +82,7 @@ class BinaryCacheBuilder(object):
for symbol in symbols:
dso_name = symbol.dso_name
- if not binaries.has_key(dso_name):
+ if dso_name not in binaries:
binaries[dso_name] = lib.GetBuildIdForPath(dso_name)
self.binaries = binaries
@@ -182,6 +182,7 @@ class BinaryCacheBuilder(object):
if not self.readelf_path:
return ""
output = subprocess.check_output([self.readelf_path, '-n', file])
+ output = bytes_to_str(output)
result = re.search(r'Build ID:\s*(\S+)', output)
if result:
build_id = result.group(1)
@@ -197,6 +198,7 @@ class BinaryCacheBuilder(object):
if not self.readelf_path:
return False
output = subprocess.check_output([self.readelf_path, '-S', file])
+ output = bytes_to_str(output)
if output.find('.symtab') != -1:
return True
return False
diff --git a/pprof_proto_generator.py b/pprof_proto_generator.py
index c877a16..fa2fdb1 100644
--- a/pprof_proto_generator.py
+++ b/pprof_proto_generator.py
@@ -31,7 +31,6 @@ import os.path
import profile_pb2
import re
import shutil
-import subprocess
import sys
import time
@@ -257,7 +256,10 @@ class PprofProfileGenerator(object):
self.lib = ReportLib()
if config.get('binary_cache_dir'):
- self.lib.SetSymfs(config['binary_cache_dir'])
+ if not os.path.isdir(config.get('binary_cache_dir')):
+ config['binary_cache_dir'] = ''
+ else:
+ self.lib.SetSymfs(config['binary_cache_dir'])
if config.get('record_file'):
self.lib.SetRecordFile(config['record_file'])
if config.get('kallsyms'):
@@ -316,7 +318,8 @@ class PprofProfileGenerator(object):
self.add_sample(sample)
# 2. Generate line info for locations and functions.
- self.gen_source_lines()
+ if self.config.get('binary_cache_dir'):
+ self.gen_source_lines()
# 3. Produce samples/locations/functions in profile
for sample in self.sample_list:
@@ -511,8 +514,12 @@ class PprofProfileGenerator(object):
profile_mapping.build_id = mapping.build_id_id
profile_mapping.has_filenames = True
profile_mapping.has_functions = True
- profile_mapping.has_line_numbers = True
- profile_mapping.has_inline_frames = True
+ if self.config.get('binary_cache_dir'):
+ profile_mapping.has_line_numbers = True
+ profile_mapping.has_inline_frames = True
+ else:
+ profile_mapping.has_line_numbers = False
+ profile_mapping.has_inline_frames = False
def gen_profile_location(self, location):
profile_location = self.profile.location.add()
diff --git a/repo.prop b/repo.prop
index f257fb4..5004eed 100644
--- a/repo.prop
+++ b/repo.prop
@@ -4,7 +4,7 @@ device/common 81fa95978b5542b9d2851b04d034b9a75ed8b43b
device/generic/arm64 23d9a6b57c63fbea914ae663a0be693b43d91ffc
device/generic/armv7-a-neon dd168c481dcb14c7932c7026ac7c8b4af128e4a5
device/generic/common 11c092a6cbfcf6207f07a9a8e3398e747e7f5461
-device/generic/goldfish e87326d436005cfcff7b597ecf5cda21f8cd7b0e
+device/generic/goldfish eb66ec9609a6c6422cfec97074eaefe9b3b436cd
device/generic/goldfish-opengl b0a0e2f0297a1b379dd460dbb74153773196238c
device/generic/mini-emulator-arm64 6f2e6974a1b1dc0ef936aec732e33d553c000b5e
device/generic/mini-emulator-armv7-a-neon 9d7cbb60819a1da8408a7148b965b4cd1ebbb570
@@ -15,146 +15,145 @@ device/generic/mini-emulator-x86_64 bcb1f5139c24bebbb0cc0ebd2f50d83cd21b01b9
device/generic/mips 23901a9cf7a62f5f8f9f0c1382b5707694a1661c
device/generic/mips64 03b4192ab5125e5d67636dc4c7121f089799e1fb
device/generic/qemu 99feb6138f39e392495057ef7f2c4a5ed27f9e2d
+device/generic/uml c2e8fa7d294d2b83bbe6054dd7b94139517e8637
device/generic/x86 dac918b4cd4a34342526588502e4b5a531183080
device/generic/x86_64 f00aa59b3af4937ed014701755e9b01c95122187
device/google/accessory/arduino abc5159a3ca9dbb5c7e364a1eab99901a4440ac5
device/google/accessory/demokit 7dfe7f89a3b174709c773fe319531006e46440d9
device/google/atv fbc45fb7c00d9b0150acdb674c9525ab32abe349
-device/google/contexthub b0a8cc4ed7a173314898fb75a286f3179b1a69e1
-device/google/dragon b02923940ab980bd361777629a04fde338e84766
+device/google/contexthub fd765cf358dba4be60b62ee068d6d0cc41674319
+device/google/dragon 0c29277c7842d8fe7b6ba49b2af35196030f093b
device/google/dragon-kernel 8c9e4d14540119e0815a453eb4fefbedeaf8794f
-device/google/marlin 8ba659488f2010e135222049cf237839962f482c
+device/google/marlin c97ff13f9686384cf3089f70c83044bd2c7b5124
device/google/marlin-kernel 48bde4626f5da9605b068b6c1bcc1e854a876d52
-device/htc/flounder 949fd9533a62ecc88c2ed30df2244147387e3a1a
-device/htc/flounder-kernel 1edc369683182e3353e1b802272d2406ef4f40fe
-device/huawei/angler 81f327d5a743a8f149e4e44cf1a1ea773cb54e92
+device/huawei/angler 602d56d59460ce359dccaa418687bbe95a0619bb
device/huawei/angler-kernel db808069857bd03e573ce3c765dd6df43f2a4318
-device/lge/bullhead 7f78fc7bcd1e2349e3384e4c498a5fd00fb75804
+device/lge/bullhead 45cfd5d7594c92ff992e35f80c115b3db06f5d8a
device/lge/bullhead-kernel 3f270065c17302930cc9319d399297436b65b3bc
-device/linaro/bootloader/OpenPlatformPkg a3d50249601e68f7d3c885d4259725c54130a213
+device/linaro/bootloader/OpenPlatformPkg 71183d6eabb1f91198f1bd3705a85b419cfd4685
device/linaro/bootloader/arm-trusted-firmware 36aa82dda56169333aba6b2c55341404c1d631f0
-device/linaro/bootloader/edk2 09fc3d39493c50b938317477cc7095cee853eb33
-device/linaro/hikey 9e18cca0b575ad8ca3e6a158cab4795b345c0960
-device/linaro/hikey-kernel b70608ac73211ffa2c381168758dda457f2bc453
-device/moto/shamu df9354d7a28a67ac335a8f608d20bde6f0a97254
-device/moto/shamu-kernel 9ee09a9a4c803663cb0eb415d8ae1d57ba367cfb
-device/sample 7e5328e4f8a49db4424bd8c1ab7a203597b9010f
-kernel/tests 004476f0b91f314aaee4ef3e016f99492b80948a
-platform/art b9c3a99096c746b09af611e55e11b86600374011
-platform/bionic 1f9e64887882b532bdd12b6fbfa80817c2b67714
-platform/bootable/recovery f347c1abcac3bb1684d1ae329e3c229e7bf0b5b7
-platform/build a65a41dcdbdeb3a93e10993d47be94c249ef3ee8
-platform/build/blueprint e36ad10ea36302ade99b23e4ea1f4fed308a5116
-platform/build/kati 4124b98e2ff330b87ba8ba878a8affbde898df82
-platform/build/soong 528d5e5d2884309394a8518260682b4b41884051
-platform/compatibility/cdd 068a1efdb6a01e051cd5ca581b3fd70cf1382de5
-platform/cts 8617c799b02daa6dd0fa142ad097a3670e013cc6
-platform/dalvik 9fa280c2171b3a016d63e80cda7be031519b7ef7
+device/linaro/bootloader/edk2 02a0d1e313dc6e4d9e136f651c107f0533f34324
+device/linaro/hikey 14fc8793687878c840f48f6c6c7a4d00aa628c16
+device/linaro/hikey-kernel 60b637267e3d3b5140590649651c7033375aafb7
+device/sample 15f7857fc7b7f7cfd99ec4f93b151dc02a71b837
+kernel/tests 5c1b6c8a855bccc16bb27919d74e8b28102a5a4e
+platform/art fe9a4f061841a3c597aac6817a47c799c54fcad7
+platform/bionic fa21a8040747da164832a5e948087a455432a3b7
+platform/bootable/recovery f722fcf0d4b431aed3f415d5b86b94747313fdf5
+platform/build 9ea6a8b817928462492c4f7e1f16f6ff3a314a03
+platform/build/blueprint 8d20586d568d04037c258a25a5350676276351ab
+platform/build/kati bcb31defde3e3fc248a1f11049e7722233003b6f
+platform/build/soong 397866653ea737d8eef02d04827404f8a3eeeb19
+platform/compatibility/cdd 644a1933b78f1b08e86cecb58e199cd43ff7bd26
+platform/cts e2cca16dcec227c707caafdfe04be0a90aabf6d4
+platform/dalvik 744b9509074fe99fdf3f2dbaf73dea20dba96b31
platform/developers/build 67343aa8a5faeb6b4df459dbfce4cc17bc7f21f9
platform/developers/demos 95d49d216223e3431647abd79f5e376958353c95
platform/developers/samples/android b329d0bb80feecf6a27d38fe0bb3c018a2ba16aa
-platform/development 1686af001e95cb2dae657e3d1459f97fd8f13b44
-platform/docs/source.android.com b5464ea51e87828fc16dc194dfc00e72bf1b224e
+platform/development f194748c7b3571fb0257c48db7915cbc925d165e
+platform/docs/source.android.com 14605d77b5e0aabc741b2b69d53e9e772f010b23
platform/external/ImageMagick 7a8860406c015bbc63f382efed9372044eb0cb74
platform/external/Microsoft-GSL 44079759f93259a9694607502406dfe3717b04ba
-platform/external/aac b0f6b2906ed8924aed7fbfdaf55bd50ead238f32
+platform/external/aac db596910262534891ecde361a71abe7ada57405a
platform/external/abi-compliance-checker c692633e1b2dddfb8f5ec7f60eb7a62ced325e4f
-platform/external/abi-dumper 28c0931c566dbf0aba6c09108c1c3387cc03484e
+platform/external/abi-dumper 9b76336c02d84eeea19a48108270e3bae4efd025
platform/external/adt-infra 3108f3d59c0f624375be3c44195b904c701e4b99
-platform/external/android-clat 7feee223595b11237cb4727cb4ad966f9cf86744
+platform/external/android-clat e700a73dd03a0c111a8a55ef2f9f22b264663138
platform/external/androidplot c66727ebf001607cee14521c35bc852b55fd9845
platform/external/ant-glob a73228afa9540b9c5518d360c5ae630bb634f975
platform/external/antlr dd5fa6d48b827c5d98b625adbc209f4a05567534
platform/external/apache-commons-math 18f62fca59d387e3c1ccd8f80087d9c9af40bcc8
-platform/external/apache-harmony 9906d7dca422939d7b760ee5b8f1e1fad9ec9ef7
-platform/external/apache-http 5eb0106cc59933dda5039ab88c25a32c86539b06
+platform/external/apache-harmony a0527d8a473efb03b95e3402127974c0523b596e
+platform/external/apache-http a4b31e5eda3df5a0ffe844891edc5bbb33930e98
platform/external/apache-xml 31d7642eb8f37a9166db7f1c9e313ab651bdb8ba
-platform/external/archive-patcher 5a1c799c43d3c17f95cfe173752a231be2049e16
-platform/external/autotest e1da183377fd9cf3797ad989dab7049e97ed440b
-platform/external/avb dc678e8d3c2a13e2be3802739d0e678185577d7b
+platform/external/archive-patcher 66e3a02481a0fcfcaaea296c0ec4daf761d3a07c
+platform/external/autotest 4d726e93005054788af1d7ac357ac38fe046b35e
+platform/external/avb 047ecf7d2361ffcb39a5a4ec0709480f47ed76e2
platform/external/bison 7467d52af437dd3dfea237a6865ab84bf258dee0
platform/external/blktrace d345431f16b8f76f30a58193ff2b26d5853e1109
-platform/external/boringssl 2424d84dd6dbdc0d32a4c80e6810d168f722ce0b
-platform/external/bouncycastle e984dbf63708351e1de1f6613d33befe91ad4dc1
-platform/external/bsdiff b9fa8599064d10afd8c231155500f0b8e934d71f
+platform/external/boringssl e56da3e0a18add8be1571c4ae616492a0258ebea
+platform/external/bouncycastle 6ec33a667cad9a33e8049206a0507fcece28fd9c
+platform/external/brotli 7e4c269545df05725341167068c54b55b7d03370
+platform/external/bsdiff 61a6197566d4230c9a86a61e6c5f605778ab3733
platform/external/bzip2 0600e5668b2b1590c2f908a5c420149c6581122e
platform/external/c-ares 211489aeaed3157c34e46f350afea813960258af
-platform/external/caliper 8e31c1039e730814c316c99fca8d52cc60a85919
-platform/external/cblas d2f0b5ca6c51c31ced87d441962582028f8c0d65
+platform/external/caliper eef51080212521ca9c85eb880dd1d6620846cf92
+platform/external/cblas d7e8ee81279845e0f06103398b48d3f4624497b4
platform/external/chromium-libpac 5bb2c7930cf34cfe7584b76139b5257feec81e6c
-platform/external/chromium-trace 97b70dcd33a598e6b0c17fc341fe7793befa6455
+platform/external/chromium-trace a70bd790dfd509cefb24534d02e3a1b349faf98d
platform/external/chromium-webview 581a777a866d78be6cb4192e46891e418930fc1b
platform/external/clang 2910a18bf8b63ea2a2cc2c6c8be7e7c05faff66b
platform/external/cmockery 9199c7bfafefea32d1884182fa655b6e4578c1c4
platform/external/compiler-rt 8bdaf98eeb4dd0f7b8cae390cd18c097a9eb4e2f
-platform/external/conscrypt 366b7587d9da3e4b2a758404938e70aff878a00c
+platform/external/conscrypt bd086d9c0704b340879f925741567e5a6610b333
platform/external/crcalc 5559610bea3b267abef3273868f2d6b8c01409a5
-platform/external/cros/system_api d86285852c0555c8f63e5d12062f6d36603635fd
-platform/external/curl 841623a5504fc1ada3430c714a52be21bd9a452a
-platform/external/dagger2 d4f3a7089333c6a751bf503a59fef88a1db6df51
-platform/external/deqp 1203cd8416eb7c84ddd73b25ff6b2037f848131b
-platform/external/desugar e3fedeb0008902ff8cbbb1c56a75c2ec9f9971af
-platform/external/dexmaker 4d6bad69afbe9a5e0cab02edca5a69c961fa4de0
+platform/external/cros/system_api 32d297d055471c3bac3a89763e0cf0ef6483bff1
+platform/external/curl f0f7cd5b375b317e7eef65b6573902c04ee80ecc
+platform/external/dagger2 41a53344ccbb242099a57ded9d1337430c1b5f8c
+platform/external/deqp 7bff163e7fd81c9a4ada6eaee79926047c94d441
+platform/external/desugar ee13d6b51a19ff1dccbd9015420e07f544169f8c
+platform/external/dexmaker 9e6367a9399bb671b1b474bf21898d2ca68b6357
platform/external/dhcpcd-6.8.2 df64c96f01b3dd2a823d6aa788653c3bedd1efda
platform/external/dlmalloc 6661f3ca66b55d8f5a57b96fec97efaf8f3897a5
-platform/external/dng_sdk 1ac36bef47fa4a9bf13cc82a024644eefa3fd339
-platform/external/dnsmasq 3293d082ff5208a54963264cc34e3065279c11ca
+platform/external/dng_sdk 4cafaba2321b7b74f81c621aa01112156258adb3
+platform/external/dnsmasq 00d11a4477637375322692d0c5603c60d38c6f1a
platform/external/doclava f381ec7f6fca0618fb01231a758402597b1239e3
platform/external/donuts 005389fb31a67841b5de42f0d25fbfab843e208c
platform/external/drm_gralloc e19443ea00d3b27622590b920819e53da68f7fda
-platform/external/drm_hwcomposer c604f0a549b9a981b42ba2b2c82180017cd36e25
-platform/external/droiddriver e6e060c9dab6d60e9d2890529f98acbfbaf4b14c
-platform/external/dtc 8aa4d201f0b0c56187a5227952e79b61481064e3
-platform/external/e2fsprogs 930bc064484de01c6791b0e2fb7aee33fd1aa0c2
+platform/external/drm_hwcomposer 578059aa61b0a7e0a56e10d849bc978783a473d6
+platform/external/droiddriver 059f2d82efbcc733574b2b90dbf999280c04c4f1
+platform/external/drrickorang 8ea137d1086e621188f70ffac34a6ba8924af2c6
+platform/external/dtc b1d8b2cd5e57a5c97bdd011624c06c40052b821e
+platform/external/e2fsprogs 7975672f634b603c4b4ff614e046c4e18b4561c6
platform/external/easymock 8bc2748f2850c88ab6b86c6ceed1ce65bed5ee16
platform/external/eclipse-basebuilder 076f46888ed346775b8efc564d7694063ef5eea7
platform/external/eclipse-windowbuilder c533332008088ee5f61745b724361fbde5b7e770
-platform/external/eigen 91ebe5d75039bce22610f2d1a5834f465cb4b40a
+platform/external/eigen cfefb1dc11c33fb8a74291cf2b08e3aa49cb879a
platform/external/elfutils 2ed2550b8595fde721dbc6a12091609a598192af
platform/external/emma deb5711b2635ee9d332605e2e00b63b32bed6777
platform/external/esd 943c42b6f8e9afe821744aa4c039f4943ebf29f5
-platform/external/expat 470553711f98a9110beccab5c1648186f827404e
+platform/external/expat 8954a5667c2941642b9f63bec3a0482a8e9eeab3
platform/external/eyes-free 16bd4c7a4d1bfe229068b637614dad7c48dd2ceb
-platform/external/f2fs-tools ff6619b7398485f72269de4f6ca1aa72ef9e7e72
+platform/external/f2fs-tools 85b4766bedbbe8b2dfdc23b401194c9dd3c60dd0
platform/external/fdlibm fcd17254a9e59ceb0420d4a2faf29db6b004c443
platform/external/fec b3e9d18f59759ff5407be13ef8c6d2e2a497305e
-platform/external/fio cf41806599b7d50ed4c91aab3815154b8c64324a
+platform/external/fio 138dfa04ca2e19c0f03b4d0b591ca2d5e3bad3df
platform/external/flac 9654326e6af758bf25e50f15a7e7b9cff6755a78
platform/external/fmtlib 1ce26af6d14810a277a5f62a5619a372b93183cc
platform/external/fonttools fede58680958e96e6e8f61c3cc6282f798452c53
platform/external/freetype 613f720f08f579806a05f0e45927f4f9ff147885
platform/external/fsck_msdos 9d1e7e4558c8b53731ba1d06d33b5516934d1ff7
-platform/external/gemmlowp 4603c7ece4c091348797d3545cccbba84779b9d8
+platform/external/gemmlowp b76ecb153a784e70e07bf7e19bcf3dfd6caec815
platform/external/giflib a6e0183cdd9f69b180b4adbd613e66772d9bc633
platform/external/glide 31e64acd1e65045471124267a06241eff1f55d26
-platform/external/google-benchmark b4950db3d7d9b08bacf2ff0695d2b622704a4bb4
+platform/external/google-benchmark 983f59ce9add3687c81e2ea5f61027c4c9d6a3b9
platform/external/google-breakpad 31bf6fed97629fd3420cda58a97469ec7e5389f0
platform/external/google-fonts/carrois-gothic-sc 0062a10458d4c357f3082d66bcb129d11913aaae
platform/external/google-fonts/coming-soon 2c5cb418c690815545bbb0316eae5fd33b9fc859
platform/external/google-fonts/cutive-mono bce2136662854076023066602526ba299e6556b2
platform/external/google-fonts/dancing-script 7b6623bd54cee3e48ae8a4f477f616366643cc78
platform/external/google-tv-pairing-protocol 84cad11e5d8c3000472e8bb22dc698cf9b3c8612
-platform/external/googletest bff63a6026b1e6c1326ca2cb0183b6eb53dd3358
+platform/external/googletest ff9b10309a390a7d631edc7808e129237972245b
platform/external/gptfdisk 165c596ac3c69ecbc5a424ad9c1f1be6d44d0bb3
-platform/external/guava b6c2a9cbfc282721643e7bae4b6c42808d6ed81c
+platform/external/guava 5000b35f73a42ddb5554aa4c1c5ffea9c999741d
platform/external/guice 411312e790280e72c08e018134d7e3a0e7ebab76
platform/external/hamcrest 0d446c0a6f5ab27bf24d8e046f1d03ce40f09594
-platform/external/harfbuzz_ng 4c37cfd7ee27796854bbd1d3fe74f70e2da857ce
+platform/external/harfbuzz_ng 6dd5ce2e32bc4a474b6ae7f0c3b6059a995ea5a7
platform/external/hyphenation-patterns dedeff64279b77bafff72b6d866efc93e829b4ab
-platform/external/icu c0d7fcce3181eb3ac9016fcd31525fa80eb8670a
-platform/external/ims 01e835687ead2bc237b90f9e60793b1b849327ac
+platform/external/icu dbf1ed8683f38335caccdfb15a0386b77f1c9dde
+platform/external/ims 711f9d55979cfe28b19a502cbe13a4d7e7e674f0
platform/external/iproute2 1b32ccb0313537bd0bebcb6ec3c0398e90aa103a
platform/external/ipsec-tools afbdf60e1d4cafe0f894fe8e8e5bfa49e47c80b2
-platform/external/iptables bb975c0535103771a6b1835c05025bfd3a43d95d
-platform/external/iputils 8abbff8308e629bf0f5f5f1bf48052b4b484d0e7
+platform/external/iptables 9eeff146a05de990eb2199092b5259184e7cab4b
+platform/external/iputils 940e24bb44d68ec7d600ef6d07e458a448d4c6fb
platform/external/iw 6a3e9a164c98577c28c0c9b1b9a0fbe7d7436e47
-platform/external/jacoco b6ba640a0641e967cdeed76d699bbbd13e310b61
-platform/external/jarjar 4eb8acfd3262130108555d30be557cf5a07639f6
+platform/external/jacoco b1b164ac860eddaed3abfb819df73bfcccdaa327
+platform/external/jarjar 7adc960353812730b4fb15a72901056cf3b3c516
platform/external/javasqlite ee41d81872eedc632f42bd231b95bc945690d159
platform/external/javassist f7c4b954072e563b75f6910c25bb689bbf38a3d1
platform/external/jcommander 68545397d8332a61f800ce9617715a22445ed9a9
platform/external/jdiff 62f4ca1f64eaeb0896416949d6120b912ac67d3b
-platform/external/jemalloc be92dfd38fce4a76e623796b423ee8ddd49fd928
+platform/external/jemalloc a6f685beacaa3f8da06cb28f38bb559eac7d4dda
platform/external/jetty 3077b6f9426ccafb6bd5c00a748e1d40af9e1ae5
platform/external/jline 74812032f8d8eddbef387f18c96de9e5c38b8fdb
platform/external/jmdns 0c71647deb7f7835c473fd3dfb45943083e47794
@@ -164,72 +163,72 @@ platform/external/jsoncpp ecd640d0acf7c93c5dbfc37702e4eedbc18aa850
platform/external/jsr305 333c5e0ea34930a10785f53e74dbe997d93ad2d8
platform/external/jsr330 de30ee496a13d0f71d8ddaee1e247c3e8e43e58d
platform/external/junit 2faf8f4ae953dd2e847536c2712bbc563e34949a
-platform/external/junit-params 67e1cb11019cf70266b6c0509b06a17ce0742429
+platform/external/junit-params b03560c32573b9057dc1daaf877501dbb4e16f8d
platform/external/kernel-headers 134f6bdcbfc9aae59db447822413388b49537864
platform/external/kmod 087bd70f9a816bc37d77ef71c0b8f4253e60169e
platform/external/ksoap2 3f3695df2e974811a5759d43f3532dcd9d6be26c
-platform/external/libavc fc442e1b02a3cfbb32414c6af8c63af3503cd1d0
+platform/external/libavc f4a17ae216f420f5d46e8680d4aa9317e6a9a4d8
platform/external/libbackup a645153b0a97663636bacdc5527c0d304fa79657
-platform/external/libbrillo 3f59c6460e4750ced0e18cc50855993260899128
-platform/external/libcap 9c58810fa56b9067e8be10900707ced04fa5c278
+platform/external/libbrillo 9471399027d4a8e0ef5e1a68429b2e9e93a31e96
+platform/external/libcap 64dcb22b223e3aae866d44ff35dc3acc2a9c58e8
platform/external/libcap-ng 835f318b9785a70415980fba96c34ee5c6b7e415
-platform/external/libchrome c9027cbc0526c43c81d754ccd986d6d748ce7b08
-platform/external/libconstrainedcrypto fca75c837bebfbd51927156158de36fc517742f7
-platform/external/libcups a7a53b313f706720a9d814fdd04787df732e6cc9
-platform/external/libcxx 1e705dad853445419ccc8d35d82de263e91de3f3
+platform/external/libchrome f320c0cf71af274e34404746d4303e6a2452e2d6
+platform/external/libconstrainedcrypto e1a8625038e715f0b14fd5466c02f0142673b1ec
+platform/external/libcups 2447373f182dbfeb47fb86c0f5a6ac5773c65ac2
+platform/external/libcxx 0aea6aeca494754446dd1e5fe638fe68da128036
platform/external/libcxxabi c41479a1d7de7fe6e9cfbff9be21382f7b23ace7
platform/external/libdaemon e2f604066d97431c95856c73d7b9ee46b348d37e
platform/external/libdivsufsort 90d90b27c0b82cac20deabac79e97e274856eaf8
-platform/external/libdrm 0da99b8ab0f691ad7ec7f4c5c8a09c5df92486a1
+platform/external/libdrm 791d9b9fd9bd768bc81f5f224fb5fc2904035fa5
platform/external/libedit 67e14dfc833aafa400a3aad8cb329cbaec503445
-platform/external/libese 343ecd6a43de9fe48e0e557d9527c5cd3b816752
+platform/external/libese 5ab3613225e1e73ae9d04b7e1555c124752ccbf8
platform/external/libevent 596447c7ff2881a67e7082c905112584c3e61a17
-platform/external/libexif e1786084cab68abf06232ff9b5945df484092fea
+platform/external/libexif 2431bfa79df74fbb6e30b77ab9f3d89c300d18ae
platform/external/libgdx 5f9bb1dadc7e51a5fdb7171280366f8b3ec86eb8
platform/external/libgsm c06febc81bf00ad5be3216e060f8ef69dab9c14c
-platform/external/libhevc 3f774369418af612f3f70686fdf5b2fb05505e4e
-platform/external/libjpeg-turbo ae5d0ab01e531a19a9b8237f650bfc16ee8efa23
-platform/external/libldac b4f70c5b723ddd3e7b4785e81cb0120d5d8fd861
+platform/external/libhevc 5d3d1a0a65949b09035cc366429f7f85215c2731
+platform/external/libjpeg-turbo b8a887c09706633ac22ad6d13c9464b2ee539e77
+platform/external/libldac 94b3caf1fecd5261e6929469924b1e25aaeca0ff
platform/external/liblzf a88b9629447deabe8697d2f8fd4cc70aa6e1b563
platform/external/libmicrohttpd 1e68f5d827a859ba3b7ab6a70a60247e0b96afa5
platform/external/libmojo 24543f227908c2e949bb9a15b40276f59fcc9a0a
-platform/external/libmpeg2 39449cf74dd18e31e0afc4e76c5ef46590b86cbc
+platform/external/libmpeg2 a0f640e21e42f5905d760ec3df1dc5203d0d209b
platform/external/libmtp 7ed2065db3ab9851f47426f3a35ba7045ce528b2
-platform/external/libnetfilter_conntrack 08a13c1ae6d6bf6014d4219a4a72645ec420ca67
-platform/external/libnfnetlink 789db9e676beb0ce29ca9771303db30f6292b205
+platform/external/libnetfilter_conntrack 436dd293ff5503828a1fa33d725a1db87e4e03ed
+platform/external/libnfnetlink 6cd19f65ff99f6deb836937c38fb9eedc113c101
platform/external/libnl defabfc078080d60369d901d3c7662f05605cb29
platform/external/libogg 6a48629b7c7fc90326b2f959789828007b3cc184
-platform/external/libopus bc4cca95eca2c88cdcb1809e2b14399656498601
-platform/external/libpcap aafa3da3838e0ca0c02617397fe738849690226a
+platform/external/libopus a7703b70699299f078a189e19b6915120cded732
+platform/external/libpcap 50a06a07f1dd408adf7607b76eaf02d0c254fe22
platform/external/libphonenumber 9313c2ce2fb61213e66adcf8ab4893a5d9c48da1
-platform/external/libpng ccb41b2cf94d4049785588591962d90d68e676b3
-platform/external/libunwind adfc0a1a325ab560f74d404fd833e2661bef7a53
-platform/external/libunwind_llvm a756c603bfde97c21afa285b000145c3942142d8
+platform/external/libpng 352e6a8ec05db372ccdfc80cb77de807d23e8432
+platform/external/libunwind 76a0b9f6a9813311ddfd59aaa580339f36a2c510
+platform/external/libunwind_llvm 93d99bf31d081198030380a946f4c29e38159b25
platform/external/libusb b81e632687e2380716ced43d28f7c95987959944
platform/external/libusb-compat 759481ae400d02fe99488dcdcd653b4f8139a39c
platform/external/libutf 853ef375ba2ce430f5b13b556812b2d83ccc82e1
platform/external/libvncserver d099c925eed901cedcb5f1b9079af45a3ca0e6b8
platform/external/libvorbis dee2e0a12822ec62c89c2d7582f1a7d32cd0875b
-platform/external/libvpx 491c00eaae0cb9f5dce98a427f14f79617fdaee7
-platform/external/libvterm 6d78f36633063dad0689ca42be1ad8d0313ebfab
-platform/external/libxml2 81abc1de298aa3656d333840e8af1682de2ea2dc
+platform/external/libvpx 8585b768902331df85f7d1bbbc11bee4715da97a
+platform/external/libvterm f6cc826fe2eb9fc76fdf922d02ad86aecc5f1b18
+platform/external/libxml2 2975f91c5afcdc7c150e2db37430d958817270d0
platform/external/libyuv 7a6bee2e5623dcc471f49a283144fed44dfb3757
-platform/external/linux-kselftest 788076afadce853398c0b6787cf3c34bc73d747d
+platform/external/linux-kselftest c33d1f8c4b98fa6aa24c67d484d31b58c0651933
platform/external/littlemock 105f5b4352a348a3628b081f4906f5dbb8c120f6
platform/external/lld 26c9bb3b51a7ac4bc45f73d532a03cfd9982043a
-platform/external/llvm e0b553c6a8733b0569b9fa228f623da904ff649e
-platform/external/ltp 33449a40407077f490620cafb23dfb3739307170
-platform/external/lz4 171f60943c82aca0f67dcd672166d29f4b3a0359
-platform/external/lzma 46b54e959fbe772aa87e40e3805e4f118e7f1258
+platform/external/llvm 39ca5a2e95704a9df57c0ee33a6b06f625acd7d7
+platform/external/ltp 5eca7e63c48f85c59486da4abd803b7ac9aed4b7
+platform/external/lz4 de7f627c7958b9847e0d9e6e29fcb566e3bb1dde
+platform/external/lzma 39a0299cfdac41a2631cfdb4bbb637ffa66170fd
platform/external/markdown 06a8f8b914d477183f68b84424bce8ff4dae7e84
platform/external/mdnsresponder e8c578035302f59c4e09f7170e18302261bc9e63
-platform/external/mesa3d 586cfa78861e71160d5a3dbeaff09554829a1027
+platform/external/mesa3d e855ba79dee7a2d4df11d72752e1079cd5e58f2e
platform/external/messageformat 9e1e4dddc8aa0cae8279281488f8a6bf4f453192
-platform/external/minijail c4992577c751e9150f01be2c6638943be9a8b585
-platform/external/mksh 693c2ea1e42d69d8df1829ff6c345a40c499e93d
+platform/external/minijail e61fd6681305084ac5bf97a8043882cd6d4370e2
+platform/external/mksh bba8f4a328807772fc16027133a9d63e9185fab5
platform/external/mmc-utils 6de31b2b8a09108f9b91bc12bee2b792f783dc62
platform/external/mockftpserver 777eb7d351810721b2416c4e48fe08e4ce0476f7
-platform/external/mockito 29162737382020f4096449a6f30e220878bfffca
+platform/external/mockito 0211c64d5545015d76acda90d6013df67ec9124a
platform/external/mockwebserver d680f43b995aae01123ee6bc7adb690dafcc47fe
platform/external/modp_b64 68d0b5790fff5243aab59ae8108d7e69506ac4c4
platform/external/mp4parser 88bd0c6cfa7fcfbbebcc15c2c565f714cb36b065
@@ -245,87 +244,91 @@ platform/external/nist-pkits e79665e3657171f55a979ca558ebe3c3dbf108d2
platform/external/nist-sip 8445067c3b53e5bd56c32f1c4fb688083c4f4005
platform/external/noto-fonts 60e126f1c096b20d4a3685e1de1147b6595e9012
platform/external/oauth 49f3624a6d3307b640a012f15b94d04174473501
-platform/external/objenesis a3ef09de71261e043b85a748cc7d73359dd5e6fe
+platform/external/objenesis 30c85e8178b11799cf08ad21339f52eaa787a13e
platform/external/okhttp b53397b37a05fd50529810c726e7214cdc5b191e
platform/external/opencv 6acb1f4a6e68f80b1cb0182f3d334dd8607697b5
platform/external/owasp/sanitizer bbfb25464ff30c5a62dce351d719a8c533afb2a3
platform/external/parameter-framework e210979b2eb1410f80fb88a9a4c235ee0cd23d0c
platform/external/pcre 97f96c13a5b0c22e9827279eb0dd38e9c889f244
platform/external/pdfium e4e9d1b6b387072f9071f896993a9cfe5481ab4c
-platform/external/piex fd058750c2b588ee6944a1f922d5104096201f79
+platform/external/piex ac5a3090cb5b5c2aaa7e1c68c9a68fc4f5a38c26
platform/external/ppp 7e60466a0009f58aa09b60bf6dbb96cacd6cb829
platform/external/proguard af893cdc1242e4cfbeeb10e2323f9a689a825177
-platform/external/protobuf 06884d010cc3abbd97861e696cae2c1736679168
+platform/external/protobuf 7fca48d8ce97f7ba3ab8eea5c472f1ad3711762f
+platform/external/python/cpython2 181a615a16fd15caa50a2e6f729456e2c9d42e42
+platform/external/python/cpython3 9458f8e38d4fe0d58890c5867485dbbf2d538955
+platform/external/r8 730c831ebd6752bbe7c205a84b3f5e721ea2e443
platform/external/regex-re2 79cce43a82abc1bc56c65de07a7df47d54e163a9
platform/external/replicaisland 23e53aa67dc788cd2fe0598eaf7c9f20eb93c392
platform/external/rmi4utils 40eb2d785d3e367c01fc2a3d53820550e7f66739
platform/external/robolectric 797e01c269d344b03f6080d46926c91603465949
platform/external/roboto-fonts 25fa2dde3aacaeacb2797bcffddce96014f4fcc3
-platform/external/rootdev 1fe2b737ad19056bc2bc298b7c30ac93d36a4f6b
+platform/external/rootdev 1dd6771e0f2e7da8736c9b21603817bce0d55ea9
platform/external/safe-iop cd76f998688d145235de78ecd5b340d0eac9239d
-platform/external/scrypt 99611dfb9ac7513ab39f569744439ee6c7568eba
+platform/external/scrypt b7477d8eedb4aaf9ad5af921ea43bfe17103a23a
platform/external/seccomp-tests e602290af558cee366ec98e366e0e8460c39534e
-platform/external/selinux d6ed837a4e4009e153382f1ff2495a13fc24856b
-platform/external/sfntly 9636835bc0ce3752a3fec8199d432035ad1e6290
+platform/external/selinux d72d78d96990b546bbf0b4a64c3b7320a54eabb9
+platform/external/sfntly a217f56dac15a71326445fa7f6a789ec00b22392
platform/external/shflags c4876e01829b8cf110ee33267bb1bad1f8ebb51d
platform/external/skia 740dcbc14f4bb497082890c1c4a85c0a993120a9
-platform/external/sl4a 218c97224d681dae57bdfd2dce60a285d81a4140
+platform/external/sl4a e83595a366433378e398273d5e25eba3817794eb
platform/external/slf4j b4eb5f69f088f53ede0b7ee4a1a3bf2c3ff58418
platform/external/smali 78cf98bb8c439f99f06f7b609c5c533a9d41de68
platform/external/snakeyaml 03d1dd1553534e717fdff5f7bed00b67dbb23431
platform/external/sonic 1163465de6c4b6c1816de74db60b28769cf5ac96
platform/external/sonivox 95ad2973de15846e1f67c5c5c30eae877afb2ca4
-platform/external/speex c704149eb9fd927da7b82520f69a8545e4f7604a
-platform/external/spirv-llvm 4695d7739b29602883cc55f6a4f6ebd69f663903
-platform/external/sqlite 9d680e2287ee399494a07b859bd88cd768776c30
+platform/external/speex a7d909edd14636c8934e1b61cce563ef9d29c477
+platform/external/spirv-llvm 9ebe91915ecc1ca31c074c92e4f11b7625801f18
+platform/external/sqlite 39a32b46137c57b816e71d73438e4fac69b6b9d6
platform/external/squashfs-tools 393e365802711fb6969858f79d80104399d140c0
-platform/external/strace 304752e0d49253a8409118d948d31ef3a7b2bc6b
+platform/external/strace 5168b2b17e16c0ce1e5572080c46cb6ad4a2fecd
platform/external/svox 3279a68c2735ac1e1265ab2ecf5ee9c9afa076b3
platform/external/tagsoup 9c02d9f506855965ec513685788890dfc856a5bc
-platform/external/tcpdump 8da857b73b2968908eab7329fa520a46d21566c0
+platform/external/tcpdump 1aa1e7ffca235f716b36c0a4588f84e23ea1be38
platform/external/testng 8f2e8231852f454b5903cf886be55e9f647cdd76
platform/external/timezonepicker-support 99e91a76fd74bad10266623d67cdb98d011f709e
-platform/external/tinyalsa 03f3f4ab42a8fd290bb2b38e97d2f2f67b0fc9ad
-platform/external/tinycompress 8fbcb03b59600de71b3c4f191e11819217a68851
-platform/external/tinyxml c7cb92cfeeefee847babc537f57ebb87f71332b6
-platform/external/tinyxml2 0f9c4d987d9f3e191ba40eec13f55a4b80815625
+platform/external/tinyalsa 7c703a6b307ae7c3ba69429ed0c71417e507faff
+platform/external/tinycompress 3d60feed720ce0ecf66196ca4846a55b3e6ee3c2
+platform/external/tinyxml ccc219c40a820afd30ad347c0e3d2bdbdf1df109
+platform/external/tinyxml2 cf2bc196dcdac02efb415c4305180986411d73d0
platform/external/toolchain-utils 7091edfaa0ec531905b7d914e9307cd74caf02ea
-platform/external/toybox 77666693a18a788c51b3af94e0f30fe48aff48ee
-platform/external/tpm2 44544398445dd5f5adbe13c5b551eb087781da64
-platform/external/tremolo 25ee83986e9140518904d54d136167d5d9e5db26
+platform/external/toybox 3829236617fca43f854035a0608d16562a947e16
+platform/external/tpm2 00f7bc755f76f483f6a59f917727339e089a9cc4
+platform/external/tremolo 75c45ed3b5a684fb5bd3f09d64cd242adcda0752
platform/external/unicode 680f240bda39c798480bef3bb36c671af1f575c1
platform/external/universal-tween-engine 5a8be7ee6337367a1dcf11bdad865e7917519e46
-platform/external/v8 236342d4b8ef8ee3141f5f846984ff20700b38bb
-platform/external/valgrind c9fc475448cb7d2cd023ed03ff4038dad1ff73e8
-platform/external/vboot_reference e74e24bcad6e56abb60f3e4847478c3ffba12a14
+platform/external/v8 7bde41a362a5746e44e9efc2ae8d1843f39d875e
+platform/external/valgrind 84dd75ab14160e18d95f2f3ea6120c03ce8c429c
+platform/external/vboot_reference 0ad090ffa37b9a1e9a0063a4d4b808c6fe4809e2
platform/external/vixl 2da09a48dc4d5a3c585f897f256c2c6c5fa4eb5a
-platform/external/vogar baf4ec0f47d639129edfea1f544e775200012458
+platform/external/vogar 7fa0640bfb29ae9593f2e07516f4a2925fd0c54a
platform/external/volley 3a1232594eb627e9e59b22406816648a55a3f2ae
platform/external/vulkan-validation-layers 4c40acb97e6df4a5895877f81cde4e9c0704a95f
-platform/external/webp 624569b3ad72e2285ecdec7464389527619ae62f
-platform/external/webrtc 0d85cc3c3cfefb17deac1924412203b38b790aed
+platform/external/webp e99d2e88295130a1874890b3b118969917de5a84
+platform/external/webrtc c07e6f5974151842a7a37a66aa7592761547287e
platform/external/wpa_supplicant_8 14c5ecd85f3fd6a703a8bef710690246c8dd42bb
platform/external/wycheproof 1187a7bf7b612a8c09b70e65ea52351a1c5c731b
platform/external/xmlrpcpp 1d7192fe0d2f788f8f150899c58b86c5ff10456a
platform/external/xmlwriter e95d92246ee35273dde2bee8b00485cc14c12be5
platform/external/xmp_toolkit 42ea4dc6d1fc2206a7778029070ed9213e3b0fbf
-platform/external/zlib 8f227ebc3d47c648eec4c773040ce058bbea8bd4
+platform/external/xz-embedded 03e7a3eae664d9ee1862b5f152310d17ae5c7428
+platform/external/zlib 30595680d975bf98dd62e3c25d16562ab33c3d4d
platform/external/zopfli b36f966df9e7767a6b0aeb00fea29af0c57c89be
platform/external/zxing fedf8f2d8099bf7bb85dc3db8699343d56617deb
-platform/frameworks/av 2cb9b1b621ae744bf05384087b3ae1719968f168
-platform/frameworks/base d308803b82f5317eebafdf3a97baff3bcd460e60
-platform/frameworks/compile/libbcc c29bfc44f2d650b9c1bcfcecc0b6e4537e541944
-platform/frameworks/compile/mclinker 4fefd441bc867e8fdb92e0d696fa73f056bdbc25
-platform/frameworks/compile/slang cccde6e1484fdf840c38cd04a893d2e13460ec0d
+platform/frameworks/av 66688d8836830d742dd52dffabbf6c26bd16ad94
+platform/frameworks/base 01017959fea2ff9bcb5fcf10c63ba23542a52dde
+platform/frameworks/compile/libbcc 5950103a67264d36e0c5c65330604916e462714d
+platform/frameworks/compile/mclinker 829ab4b9b5a97eccc3f7662f8211e608a5db6ec0
+platform/frameworks/compile/slang faee2e4fda8a46c192bd011349c9e80b3ff28096
platform/frameworks/data-binding 15281a01df0a5892d818080f1df669bdb8a319f7
-platform/frameworks/ex 552350d39a06d2a7d3fa3ea0b051c194bd9e88a0
-platform/frameworks/hardware/interfaces 1e562633c164503e2cce456dbc8b5d08f6753839
-platform/frameworks/minikin 84bd31a7020cf137a123731649996116e498a1cd
+platform/frameworks/ex d2ea93572bd276e4b5b9bd86887603a35f9a0f5b
+platform/frameworks/hardware/interfaces b9d30cfae90bd5584a8e7926ec6d938ce323e0fd
+platform/frameworks/minikin ec682a375dc8f39cd7c7dc91d65aec09d0ef4edb
platform/frameworks/ml 3d53a93c79beb608ca52f7e1ffbf2fc7d9c3722f
-platform/frameworks/multidex 49f3d944cf2413562ae5032b8dfc2c39955c6bf7
-platform/frameworks/native 4a9b7174ca37e95e6dd33594ca30c774c8866fa5
+platform/frameworks/multidex 6450225f3eaf865b0838e84c4656f6dd6048d87b
+platform/frameworks/native 2bb661ca09d87de9a47bd06145c42dfe99d51ca7
platform/frameworks/opt/bitmap a0d4e3108663202564a6833b76770075b8e5b767
-platform/frameworks/opt/bluetooth 971623a90fae3dd4e2f5d1d48c8f8ca50068344e
+platform/frameworks/opt/bluetooth 991e0444ed6edb1a77b0feae73c14e2a886cbf0d
platform/frameworks/opt/calendar 886d7d1277b82347c30ec5d79ba1576680947bb8
platform/frameworks/opt/chips 02ced36ad1e062e79397296ebd1dc760870a4e42
platform/frameworks/opt/colorpicker c1d5eb2d31fb6a74ed129722754139c759aedbe8
@@ -333,21 +336,21 @@ platform/frameworks/opt/datetimepicker 5348c906911a9ae65b165023e9e4ce45eee05c02
platform/frameworks/opt/emoji 92eede13edbf22b501edb9aeb92366f91eab9781
platform/frameworks/opt/inputconnectioncommon 3baece9b20fa480da46d860acd7320fd9eee3386
platform/frameworks/opt/inputmethodcommon 990fcb1a6dbb5d1204cc8ec86e4bc3f691f4aeeb
-platform/frameworks/opt/net/ethernet fbba1273031483f336fa6f7127114bbff5b88e77
-platform/frameworks/opt/net/ims b10b61e10955b1ceee6193acbc543e4d62ae0fd6
+platform/frameworks/opt/net/ethernet 264bef96c82961029702fcf8e12b0fddfa0d09ab
+platform/frameworks/opt/net/ims ff0979256d1a67a62c726d6fe15264c496990605
platform/frameworks/opt/net/voip 2e09c0ba8a11ee629a85582413598c60cca09e8e
-platform/frameworks/opt/net/wifi 33d887d7bd60284426008b359e635358352e5342
-platform/frameworks/opt/photoviewer fa19a401cc279cb95b071dbed650fa0285a2fdcb
+platform/frameworks/opt/net/wifi a4a7244fea03df223af726b0e8a4028593bd8e4b
+platform/frameworks/opt/photoviewer c0793686e13dafc2f45b0ad3e079f707938c6534
platform/frameworks/opt/setupwizard 2cce48fde424bd078f024d5ddc7c564ca1161e2f
-platform/frameworks/opt/telephony 5656e3a1c593f0acd287a410817130479fd04281
+platform/frameworks/opt/telephony bfc44f2e2ac6cb8e8ba51e4250a10401714bf198
platform/frameworks/opt/timezonepicker e344fd847c154f2d0680bf1089390326d634d847
platform/frameworks/opt/vcard 15d297d8ac4664e4a491448d9c15158ee51714f9
-platform/frameworks/rs 5cfec00dd293c8e0203c9854fbd7f40be3951b0f
-platform/frameworks/support 7dbbadd44f1d8b14990cf413bace64e1535a2564
-platform/frameworks/webview 23064ee133778d05ef3ffbaf7de4c4962f9b0c65
-platform/frameworks/wilhelm c781d43d8a90c802f4bb157a53c30c6bc73f7c2b
+platform/frameworks/rs 56bb39fe6274b099522cff372dcab9482fc35e60
+platform/frameworks/support 684e045dc0efca4d5a8f0ed4b28036444ff9385f
+platform/frameworks/webview 35975286092f329186f66cf346eb6b0dff3c2e61
+platform/frameworks/wilhelm 7bfc4444b48f1f046d50fc799a3bc64fc8e3c7df
platform/hardware/akm 7889f98849ad3913586904e00d91b32cc0ceb75b
-platform/hardware/broadcom/libbt 50330f8ce5e7edd2b15f9a3415a71db3d83d584d
+platform/hardware/broadcom/libbt 1ed4bedf4af755edc61bccb8f468a0df008dcf1f
platform/hardware/broadcom/wlan 052255ec30cf33e27bb0406cd5b3f9998325d6e4
platform/hardware/google/apf b75c9f3714cfae3dad3d976958e063150781437e
platform/hardware/intel/audio_media 218f0d6bc9532d0b707ea325fd96998249fe47bf
@@ -364,17 +367,17 @@ platform/hardware/intel/img/hwcomposer 8c2ae7ccfd78fb4efaf4c0c61a697f2075584934
platform/hardware/intel/img/psb_headers aed9716b5467e75728f761ac75a4ba5ca3c51ea0
platform/hardware/intel/img/psb_video 7407927b0eda431b7d817cb9d78189f335f509b1
platform/hardware/intel/sensors 68dc9e70b79dacddc4e0bf00af0de7f764b04eed
-platform/hardware/interfaces 8b4c1e458997ed8c8b9bc97e4af4d4c3675c7c80
+platform/hardware/interfaces 1bbe51d0b5bef615692afe6ccc24259c1b2208e4
platform/hardware/invensense 11e5ff75af866f91622b6008fa13db1c3685ae69
-platform/hardware/libhardware 87c3a2576793e5a7bb3669f202eae3440e5121f6
-platform/hardware/libhardware_legacy dd67435bacb5d796c1d5c6f35c32455996549d3a
+platform/hardware/libhardware f12e85e1d3aa640922686d9c4cab992684812535
+platform/hardware/libhardware_legacy 483a68f68a3f7f115f8909d663e93edaf89762f5
platform/hardware/marvell/bt 3f33d194e8300816b94d1d7b68b1d48c8f903251
platform/hardware/qcom/audio ba9bce36176b05695bd042acadc4a254ab911872
platform/hardware/qcom/bootctrl 6007fe6af3f7eb0c6b5fc3cab3c0f0cf5a7b50fe
platform/hardware/qcom/bt 5e2825785169ae647e80ce48ac814abe2ca57532
platform/hardware/qcom/camera 383b6cb93b5952c2a87b3ea5ce2be50f006dd395
platform/hardware/qcom/data/ipacfg-mgr cc379d116231083e1b804fea9b0ef52d9e105ae1
-platform/hardware/qcom/display f7f41ff01430662e40a87f6c5582ce8a68c68d1e
+platform/hardware/qcom/display 42ea1de6807fa5885f18cbd6c5fd96f80395fcea
platform/hardware/qcom/gps 45c0574442a01c2f6a9ccb2044b6f30c7ad288e4
platform/hardware/qcom/keymaster 29565ce1f9219e66b7fb40063d49d14bb84ba606
platform/hardware/qcom/media 63abe022daf627edac121f5c389d7f660db547ac
@@ -385,27 +388,27 @@ platform/hardware/qcom/msm8x26 5c60d76743ed98e7082b7f72927c17a7b86e0218
platform/hardware/qcom/msm8x27 8ff5c0057cbdecfa09410c1710ba043e191a2862
platform/hardware/qcom/msm8x84 582b414269d8472d17eef65d8a8965aa8105042f
platform/hardware/qcom/power 3a098ee1f89c398b9d6e7b5dfae9c694994f8bc4
-platform/hardware/qcom/wlan 35072f35547089ce98d1706fc06940654372b008
-platform/hardware/ril cea643260186fd22e9b803bba9079fe473ac6861
-platform/libcore 356287514869ba0e7211513c4356fac6a2067a83
+platform/hardware/qcom/wlan ec9deb6e65d7c7816083d925255bbaefe16e4778
+platform/hardware/ril d5461a4f08750fbaa1be66d7db9068f6fa064953
+platform/libcore 80164535a8a6cd0cf46a1b9ccb9b0d01aee53874
platform/libnativehelper d0865381b9f1989fc059bb8ae4c31519b56b1b5a
-platform/manifest b5f733a60ce39e789d8c07cac72d12ca0f82f925
+platform/manifest 7720cd3e430281253bdc3024ed63ac411c3ed6cb
platform/packages/apps/BasicSmsReceiver 0aa0611f9c6775575da56a1746fef1cf68267b0e
-platform/packages/apps/Bluetooth abc3d7eb7e5da788123710b0cd8aa13f54ec845f
-platform/packages/apps/Browser2 decae510679c74796b1a9f7b0cacd8504fcc53f7
+platform/packages/apps/Bluetooth 190b58cad1775a199e9698cabf21aca967b0e3f4
+platform/packages/apps/Browser2 ffc5f72f39de7f9bc956ab29d087596d0f55ef70
platform/packages/apps/Calculator e1bda28f1545111ba7734577f23e194bf3db3f5f
platform/packages/apps/Calendar 2bbf7b8414ebcff2207b08224d8913241a766a5a
platform/packages/apps/Camera2 d396acf862f82209cd5d770a3f03fc95d3b7326b
-platform/packages/apps/CarrierConfig 287a4be9ff47fe66bc3244b03c281fbf4ebe8d4a
-platform/packages/apps/CellBroadcastReceiver c6432669e7726a74be25fa2cf807d760505b30b1
+platform/packages/apps/CarrierConfig 46d5820744888866cab227b38eaae21b6f93a39a
+platform/packages/apps/CellBroadcastReceiver c52467b4e38ab74b233ea132b3212a9d17af0785
platform/packages/apps/CertInstaller 7562fee50a9db5afa94786f1d3acb1f0452e3ea7
-platform/packages/apps/Contacts 111f210309ecd7da231787ed9890e906f1726640
-platform/packages/apps/ContactsCommon f231d3863367563adc359cb95a99cb25f37de54c
+platform/packages/apps/Contacts 41e553f6ec13e860694a2790cea82a4300b6703e
+platform/packages/apps/ContactsCommon c59284acd9283f2274fc18fe69ea9d08cf1245d4
platform/packages/apps/DeskClock b89bbe70df270c344123d7ce2bcecf1a84c399f1
platform/packages/apps/DevCamera 85b25ee8ce0c5d19b53963c985869100282b55d1
-platform/packages/apps/Dialer 8937acfca0eff28d16919493ecc1b700a79885d5
-platform/packages/apps/Email 552ef93f45b6f818bb269920c309741c51e62b1e
-platform/packages/apps/EmergencyInfo 087735392728aad8e779592c0614c110259723f2
+platform/packages/apps/Dialer 8e49b42b6fde177fb242da12bb05365ef03362e1
+platform/packages/apps/Email 1239cd59a0f4dfd0a96e1a83b8871bd2b18358c6
+platform/packages/apps/EmergencyInfo b7282555b3b99fc9aa98b6c807662fa096c80e3c
platform/packages/apps/ExactCalculator 7c359e389457d7cb7cd4f696608355beb3fa13f0
platform/packages/apps/Gallery ae5a3067f51cee6cfeec73d56815892bb3f6c4de
platform/packages/apps/Gallery2 5ffe93060777b92f221adbd0ddc67b9479852d80
@@ -415,69 +418,70 @@ platform/packages/apps/Launcher2 44c1afdc7fe9f4420933ad0c9fd824931179ca27
platform/packages/apps/Launcher3 a80a70f2f8c5e32e7b1ec6c78c4f7c3b3500102e
platform/packages/apps/LegacyCamera d166148abab4af9111e325a859f86d58e2a04c0b
platform/packages/apps/ManagedProvisioning 2a68a11b2c9156f9f9747fe0b974d0baca157706
-platform/packages/apps/Messaging efad207abcbee2235ff263beb3f11a34a7490c52
-platform/packages/apps/Music 34ed20bc815a0625199db23f9c78f3a5ebef8b62
+platform/packages/apps/Messaging 7b2c6ed6a50b10b698f0b0251ac3a9b532432d72
+platform/packages/apps/Music 75df705a0f4e7f36050ea68fa8695325f2a691d8
platform/packages/apps/MusicFX 035fa0123d87b48554cbd294ee9681b25eb7049b
-platform/packages/apps/Nfc 5d0528c7ec88bdd06e8d747b39827c8f728e9c8a
+platform/packages/apps/Nfc 7b94e08d3fbdcfe83ec108d581355b6b0b8c5978
platform/packages/apps/OneTimeInitializer 01e429c08e51291315890de9677151a7e0b6ad35
-platform/packages/apps/PackageInstaller c5976c5927142a9f7eeb260a982a45fbcd1c665e
+platform/packages/apps/PackageInstaller 0d467d56ce68a1bc26d721a5c3b9a6caf98aadb4
platform/packages/apps/Phone 79731f02b7009206a01182d2cca15dfc8491da09
platform/packages/apps/PhoneCommon f962ad993640d79dc1d76494650cf6d3e83ee6de
platform/packages/apps/Protips d686dc74168ed5324b2388133531f30255659ae6
platform/packages/apps/Provision 077fc59dd26cdecdfe2ea3af614291b103faa7e2
-platform/packages/apps/QuickSearchBox 9fd59c0b83d97b90fb5bc098155a5a2803a42c5e
+platform/packages/apps/QuickSearchBox b17f4ddf6719faef79535c76ea6af84f5009d4a1
platform/packages/apps/RetailDemo 66244a5c528afb29b1a88aa788770063b91c89b2
platform/packages/apps/SafetyRegulatoryInfo 1e01c3e1bcc0ed83b3676e1d5c0b75d5ed873391
-platform/packages/apps/Settings 79694e79d1368f763d2179239fa8ccf3fd13a507
+platform/packages/apps/Settings 31a2f413f86c9ad2b7150e5b379d408cac5e7645
platform/packages/apps/SoundRecorder 5f67a8eaea9379d7fce53db77e9ed7b47e49f1e1
platform/packages/apps/SpareParts 4db997871e3f4c3f84660815096e5276b47c5c91
platform/packages/apps/SpeechRecorder 51cc8462c082a26810f5d7c5a2648232a77e795c
-platform/packages/apps/Stk 63ff0bf9b394a3fb8896c51ce1f48798de85a5c8
+platform/packages/apps/Stk c06b7815817fe7682c858cbe10494f671dd6bbd3
platform/packages/apps/StorageManager a1c249013e65ec1fc38076cc29830c4367c8cace
-platform/packages/apps/TV 430c2be3b91676005fdd243553e38acff8dfc3de
+platform/packages/apps/TV 7416628255cd3c95b6ffecd331fbb0add9c1eea9
platform/packages/apps/Tag 60102ca02f1a93af59cc479f2a80a40a382d668c
-platform/packages/apps/Terminal 2c4b6548ff31f403fb0af8be422331398aff3f13
-platform/packages/apps/Test/connectivity f96115d1b531aaec264bd755fe142b910dfe08a1
-platform/packages/apps/TvSettings 731ad9852f5b7c897f419a5eceeb33fa9edd55fd
-platform/packages/apps/UnifiedEmail 5c504aac78c847e4c4dd9521c3bd68153eebf953
+platform/packages/apps/Terminal e71d9d40b5b66d646f80081abea9893d3e0fdf59
+platform/packages/apps/Test/connectivity 0fba4364b09c47766046e5afb12fd3304273323f
+platform/packages/apps/TimeZoneData deff21e248e6cfe557b71dd28794eb8c8794145c
+platform/packages/apps/TvSettings 9648d6bc0a106576927264ab580e1a326fba920a
+platform/packages/apps/UnifiedEmail a3efe60e6b9e0045eef5f88491bc966868357300
platform/packages/apps/WallpaperPicker 969934f908ff2ddda77bddbb80f206daf6a24281
platform/packages/experimental e24ee92653e28ddf0020ffb9e5ddc99931117674
-platform/packages/inputmethods/LatinIME f58518ea9c716e1e3d904d50871051ec434290c2
+platform/packages/inputmethods/LatinIME bde4c9a8dfa85ca71f034c371908358bf61a74f2
platform/packages/inputmethods/OpenWnn 59aefa242169b7a51c2381daee58ff22fd1834ce
platform/packages/providers/ApplicationsProvider 33d26f5eedb3d3011762ce5b2de66e931bf64b35
platform/packages/providers/BlockedNumberProvider 3aef9aef553a126b57fa9d7c271bf82abdb8ca9f
-platform/packages/providers/BookmarkProvider 6ec4bb392332b12162c5a8a1eaba1ee34d389c5c
-platform/packages/providers/CalendarProvider 9ad7d0d4ae34663d7e25df58cc1290dec9472851
-platform/packages/providers/CallLogProvider 7e5ac8b750d8230a9b0e723f5ee8cbbd941c19a0
-platform/packages/providers/ContactsProvider f378cd950b4ba216377d294e4bb2c9d841dd2ad6
-platform/packages/providers/DownloadProvider a4f49c59dc16ce9ed42ba4c35436dc31c9af0c45
-platform/packages/providers/MediaProvider a01878b2d9cfd6f953948a94b9d5efab4f9e5494
-platform/packages/providers/PartnerBookmarksProvider 5dffc10ad0c9be63e7499378a82db55165e6f046
-platform/packages/providers/TelephonyProvider 8af31df84b8743a99cde7885cb664a78829517e0
+platform/packages/providers/BookmarkProvider 3fa85d57a81d2cdfd08465d3dcb5e7ad4ad1f7ca
+platform/packages/providers/CalendarProvider 8da754fcd166e11363e4d031b0c42f2abe92238d
+platform/packages/providers/CallLogProvider 8d79e5e0f0673f20aff55fdb6ccb297bdc509387
+platform/packages/providers/ContactsProvider 44c11b854e615a007eda9760f9c9d0323c9c73ba
+platform/packages/providers/DownloadProvider ef033b3587853368d947c4d849eb5d6818cc612a
+platform/packages/providers/MediaProvider 654f73a379a36e5f4cdb2fc4cdfbc06971bff212
+platform/packages/providers/PartnerBookmarksProvider 133b4fb575d32b7e2e887e2d1d6a9e6877b54440
+platform/packages/providers/TelephonyProvider 22a5cfb7b166ad972c73d171a078a0932587bd44
platform/packages/providers/TvProvider 374df0a9f8c1b92b1bdb7572f30543188c8c7a1c
platform/packages/providers/UserDictionaryProvider 12907529afb603d10bc133e808728cef12e5dad6
platform/packages/screensavers/Basic e72ef139782ca896dced7524abe7cfcc9ed35db1
-platform/packages/screensavers/PhotoTable df86273b7942fdad55a12b62b932e42825fcd699
+platform/packages/screensavers/PhotoTable a9c5d50340fcef49034add6766576e4aab7d1168
platform/packages/screensavers/WebView 6e0a80f6faed6191acc8ce1b6c79eada09e9e042
-platform/packages/services/BuiltInPrintService 086d839a5569f261fe83473ebfed37cc8ab1b433
+platform/packages/services/BuiltInPrintService 5bd17d4644dccb6cd5e23c95490ea925082d42d3
platform/packages/services/Car f9cfa43094ac3111c92283a0ce9db8e377ac47ab
-platform/packages/services/Mms 96388dd7a3717ae1ee539c8b057089ffb163e0c6
-platform/packages/services/NetworkRecommendation 98734c16a4873df7cd6214ae5b7faca1fd6f4201
-platform/packages/services/Telecomm a84782331e231844ccfb610b5136057cc77bab2b
-platform/packages/services/Telephony eaf215348492d935e93516a4eed3fafde93ade9d
+platform/packages/services/Mms dfa0e3116b3ba72b9c2f308d8d11bc6ced6ad23b
+platform/packages/services/NetworkRecommendation 87a0ebe5a071130fbb5d5117806964f4e8bc1a77
+platform/packages/services/Telecomm d733a73a8d8362f24b8aa7a4073b74736203069e
+platform/packages/services/Telephony 2252c12ed94ca831fdec7507be447e976ac3dcfc
platform/packages/wallpapers/LivePicker 313c31a2d7ff12d4f78d11458d8b268a5fe97d9c
platform/pdk 708589163e790eb3a7fec09f4832a0f78999bdf3
-platform/platform_testing f59383c56ad8ec4ef0994233777d1c2a02df7d14
-platform/prebuilts/abi-dumps/ndk 667013f5822a0c450634437973b88f795dc838be
+platform/platform_testing f831a34488fa3e6806bee32d7a85820a5645a428
+platform/prebuilts/abi-dumps/ndk f36d67e0b8fa645428c4ebf6f05c2974bc8337d9
platform/prebuilts/abi-dumps/vndk 83a0ec4746ab945004a9e71f2253d5fed8a4cc75
-platform/prebuilts/android-emulator 89fbf2893b590cf224ebe2db9ab7e363c64fd477
-platform/prebuilts/build-tools eb2e878dfa5c5cb6d6fed87c1490cfea2c1edb4f
-platform/prebuilts/checkstyle a4b8a4a6bb3686daa8577bfee4e0ca6c79914d7d
-platform/prebuilts/clang/host/darwin-x86 0a26535dda9e4c13557c5193b287f24aec64a88f
-platform/prebuilts/clang/host/linux-x86 768cef363941c8c0a6b1e093bce5dc8b20e03119
-platform/prebuilts/deqp f7de25b286240d6d85efe62c84e460cdeed6aab0
-platform/prebuilts/devtools d054448a1147fc5294089b6ac7aa3abe92202761
-platform/prebuilts/eclipse cf9f78f8cf41b16edf9f712598a42743d5cea4af
+platform/prebuilts/android-emulator 3a47dbd8cf86afe7f72d48902a342a7894d9570a
+platform/prebuilts/build-tools c4b15d0ba0631024d0385a8535779bbb59accc0c
+platform/prebuilts/checkstyle 5bebe70905a43b398bdb04a678bf6d50a2c4452e
+platform/prebuilts/clang/host/darwin-x86 97aa4a3b378ec49271f264cc41b79be3cf04d06e
+platform/prebuilts/clang/host/linux-x86 a6c3f54122f4beb5a1b08d5ecc8af1b35b419ed8
+platform/prebuilts/deqp fb36c717664a98b82eecec4122431769c33489d3
+platform/prebuilts/devtools 0c7d72c96f0e9c2b7cd8d4f33875f6424ab937e6
+platform/prebuilts/eclipse 7985a1e57e906ce50505fe37769773983cb2eb40
platform/prebuilts/eclipse-build-deps ceb739d6a7c10f5fb5a6cf6e1f702453b1361ad3
platform/prebuilts/gcc/darwin-x86/aarch64/aarch64-linux-android-4.9 03e2ae15852449ae81ddaa54c35739af27180581
platform/prebuilts/gcc/darwin-x86/arm/arm-linux-androideabi-4.9 d8c414fc49e933c074f173e6d87795cc7fdcfedc
@@ -486,73 +490,77 @@ platform/prebuilts/gcc/darwin-x86/mips/mips64el-linux-android-4.9 c3b7a175640fc5
platform/prebuilts/gcc/darwin-x86/x86/x86_64-linux-android-4.9 e8a2f21c1cc7f87069da71bc2f1901acc4ea2bdf
platform/prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9 ce9d77505072450d2f16a4bf06673f31d8d67ff0
platform/prebuilts/gcc/linux-x86/arm/arm-linux-androideabi-4.9 ea9c88beb9ffbb1a0833cc3ee94b53950729473d
-platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8 e9534abf9e4916bc9f0f0c74b64ad2f404a34e97
+platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.11-4.8 ed4f6b503e1d7f2bc03d87b90084e12e33f8be4f
platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.15-4.8 73ca99196723f810dad42390d154654354f57c16
platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8 d3566f4f19b660d98ff237825ed775289c102420
platform/prebuilts/gcc/linux-x86/mips/mips64el-linux-android-4.9 a332df8dadd78866c2a57f2c7348d499952939c2
platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9 1944f44167a907969de5138fe4cc442432b7cc37
platform/prebuilts/gdb/darwin-x86 4a696dd19df2fee0ce24f5bdbd8ae0e03049f97b
platform/prebuilts/gdb/linux-x86 172e21a7c836e6086c6faae7b080a38c779597ac
-platform/prebuilts/go/darwin-x86 f4569973e0735be0aa375d094d6995223b643885
-platform/prebuilts/go/linux-x86 2519fc4d3dfdd95b72eb5b8d1c46dce107f6482e
+platform/prebuilts/go/darwin-x86 3a0d506bad18e41d9cbffd196c24d70d0c40d0ab
+platform/prebuilts/go/linux-x86 3377874f67bcc7d200408ceb8b02169c4c3b201d
platform/prebuilts/gradle-plugin ba09d77a59458527e92a4ee12bfdf0d7ac4ae6e2
platform/prebuilts/libs/libedit d32685dba4011664b590b94ad156bc734c2c9bb5
platform/prebuilts/maven_repo/android e1ca35066d5b3ef63b188a3ffe8cb058feb9b83e
-platform/prebuilts/misc 4791babb94c4f6528706ad6bde74522e7c28973d
-platform/prebuilts/ndk 983ca04ca92f67e9ae871e3224d21399ce2f3936
+platform/prebuilts/misc 3e120da701eb2dd7da9c986cbb11ff850805c252
+platform/prebuilts/ndk 2b88f8ee10044fe4b77a35c9587759d992561af2
platform/prebuilts/python/darwin-x86/2.7.5 0c5958b1636c47ed7c284f859c8e805fd06a0e63
-platform/prebuilts/python/linux-x86/2.7.5 3229c5a24529bad2a85691f17d9e75a300af5085
-platform/prebuilts/qemu-kernel f34d9da39f5b53d294a524d1de1e88759e21ca50
-platform/prebuilts/sdk 6f6b5641b531f18c8e8d314b4b0560370ffbf1ab
-platform/prebuilts/tools 817901bac6e6f7690151d2b30ced91973637a488
-platform/sdk 1da8730be2203d266be81f9a6e0446f9f8da4717
-platform/system/bt 36d19de1aa2f2dcdbfe609fa8d1e542a3e7547fc
+platform/prebuilts/python/linux-x86/2.7.5 7bd52e8c08951d11ae4437e407c62566a1c3416d
+platform/prebuilts/qemu-kernel 895ce3d698d930484c18f97237699a4f5d2d6929
+platform/prebuilts/sdk d36c987371321aa7ae38703810b4ea14945533e1
+platform/prebuilts/tools 3aca8cce121d427bc5cba6c355bfbfcd453a9395
+platform/sdk 7fcb50b6f76f57eaf5fecbb6b5a0cafcfdf95500
+platform/system/bt a484a888196ddf8bcbf1ad3226d6451bc735a94b
platform/system/ca-certificates e312bd5044fc07e85b8b0c21b8f21a9329ce9636
-platform/system/connectivity/wificond e2cfd0257ca330bea72b56387dc7197363be7b32
-platform/system/connectivity/wifilogd 0568dbda87117efcb2a739ff49cdd1de3ed7f886
-platform/system/core 1445c4b9321b288710ca9cbe0b14473dcb4ab8db
-platform/system/extras f942f9570e526d6853fe0ab1af9b78dd196ea585
-platform/system/gatekeeper 7f5c6593f298ebbef9d2a669118968ea3873aa9d
-platform/system/hardware/interfaces 59b579e0a34db1d21619c0b103d4883d532b7dbe
-platform/system/hwservicemanager ec783ee0cabd3b2127dae90190e6f84a75791ff9
-platform/system/keymaster d998c15d29d82cef353d9aab9e27464394bf592e
-platform/system/libfmq adb2e692869241a3d86277ecda0bd58d5ff7ca58
-platform/system/libhidl ac3dc8fd946cd01482a579ea6bf6ecbf05d6fd3d
-platform/system/libhwbinder 0339e89a6aa6a070f23c61c8048a52ed668393cb
-platform/system/libufdt af1303611fdc1f961dd221e3c267ec572fa8a779
-platform/system/libvintf c5a7427ca3ec1dbecb8d852ed2d06ed2996616cd
-platform/system/media b899f5d93cc0e9f4f702c6bc4f1084847122dd9e
-platform/system/netd eac77a70fc96ae7d11a9adc4ad7c275830f66c61
-platform/system/nfc 8915fdb70fb1ddb04bf9213b75d2e3f50d4da95b
-platform/system/nvram f5f0086758d7914ae5d9d2042d77f9289699eb16
-platform/system/security a3097ff9327ce7ac2cad3d5250d90170676c44b9
-platform/system/sepolicy bf030965f9545b381fdec32eae553c09ad7ca480
-platform/system/tools/aidl d7f900170dac3d3df60f6f7cbac14bcd4173b139
-platform/system/tools/hidl 31c55de03e64126ebf2a336da5534c9ec18cbf5e
+platform/system/connectivity/wificond 483bd8dcfd508095113cfde82e8b79ce6e29759f
+platform/system/connectivity/wifilogd 796315a7e25212d6dc3a998405e25bc877d57cc8
+platform/system/core 51b4f48280bed76bdc8c1758ff6c77435989a33e
+platform/system/extras 3cd4b5a765e824f0eb2441a51cd97d4a90f17127
+platform/system/gatekeeper c530d631aa9db4522f8b3e6879cf2280a1a1c903
+platform/system/hardware/interfaces 13e5d8a98e919e5638f681f38550eddcaf890937
+platform/system/hwservicemanager dcb3db439c1535a52c796a489e8a6087039e5a46
+platform/system/keymaster 2a28077463ccde87fa0662eca097b1f58013c147
+platform/system/libfmq fbfa0c6d654118ee34239b4d1b2d08a245353d70
+platform/system/libhidl aea9f83e6d95a15de668716c627093b17c6bc229
+platform/system/libhwbinder f234318905c87c80eaeb1546bafe9d8de55cf56f
+platform/system/libufdt ea5d3f72aa01de436f8e1e5bcdd7748d255285ad
+platform/system/libvintf bbfff3032efa6fccd6a4d975980ef8922f2c81d7
+platform/system/media 10be5075f268a54a048351b30e3ee38d0a7891ea
+platform/system/netd 54c4105adbf78a29d67a13786f0ab43203412059
+platform/system/nfc bdb53f8487bf83e36666f5cbe247d7156a057bfa
+platform/system/nvram 48087181f977c4f75c81705361f455f5ee9c7c37
+platform/system/security 975e1aae69f9bcdb35de5b2b8f466514f5fe4ba2
+platform/system/sepolicy 2be9799bcc21863de48925b1eff55185be168696
+platform/system/timezone baea6adb933c21584c42201a2ad56090c107a7af
+platform/system/tools/aidl babca26b0faa5e41ced0b39cb135fb181a81fa1a
+platform/system/tools/hidl 82472108de10bd61c968b1230a2162245ddc402b
platform/system/tpm dd2735f149fe58555efa004e330a49ee71954d3f
-platform/system/update_engine 04c2305d79b65a3013e3d5b329f1fcc128874479
-platform/system/vold fed8ab1d7641a0c410bda6b2dd3fad64edd85f40
-platform/test/vts 63aa85ce75b282a442f6af9e2623530b2f9aedee
-platform/test/vts-testcase/fuzz 069ac2f192121b9130e1a4b56a101f6e78455ec6
-platform/test/vts-testcase/hal 0e4b80e49aa9d6283e7204dac9212b896fd37e99
-platform/test/vts-testcase/hal-trace 6947f8a084bf9dc6304efb638aaa5737e82989c1
-platform/test/vts-testcase/kernel 62ba737263613bea67b5b4eb4d37ba9f42a22970
-platform/test/vts-testcase/performance c2cf5485abb578c87db3f182579427d79be4876c
-platform/test/vts-testcase/security c3c5b203c95556b2c85f3e51a0280767c6c04e40
-platform/test/vts-testcase/vndk 5aa93da814b797a29398ddb270ae9c2a4c040995
+platform/system/update_engine c4ad1ebc33abc088aca2909ba5cbaf7ae5e5659f
+platform/system/vold 4ad7784b07c476800dcbad1e9a749e02812b2d9e
+platform/test/vti/dashboard cbf2102897fad9fcfe75ae79821e28ba8d281d44
+platform/test/vti/fuzz_test_serving 30d457ce6613d587901379844b9d0dfb37a67a7b
+platform/test/vti/test_serving 0a064803e1ebbfd5e587e9baf677d458a4e3bbd8
+platform/test/vts f12a96ae4990ec7ff9a4ed190a926f274e1bb3b4
+platform/test/vts-testcase/fuzz 6af0bde5881d2ab0366bf9479f151e5f3bbc32b6
+platform/test/vts-testcase/hal fd2ea73d96cd77786a48a257d013f80cc9e31af8
+platform/test/vts-testcase/hal-trace a0a4488258c74bb0c61a71b3c4c4aacfd4ed210d
+platform/test/vts-testcase/kernel 2dbc05a69a87109b04ba9462bf39d2209202d0b0
+platform/test/vts-testcase/performance 04538ffdca38754da367d51ed825999727654654
+platform/test/vts-testcase/security 3c8938ec3c75b4b6a4649a22d3478822ac2dedd7
+platform/test/vts-testcase/vndk b2b66733c0b5717736d96945e02ee2926583cc5b
platform/tools/adt/idea d3106c42c5466362da9bfb9f7453e5d60af83579
-platform/tools/apksig 3222d6c8a40307c4912ab80d666dcb6846840dea
+platform/tools/apksig 2ded5eb392c26eb13b96bfcec7e3517bb06eb94c
platform/tools/base 908b391a9c006af569dfaff08b37f8fdd6c4da89
platform/tools/build 69c4b95102b4b9862bfba68b3eaf5b7537a705ee
-platform/tools/external/fat32lib 3880776e41ff7def06e351720f2d162f88b58a03
-platform/tools/external/gradle 9def4e521826e3f3ed6cd7c4048cc5f293e63a88
+platform/tools/external/fat32lib 70067d87eb7b1cf6eb84a5c3d476225898177eba
+platform/tools/external/gradle bd3466bb3119802994f2d149bab648af567335a2
platform/tools/idea 9b5d02ac8c92b1e71523cc15cb3d168d57fbd898
-platform/tools/loganalysis a49409b51f0bafe428c4d1bf73e36ee67d5234ab
+platform/tools/loganalysis 53720799c7f266384c3d2cb032082a94f0730cae
platform/tools/motodev 69989786cefbde82527960a1e100ec9afba46a98
platform/tools/repohooks 4c4e78c4d9b52a1a5c5ed11c39ab36d258037a2c
platform/tools/studio/cloud 58f06e77e051fff3903adabca7acdaa9dd12ec2d
platform/tools/swt 8996e71047a2bd11efee46ef14e02435ab5fa07a
-platform/tools/test/connectivity f43366e288f03e501a45cd96a9fcf972d75f16b1
-platform/tools/tradefederation 5886802f8050ecf0073dce1b8c2412dd331d250d
-platform/tools/tradefederation/contrib 0b0e7d254039081f40461b4d8a4ddb0910c3be59
-toolchain/binutils c80811581709b9346364e3229b888f9ad830cdf5
+platform/tools/test/connectivity 0cb4ea62fddd022bd1c3b6413f2869045863c267
+platform/tools/tradefederation 7100660d5379dc3fd8124daa3bdeb4c92d041b35
+platform/tools/tradefederation/contrib 520eaa2ec95619705f8574c1b7e47e4fea28b654
+toolchain/binutils 1661a29f471199a57719ff27eed5af7d7714376e
diff --git a/report.py b/report.py
index 5ed633b..87a7c97 100644
--- a/report.py
+++ b/report.py
@@ -28,9 +28,16 @@ import os.path
import re
import subprocess
import sys
-from tkFont import *
-from Tkinter import *
-from ttk import *
+
+try:
+ from tkinter import *
+ from tkinter.font import Font
+ from tkinter.ttk import *
+except ImportError:
+ from Tkinter import *
+ from tkFont import Font
+ from ttk import *
+
from utils import *
PAD_X = 3
@@ -188,7 +195,7 @@ class ReportWindow(object):
frame = Frame(master)
frame.pack(fill=BOTH, expand=1)
- font = Font(family='courier', size=10)
+ font = Font(family='courier', size=12)
# Report Context
for line in report_context:
@@ -279,7 +286,7 @@ def display_report_file(report_file):
def call_simpleperf_report(args, report_file):
output_fh = open(report_file, 'w')
simpleperf_path = get_host_binary_path('simpleperf')
- args = [simpleperf_path, 'report'] + args
+ args = [simpleperf_path, 'report', '--full-callgraph'] + args
subprocess.check_call(args, stdout=output_fh)
output_fh.close()
diff --git a/simpleperf_report_lib.py b/simpleperf_report_lib.py
index de90466..c540059 100644
--- a/simpleperf_report_lib.py
+++ b/simpleperf_report_lib.py
@@ -37,17 +37,11 @@ def _is_null(p):
def _char_pt(str):
- if sys.version_info < (3, 0):
- return str
- # In python 3, str are wide strings whereas the C api expects 8 bit strings, hence we have to convert
- # For now using utf-8 as the encoding.
- return str.encode('utf-8')
+ return str_to_bytes(str)
def _char_pt_to_str(char_pt):
- if sys.version_info < (3, 0):
- return char_pt
- return char_pt.decode('utf-8')
+ return bytes_to_str(char_pt)
class SampleStruct(ct.Structure):
diff --git a/utils.py b/utils.py
index d5515ba..a0b3b3b 100644
--- a/utils.py
+++ b/utils.py
@@ -31,6 +31,9 @@ def get_script_dir():
def is_windows():
return sys.platform == 'win32' or sys.platform == 'cygwin'
+def is_python3():
+ return sys.version_info >= (3, 0)
+
def log_debug(msg):
logging.debug(msg)
@@ -47,6 +50,17 @@ def log_warning(msg):
def log_fatal(msg):
raise Exception(msg)
+def str_to_bytes(str):
+ if not is_python3():
+ return str
+ # In python 3, str are wide strings whereas the C api expects 8 bit strings, hence we have to convert
+ # For now using utf-8 as the encoding.
+ return str.encode('utf-8')
+
+def bytes_to_str(bytes):
+ if not is_python3():
+ return bytes
+ return bytes.decode('utf-8')
def get_target_binary_path(arch, binary_name):
if arch == 'aarch64':
@@ -90,24 +104,30 @@ class AdbHelper(object):
return self.run_and_return_output(adb_args)[0]
- def run_and_return_output(self, adb_args):
+ def run_and_return_output(self, adb_args, stdout_file=None):
adb_args = [self.adb_path] + adb_args
log_debug('run adb cmd: %s' % adb_args)
- subproc = subprocess.Popen(adb_args, stdout=subprocess.PIPE)
- (stdoutdata, _) = subproc.communicate()
- result = (subproc.returncode == 0)
+ if stdout_file:
+ with open(stdout_file, 'wb') as stdout_fh:
+ returncode = subprocess.call(adb_args, stdout=stdout_fh)
+ stdoutdata = ''
+ else:
+ subproc = subprocess.Popen(adb_args, stdout=subprocess.PIPE)
+ (stdoutdata, _) = subproc.communicate()
+ returncode = subproc.returncode
+ result = (returncode == 0)
if stdoutdata:
+ stdoutdata = bytes_to_str(stdoutdata)
log_debug(stdoutdata)
log_debug('run adb cmd: %s [result %s]' % (adb_args, result))
return (result, stdoutdata)
-
def check_run(self, adb_args):
self.check_run_and_return_output(adb_args)
- def check_run_and_return_output(self, adb_args):
- result, stdoutdata = self.run_and_return_output(adb_args)
+ def check_run_and_return_output(self, adb_args, stdout_file=None):
+ result, stdoutdata = self.run_and_return_output(adb_args, stdout_file)
if not result:
log_fatal('run "adb %s" failed' % adb_args)
return stdoutdata
@@ -143,7 +163,12 @@ def load_config(config_file):
if not os.path.exists(config_file):
log_fatal("can't find config_file: %s" % config_file)
config = {}
- execfile(config_file, config)
+ if is_python3():
+ with open(config_file, 'r') as fh:
+ source = fh.read()
+ exec(source, config)
+ else:
+ execfile(config_file, config)
return config