Update NDK prebuilts to build 3984832.

Taken from branch aosp-master.

Update update.py to copy libwinpthread-1.dll.

Bug: http://b/37788631
Test: none.

Change-Id: I73ddcea57e64a91b431a5f28528ed26d09d37cbf
diff --git a/README.md b/README.md
index 5700c8a..b6dc9d7 100644
--- a/README.md
+++ b/README.md
@@ -1,17 +1,112 @@
-# Simpleperf Introduction
-## What is simpleperf
-Simpleperf is a native profiling tool for Android. Its command-line interface
-supports broadly the same options as the linux-tools perf, but also supports
-various Android-specific improvements.
+# Simpleperf
 
-Simpleperf is part of the Android Open Source Project. The source code is at
-https://android.googlesource.com/platform/system/extras/+/master/simpleperf/.
-The latest document is at
-https://android.googlesource.com/platform/system/extras/+show/master/simpleperf/README.md.
-Bugs and feature requests can be submitted at
-http://github.com/android-ndk/ndk/issues.
+Simpleperf is a native profiling tool for Android. It can be used to profile
+both Android applications and native processes running on Android. It can
+profile both Java and C++ code on Android. It can be used on Android L
+and above.
 
-## How simpleperf works
+Simpleperf is part of the Android Open Source Project. The source code is [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/).
+The latest document is [here](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/README.md).
+Bugs and feature requests can be submitted at http://github.com/android-ndk/ndk/issues.
+
+
+## Table of Contents
+
+- [Simpleperf introduction](#simpleperf-introduction)
+    - [Why simpleperf](#why-simpleperf)
+    - [Tools in simpleperf](#tools-in-simpleperf)
+    - [Simpleperf's profiling principle](#simpleperfs-profiling-principle)
+    - [Main simpleperf commands](#main-simpleperf-commands)
+        - [Simpleperf list](#simpleperf-list)
+        - [Simpleperf stat](#simpleperf-stat)
+        - [Simpleperf record](#simpleperf-record)
+        - [Simpleperf report](#simpleperf-report)
+- [Android application profiling](#android-application-profiling)
+    - [Prepare an Android application](#prepare-an-android-application)
+    - [Record and report profiling data (using command-lines)](#record-and-report-profiling-data-using-commandlines)
+    - [Record and report profiling data (using python scripts)](#record-and-report-profiling-data-using-python-scripts)
+    - [Record and report call graph](#record-and-report-call-graph)
+    - [Visualize profiling data](#visualize-profiling-data)
+    - [Annotate source code](#annotate-source-code)
+
+
+## Simpleperf introduction
+
+### Why simpleperf
+
+Simpleperf works similar to linux-tools-perf, but it has some specific features for
+Android profiling:
+
+1. Aware of Android environment
+
+    a. It can profile embedded shared libraries in apk.
+
+    b. It reads symbols and debug information from .gnu_debugdata section.
+
+    c. It gives suggestions when errors occur.
+
+    d. When recording with -g option, unwind the stack before writting to file to
+    save storage space.
+
+    e. It supports adding additional information (like symbols) in perf.data, to
+    support recording on device and reporting on host.
+
+2. Using python scripts for profiling tasks
+
+3. Easy to release
+
+    a. Simpleperf executables on device are built as static binaries. They can be
+    pushed on any Android device and run.
+
+    b. Simpleperf executables on host are built as static binaries, and support
+    different hosts: mac, linux and windows.
+
+
+### Tools in simpleperf
+
+Simpleperf is periodically released with Android ndk, located at `simpleperf/`.
+The latest release can be found [here](https://android.googlesource.com/platform/prebuilts/simpleperf/).
+Simpleperf tools contain executables, shared libraries and python scripts.
+
+**Simpleperf executables running on Android device**
+Simpleperf executables running on Android device are located at `bin/android/`.
+Each architecture has one executable, like `bin/android/arm64/simpleperf`. It
+can record and report profiling data. It provides a command-line interface
+broadly the same as the linux-tools perf, and also supports some additional
+features for Android-specific profiling.
+
+**Simpleperf executables running on hosts**
+Simpleperf executables running on hosts are located at `bin/darwin`, `bin/linux`
+and `bin/windows`. Each host and architecture has one executable, like
+`bin/linux/x86_64/simpleperf`. It provides a command-line interface for
+reporting profiling data on hosts.
+
+**Simpleperf report shared libraries used on host**
+Simpleperf report shared libraries used on host are located at `bin/darwin`,
+`bin/linux` and `bin/windows`. Each host and architecture has one library, like
+`bin/linux/x86_64/libsimpleperf_report.so`. It is a library for parsing
+profiling data.
+
+**Python scripts**
+Python scripts are written to help different profiling tasks.
+
+`annotate.py` is used to annotate source files based on profiling data.
+
+`app_profiler.py` is used to profile Android applications.
+
+`binary_cache_builder.py` is used to pull libraries from Android devices.
+
+`pprof_proto_generator.py` is used to convert profiling data to format used by pprof.
+
+`report.py` is used to provide a GUI interface to report profiling result.
+
+`report_sample.py` is used to generate flamegraph.
+
+`simpleperf_report_lib.py` provides a python interface for parsing profiling data.
+
+
+### Simpleperf's profiling principle
+
 Modern CPUs have a hardware component called the performance monitoring unit
 (PMU). The PMU has several hardware counters, counting events like how many cpu
 cycles have happened, how many instructions have executed, or how many cache
@@ -45,8 +140,10 @@
 The report command reads a "perf.data" file and any shared libraries used by
 the profiled processes, and outputs a report showing where the time was spent.
 
-## Main simpleperf commands
-Simpleperf supports several subcommands, including list, stat, record, report.
+
+### Main simpleperf commands
+
+Simpleperf supports several subcommands, including list, stat, record and report.
 Each subcommand supports different options. This section only covers the most
 important subcommands and options. To see all subcommands and options,
 use --help.
@@ -57,7 +154,9 @@
     # Print help message for record subcommand.
     $simpleperf record --help
 
-### simpleperf list
+
+#### Simpleperf list
+
 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.
@@ -75,7 +174,9 @@
       task-clock
       ...
 
-### simpleperf stat
+
+#### Simpleperf stat
+
 simpleperf stat is used to get a raw event counter information of the profiled program
 or system-wide. By passing options, we can select which events to use, which
 processes/threads to monitor, how long to monitor and the print interval.
@@ -95,7 +196,7 @@
 
     Total test time: 10.023829 seconds.
 
-#### Select events
+**Select events**
 We can select which events to use via -e option. Below are examples:
 
     # Stat event cpu-cycles.
@@ -143,7 +244,7 @@
 
     Total test time: 1.029843 seconds.
 
-#### Select target to monitor
+**Select target to monitor**
 We can select which processes or threads to monitor via -p option or -t option.
 Monitoring a process is the same as monitoring all threads in the process.
 Simpleperf can also fork a child process to run the new command and then monitor
@@ -158,7 +259,7 @@
     # Start a child process running `ls`, and stat it.
     $simpleperf stat ls
 
-#### Decide how long to monitor
+**Decide how long to monitor**
 When monitoring existing threads, we can use --duration option to decide how long
 to monitor. When monitoring a child process running a new command, simpleperf
 monitors until the child process ends. In this case, we can use Ctrl-C to stop monitoring
@@ -174,7 +275,7 @@
     $simpleperf stat -p 11904 --duration 10
     ^C
 
-#### Decide the print interval
+**Decide the print interval**
 When monitoring perf counters, we can also use --interval option to decide the print
 interval. Below are examples.
 
@@ -185,7 +286,7 @@
     # system wide profiling needs root privilege
     $su 0 simpleperf stat -a --duration 10 --interval 300
 
-#### Display counters in systrace
+**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
 
@@ -195,7 +296,9 @@
     (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
 
-### simpleperf record
+
+#### Simpleperf record
+
 simpleperf record is used to dump records of the profiled program. By passing
 options, we can select which events to use, which processes/threads to monitor,
 what frequency to dump records, how long to monitor, and where to store records.
@@ -206,7 +309,7 @@
     $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
+**Select events**
 In most cases, the cpu-cycles event is used to evaluate consumed cpu time.
 As a hardware event, it is both accurate and efficient. We can also use other
 events via -e option. Below is an example.
@@ -214,7 +317,7 @@
     # Record using event instructions.
     $simpleperf record -e instructions -p 11904 --duration 10
 
-#### Select target to monitor
+**Select target to monitor**
 The way to select target in record command is similar to that in stat command.
 Below are examples.
 
@@ -227,7 +330,7 @@
     # Record a child process running `ls`.
     $simpleperf record ls
 
-#### Set the frequency to record
+**Set the frequency to record**
 We can set the frequency to dump records via the -f or -c options. For example,
 -f 4000 means dumping approximately 4000 records every second when the monitored
 thread runs. If a monitored thread runs 0.2s in one second (it can be preempted
@@ -241,7 +344,7 @@
     # Record with sample period 100000: sample 1 time every 100000 events.
     $simpleperf record -c 100000 -t 11904,11905 --duration 10
 
-#### Decide how long to monitor
+**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.
 
@@ -255,14 +358,16 @@
     $simpleperf record -p 11904 --duration 10
     ^C
 
-#### Set the path to store records
+**Set the path to store records**
 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 report
+
+#### Simpleperf report
+
 simpleperf report is used to report based on perf.data generated by simpleperf
 record command. Report command groups records into different sample entries,
 sorts sample entries based on how many events each sample entry contains, and
@@ -293,13 +398,13 @@
     13.82%    4088    sudogame  7394  7394  randomBlock_r(Board&, int, int, int, int, int)
     6.24%     1756    sudogame  7394  7394  @plt
 
-#### Set the path to read records
+**Set the path to read records**
 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
 
-#### Set the path to find executable binaries
+**Set the path to find executable binaries**
 If reporting function symbols, simpleperf needs to read executable binaries
 used by the monitored processes to get symbol table and debug information. By
 default, the paths are the executable binaries used by monitored processes while
@@ -315,7 +420,7 @@
     # 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.
 
-#### Filter records
+**Filter records**
 When reporting, it happens that not all records are of interest. Simpleperf
 supports five filters to select records of interest. Below are examples.
 
@@ -334,7 +439,7 @@
     # Report records in function checkValid or canFindSolution_r.
     $simpleperf report --symbols "checkValid(Board const&, int, int);canFindSolution_r(Board&, int, int)"
 
-#### Decide how to group records into sample entries
+**Decide how to group records into sample entries**
 Simpleperf uses --sort option to decide how to group sample entries. Below are
 examples.
 
@@ -354,189 +459,217 @@
     # thread, and belong to the same function in the same binary.
     $simpleperf report
 
-## Features of simpleperf
-Simpleperf works similar to linux-tools-perf, but it has following improvements:
-1. Aware of Android environment. Simpleperf handles some Android specific
-situations when profiling. For example, it can profile embedded shared libraries
-in apk, read symbol table and debug information from .gnu_debugdata section. If
-possible, it gives suggestions when facing errors, like how to disable
-perf_harden to enable profiling.
-2. Support unwinding while recording. If we want to use -g option to record and
-report call-graph of a program, we need to dump user stack and register set in
-each record, and then unwind the stack to find the call chain. Simpleperf
-supports unwinding while recording, so it doesn’t need to store user stack in
-perf.data. So we can profile for a longer time with limited space on device.'
-3. Support scripts to make profiling on Android more convenient.
-4. Build in static binaries. Simpleperf is a static binary, so it doesn’t need
-supporting shared libraries to run. It means there is no limitation of Android
-version that simpleperf can run on, although some devices don’t support
-profiling.
 
-# Simpleperf tools in ndk
-Simpleperf tools in ndk contain three parts: simpleperf executable running on
-Android device, simpleperf executable running on host, and python scripts.
+## Android application profiling
 
-## Simpleperf on device
-Simpleperf running on device is located at bin/android directory. It contains
-static binaries running on Android on different architectures. They can be used
-to profile processes running device, and generate perf.data.
+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.
 
-## Simpleperf on host
-Simpleperfs running on host are located at bin/darwin, bin/linux and
-bin/windows.They can be used to parse perf.data on host.
+Simpleperf only supports profiling native instructions in binaries in ELF
+format. If the Java code is executed by interpreter, or with jit cache, it
+can’t be profiled by simpleperf. As Android supports Ahead-of-time compilation,
+it can compile Java bytecode into native instructions with debug information.
+On devices with Android version <= M, we need root privilege to compile Java
+bytecode with debug information. However, on devices with Android version >= N,
+we don't need root privilege to do so.
 
-## Scripts
-Scripts are used to make it convenient to profile and parse profiling results.
-app_profiler.py is used to profile an android application. It prepares
-profiling environments, downloads simpleperf on device, generates and pulls
-perf.data on host. It is configured by app_profiler.config.
-binary_cache_builder.py is used to pull native binaries from device to host.
-It is used by app_profiler.py.
-annotate.py is used to annotate source files using perf.data. It is configured
-by annotate.config.
-report.py reports perf.data in a GUI window.
-simpleperf_report_lib.py is used to enumerate samples in perf.data. Internally
-it uses libsimpleperf_report.so to parse perf.data. It can be used to translate
-samples in perf.data to other forms. One example using simpleperf_report_lib.py
-is report_sample.py.
+Profiling an Android application involves three steps:
+1. Prepare the application.
+2. Record profiling data.
+3. Report profiling data.
 
-# Examples of using simpleperf tools
-This section shows how to use simpleperf tools to profile an Android
-application.
+To profile, we can use either command lines or python scripts. Below shows both.
 
-## Prepare a debuggable Application
-The package name of the application is com.example.sudogame. It has both java
-code and c++ code. We need to run a copy of the app with
-android:debuggable=”true” in its AndroidManifest.xml <application> element,
-because we can’t use run-as for non-debuggable apps. The application should
-has been installed on device, and we can connect device via adb.
 
-## Profile using command line
-To record profiling data, we need to download simpleperf and native libraries
-with debug information on device, run simpleperf to generate profiling data
-file: perf.data, and run simpleperf to report perf.data. Below are the steps.
+### Prepare an Android application
 
-### 1. Enable profiling
+Before profiling, we need to install the application to be profiled on an Android device.
+To get valid profiling results, please check following points:
+
+**1. The application should be debuggable.**
+It means [android:debuggable](https://developer.android.com/guide/topics/manifest/application-element.html#debug)
+should be true. So we need to use debug [build type](https://developer.android.com/studio/build/build-variants.html#build-types)
+instead of release build type. It is understandable because we can't profile others' apps.
+However, on a rooted Android device, the application doesn't need to be debuggable.
+
+**2. Run on an Android device >= L.**
+Profiling on emulators are not yet supported. And to profile Java code, we need
+the jvm running in oat mode, which is only available >= L.
+
+**3. On Android O, add `wrap.sh` in the apk.**
+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)
+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)
+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)
+for how to use unstripped libraries.
+
+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
+    # Open SimpleperfExamplesPureJava project with Android studio,
+    # and build this project sucessfully, otherwise the `./gradlew` command below will fail.
+    $cd SimpleperfExamplePureJava
+
+    # On windows, use "gradlew" instead.
+    $./gradlew clean assemble
+    $adb install -r app/build/outputs/apk/app-profiling.apk
+
+
+### Record and report profiling data (using command-lines)
+
+We recommend using python scripts for profiling because they are more convenient.
+But using command-line will give us a better understanding of the profile process
+step by step. So we first show how to use command lines.
+
+**1. Enable profiling**
 
     $adb shell setprop security.perf_harden 0
 
-### 2. Find the process running the app
-Run `ps` in the app’s context. On >=O devices, run `ps -e` instead.
+**2. Fully compile the app**
 
-    $adb shell
-    angler:/ $ run-as com.example.sudogame
-    angler:/data/data/com.example.sudogame $ ps
-    u0_a93    10324 570   1030480 58104 SyS_epoll_ 00f41b7528 S com.example.sudogame
-    u0_a93    10447 10441 7716   1588  sigsuspend 753c515d34 S sh
-    u0_a93    10453 10447 9112   1644           0 7ba07ff664 R ps
+We need to compile Java bytecode into native instructions to profile Java code
+in the application. This needs different commands on different Android versions.
 
-So process 10324 runs the app.
+On Android >= N:
 
-### 3. Download simpleperf to the app’s data directory
-First we need to find out which architecture the app is using. There are many
-ways, here we just check the map of the process.
+    $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
 
-    angler:/data/data/com.example.sudogame $cat /proc/10324/maps | grep boot.art
-    70f34000-7144e000 r--p 00000000 fd:00 1082  /system/framework/arm/boot.oat
+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
+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.
 
-The file path shows it is arm. So we download simpleperf in arm directory on
-device.
+    $adb root
+    $adb shell setprop dalvik.vm.dex2oat-flags -g
 
-    $adb push bin/android/arm/simpleperf /data/local/tmp
-    $adb shell
-    angler:/ $ run-as com.example.sudogame
-    angler:/data/data/com.example.sudogame $ cp /data/local/tmp/simpleperf .
+    # Reinstall the app.
+    $adb install -r app/build/outputs/apk/app-profiling.apk
 
-### 4. Record perf.data
+On Android L devices, we also need root privilege to compile the app with debug info
+and access the native binaries.
 
-    angler:/data/data/com.example.sudogame $./simpleperf record -p 10324 --duration 30
-    simpleperf I 01-01 09:26:39 10598 10598 cmd_record.cpp:341] Samples recorded: 49471. Samples lost: 0.
-    angler:/data/data/com.example.sudogame $ls -lh perf.data
-    -rw-rw-rw- 1 u0_a93 u0_a93 2.6M 2017-01-01 09:26 perf.data
+    $adb root
+    $adb shell setprop dalvik.vm.dex2oat-flags --include-debug-symbols
 
-Don’t forget to run the app while recording. Otherwise, we may get no samples
-because the process is always sleeping.
+    # Reinstall the app.
+    $adb install -r app/build/outputs/apk/app-profiling.apk
 
-### 5. Report perf.data
-There are different ways to report perf.data. Below shows some examples.
 
-Report samples in different threads.
+**3. Find the app process**
 
-    angler:/data/data/com.example.sudogame $./simpleperf report --sort pid,tid,comm
-    Cmdline: /data/data/com.example.sudogame/simpleperf record -p 10324 --duration 30
-    Arch: arm64
-    Event: cpu-cycles (type 0, config 0)
-    Samples: 49471
-    Event count: 16700769019
+    # Start the app if needed
+    $adb shell am start -n com.example.simpleperf.simpleperfexamplepurejava/.MainActivity
 
-    Overhead  Pid    Tid    Command
-    66.31%    10324  10324  xample.sudogame
-    30.97%    10324  10340  RenderThread
+    # 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
+    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,
+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
+    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 .
+
+
+**5. Record perf.data**
+
+    $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record -p 6885 --duration 10 --dump-symbols
+    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
+    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.
+
+Normally we need to use the app when profiling, otherwise we may record no samples.
+But in this case, the MainActivity starts a busy thread. So we don't need to use
+the app while profiling.
+
+There are many options to record profiling data, check [record command](#simpleperf-record) for details.
+
+**6. Report perf.data**
+
+    # Pull perf.data on host.
+    $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava cat perf.data >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
     ...
+    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)
 
-Report samples in different binaries in the main thread.
+There are many ways to show reports, check [report command](#simpleperf-report) for details.
 
-    angler:/data/data/com.example.sudogame $./simpleperf report --tids 10324 --sort dso -n
-    ...
-    Overhead  Sample  Shared Object
-    37.71%    9970    /system/lib/libc.so
-    35.45%    9786    [kernel.kallsyms]
-    8.71%     3305    /system/lib/libart.so
-    6.44%     2405    /system/framework/arm/boot-framework.oat
-    5.64%     1480    /system/lib/libcutils.so
-    1.55%     426     /data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so
-    ...
 
-Report samples in different functions in libsudo-game-jni.so in the main thread.
+### Record and report profiling data (using python scripts)
 
-    angler:/data/data/com.example.sudogame $./simpleperf report --tids 10324 --dsos  /data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so --sort symbol -n
-    ...
-    Overhead  Sample  Symbol
-    8.94%     35      libsudo-game-jni.so[+1d54]
-    5.71%     25      libsudo-game-jni.so[+1dae]
-    5.70%     23      @plt
-    5.09%     22      libsudo-game-jni.so[+1d88]
-    4.54%     19      libsudo-game-jni.so[+1d82]
-    3.61%     14      libsudo-game-jni.so[+1f3c]
-    ...
+Besides command lines, We can use `app-profiler.py` to profile Android applications.
+It downloads simpleperf on device, records perf.data, and collects profiling
+results and native binaries on host. It is configured by `app-profiler.config`.
 
-In the above result, most symbols are binary name[+virual_addr]. It is because
-libsudo-game-jni.so used on device has stripped .symbol section. We can
-download libsudo-game-jni.so having debug information on device. In android
-studio project, it locates at
-app/build/intermediates/binaries/debug/arm/obj/armeabi-v7a/libsudo-game-jni.so.
-We have to download libsudo-game-jni.so to the same relative path as recorded
-in perf.data (otherwise, simpleperf can’t find it). In this case, it is
-/data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so.
+**1. Fill `app-profiler.config`**
 
-Report symbols using libraries with debug information.
+    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"
 
-    $adb push app/build/intermediates/binaries/debug/arm/obj/armeabi-v7a/libsudo-game-jni.so /data/local/tmp
-    $adb shell
-    angler:/ $ run-as com.example.sudogame
-    angler:/data/data/com.example.sudogame $ mkdir -p data/app/com.example.sudogame-1/lib/arm
-    angler:/data/data/com.example.sudogame $cp /data/local/tmp/libsudo-game-jni.so data/app/com.example.sudogame-1/lib/arm
-    angler:/data/data/com.example.sudogame $./simpleperf report --tids 10324 --dsos  /data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so --sort symbol -n --symfs .
-    ...
-    Overhead  Sample  Symbol
-    75.18%    317     checkValid(Board const&, int, int)
-    14.43%    60      canFindSolution_r(Board&, int, int)
-    5.70%     23      @plt
-    3.51%     20      randomBlock_r(Board&, int, int, int, int, int)
-    ...
+`apk_file_path` is needed to fully compile the application on Android L/M. It is
+not necessary on Android >= N.
 
-Report samples in one function
+`android_studio_project_dir` is used to search native libraries in the
+application. It is not necessary for profiling.
 
-    angler:/data/data/com.example.sudogame $./simpleperf report --tids 10324 --dsos  /data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so --symbols “checkValid(Board const&, int, int)” --sort vaddr_in_file -n --symfs .
-    ...
-    Overhead  Sample  VaddrInFile
-    11.89%    35      0x1d54
-    7.59%     25      0x1dae
-    6.77%     22      0x1d88
-    6.03%     19      0x1d82
-    ...
+`record_options` can be set to any option accepted by simpleperf record command.
 
-### 6. Record and report call graph
+**2. Run `app-profiler.py`**
+
+    $python app_profiler.py
+
+
+If running successfully, it will collect profiling data in perf.data in current
+directory, and related native binaries in binary_cache/.
+
+**3. Report perf.data**
+
+We can use `report.py` to report perf.data.
+
+    $python report.py
+
+We can add any option accepted by `simpleperf report` command to `report.py`.
+
+
+### Record and report call graph
+
 A call graph is a tree showing function call relations. Below is an example.
 
     main() {
@@ -555,217 +688,68 @@
            |
            |-> FunctionTwo
 
+
 #### Record dwarf based call graph
-To generate call graph, simpleperf needs to generate call chain for each record.
-Simpleperf requests kernel to dump user stack and user register set for each
-record, then it backtraces the user stack to find the function call chain. To
-parse the call chain, it needs support of dwarf call frame information, which
-usually resides in .eh_frame or .debug_frame section of the binary.  So we need
-to use --symfs to point out where is libsudo-game-jni.so with debug information.
 
-    angler:/data/data/com.example.sudogame $./simpleperf record -p 10324 -g --symfs . --duration 30
-    simpleperf I 01-01 09:59:42 11021 11021 cmd_record.cpp:341] Samples recorded: 60700. Samples lost: 1240.
+When using command lines, add `-g` option like below:
 
-Note that kernel can’t dump user stack >= 64K, so the dwarf based call graph
-doesn’t contain call chains consuming >= 64K stack. What’s more, because we
-need to dump stack in each record, it is likely to lost records. Usually, it
-doesn’t matter to lost some records.
+    $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record -g -p 6685 --duration 10 --dump-symbols
+
+When using python scripts, change `app-profiler.config` as below:
+
+    Change `record_options` line to record_options = "--dump-symbols --duration 10 -g"
+
+Recording dwarf based call graph needs support of debug information
+in native binaries. So if using native libraries in the application,
+it is better to contain non-stripped native libraries in the apk.
+
 
 #### Record stack frame based call graph
-Another way to generate call graph is to rely on the kernel parsing the call
-chain for each record. To make it possible, kernel has to be able to identify
-the stack frame of each function call. This is not always possible, because
-compilers can optimize away stack frames, or use a stack frame style not
-recognized by the kernel. So how well it works depends (It works well on arm64,
-but not well on arm).
 
-    angler:/data/data/com.example.sudogame $./simpleperf record -p 10324 --call-graph fp --symfs . --duration 30
-    simpleperf I 01-01 10:03:58 11267 11267 cmd_record.cpp:341] Samples recorded: 56736. Samples lost: 0.
+When using command lines, add `--call-graph fp` option like below:
 
-**Recording stack frame based call graph doesn't work well on arm architecture,**
-**even if compiled using -O0 -g -fno-omit-frame-pointer options. It is because**
-**the kernel can't unwind user stack containing both arm/thumb code. So please**
-**consider using dwarf based call graph on arm architecture, or profiling in**
-**aarch64 environment.**
+    $adb shell run-as com.example.simpleperf.simpleperfexamplepurejava ./simpleperf record --call-graph fp -p 6685 --duration 10 --dump-symbols
+
+When using python scripts, change `app-profiler.config` as below:
+
+    Change `record_options` line to record_options = "--dump-symbols --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
+is not well supported, even if compiled using -O0 -g -fno-omit-frame-pointer
+options. It is because the kernel can't unwind user stack containing both
+arm/thumb code. **So please consider using dwarf based call graph on arm
+architecture, or profiling in arm64 environment.**
+
 
 #### Report call graph
-Report accumulated period. In the table below, the first column is “Children”,
-it is the cpu cycle percentage of a function and functions called by that
-function. The second column is “Self”, it is the cpu cycle percentage of just a
-function. For example, checkValid() itself takes 1.28% cpus, but it takes
-29.43% by running itself and calling other functions.
 
-    angler:/data/data/com.example.sudogame $./simpleperf report --children --symfs .
+To report call graph using command lines, add `-g --brief-callgraph` option.
+
+    $bin/linux/x86_64/simpleperf report -g --brief-callgraph
     ...
-    Children  Self   Command          Pid    Tid    Shared Object                                                 Symbol
-    31.94%    0.00%  xample.sudogame  10324  10324  [kernel.kallsyms]                                             [kernel.kallsyms][+ffffffc000204268]
-    31.10%    0.92%  xample.sudogame  10324  10324  /system/lib/libc.so                                           writev
-    29.43%    1.28%  xample.sudogame  10324  10324  /data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so  checkValid(Board const&, int, int)
-    28.43%    0.34%  xample.sudogame  10324  10324  /system/lib/liblog.so                                         __android_log_print
-    28.24%    0.00%  xample.sudogame  10324  10324  /system/lib/libcutils.so                                      libcutils.so[+107b7]
-    28.10%    0.27%  xample.sudogame  10324  10324  /data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so  canFindSolution_r(Board&, int, int)
-    ...
+    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
+       |
+       -- java.lang.Thread.run
+          |
+           -- void com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run()
+               |--83.66%-- [hit in function]
+               |
+               |--16.22%-- int com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.callFunction(int)
+               |    |--99.97%-- [hit in function]
 
-Report call graph.
-
-    angler:/data/data/com.example.sudogame $./simpleperf report -g --symfs . >report
-    angler:/data/data/com.example.sudogame $exit
-    angler:/ $cp /data/data/com.example.sudogame/report /data/local/tmp
-    angler:/ $exit
-    $adb pull /data/local/tmp/report .
-    $cat report
-    ...
-    29.43%    1.28%  xample.sudogame  10324  10324  /data/app/com.example.sudogame-1/lib/arm/libsudo-game-jni.so  checkValid(Board const&, int, int)
-           |
-           -- checkValid(Board const&, int, int)
-              |
-              |--95.50%-- __android_log_print
-              |    |--0.68%-- [hit in function]
-              |    |
-              |    |--51.84%-- __android_log_buf_write
-              |    |    |--2.07%-- [hit in function]
-              |    |    |
-              |    |    |--30.74%-- libcutils.so[+c69d]
-    ...
-
-Report call graph in callee mode. We can also show how a function is called by
-other functions.
-
-    angler:/data/data/com.example.sudogame $./simpleperf report -g callee --symfs . >report
-    $adb shell run-as com.example.sudogame cat report >report
-    $cat report
-    …
-    28.43%    0.34%  xample.sudogame  10324  10324  /system/lib/liblog.so                                         __android_log_print
-           |
-           -- __android_log_print
-              |
-              |--97.82%-- checkValid(Board const&, int, int)
-              |    |--0.13%-- [hit in function]
-              |    |
-              |    |--94.89%-- canFindSolution_r(Board&, int, int)
-              |    |    |--0.01%-- [hit in function]
-              |    |    |
-    ...
-
-## Profile java code
-Simpleperf only supports profiling native instructions in binaries in ELF
-format. If the java code is executed by interpreter, or with jit cache, it
-can’t be profiled by simpleperf. As Android supports Ahead-of-time compilation,
-it can compile java bytecode into native instructions with debug information.
-On devices with Android version <= M, we need root privilege to compile java
-bytecode with debug information. However, on devices with Android version >= N,
-we don't need root privilege to do so.
-
-### On Android N
-#### 1. Fully compile java code into native instructions.
-
-    $adb shell setprop debug.generate-debug-info true
-    $adb shell cmd package compile -f -m speed com.example.sudogame
-    // restart the app to take effect
-
-#### 2. Record perf.data
-
-    angler:/data/data/com.example.sudogame $./simpleperf record -p 11826 -g --symfs . --duration 30
-    simpleperf I 01-01 10:31:40 11859 11859 cmd_record.cpp:341] Samples recorded: 50576. Samples lost: 2139.
-
-#### 3. Report perf.data
-
-    angler:/data/data/com.example.sudogame $./simpleperf report -g --symfs . >report
-    angler:/data/data/com.example.sudogame $exit
-    angler:/ $cp /data/data/com.example.sudogame/report /data/local/tmp
-    angler:/ $exit
-    $adb pull /data/local/tmp/report .
-    $cat report
-    ...
-    21.14%    0.00%  xample.sudogame  11826  11826  /data/app/com.example.sudogame-1/oat/arm/base.odex            boolean com.example.sudogame.MainActivity.onOptionsItemSelected(android.view.MenuItem)
-           |
-           -- boolean com.example.sudogame.MainActivity.onOptionsItemSelected(android.view.MenuItem)
-              |
-               --99.99%-- void com.example.sudogame.GameView.startNewGame()
-                   |--0.01%-- [hit in function]
-                   |
-                   |--99.87%-- void com.example.sudogame.GameModel.reInit()
-                   |    |--0.01%-- [hit in function]
-                   |    |
-                   |    |--89.65%-- boolean com.example.sudogame.GameModel.canFindSolution(int[][])
-                   |    |    |
-                   |    |    |--99.95%-- Java_com_example_sudogame_GameModel_canFindSolution
-                   |    |    |    |
-                   |    |    |    |--99.49%-- canFindSolution(Board&)
-                   |    |    |    |    |--0.01%-- [hit in function]
-                   |    |    |    |    |
-                   |    |    |    |    |--99.97%-- canFindSolution_r(Board&, int, int)
-                   |    |    |    |    |           canFindSolution_r(Board&, int, int)
-    ...
-
-### On Android M
-On M devices, We need root privilege to force Android fully compiling java code
-into native instructions in ELF binaries with debug information. We 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
-
-    # Reinstall the app.
-    $adb install -r app-debug.apk
-
-    # Change to the app’s data directory.
-    $ adb root && adb shell
-    device# cd `run-as com.example.sudogame pwd`
-
-    # Record as root as simpleperf needs to read the generated native binary.
-    device#./simpleperf record -p 25636 -g --symfs . -f 1000 --duration 30
-    simpleperf I 01-02 07:18:20 27182 27182 cmd_record.cpp:323] Samples recorded: 23552. Samples lost: 39.
-
-### On Android L
-On 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
-
-    # Reinstall the app.
-    $adb install -r app-debug.apk
-
-## Profile using scripts
-Although using command line is flexible, it can be too complex. So we have
-python scripts to help running commands.
-
-### Record using app_profiler.py
-app_profiler.py is used to profile an Android application. It sets up profiling
-environment, downloads simpleperf and native libraries with debug information,
-runs simpleperf to generate perf.data, and pulls perf.data and binaries from
-device to host.
-It is configured by app_profiler.config. Below is an example.
-
-app_profiler.config:
-
-    app_package_name = “com.example.sudogame”
-    android_studio_project_dir = “/AndroidStudioProjects/SudoGame”  # absolute path of the project
-    ...
-    record_options = "-e cpu-cycles:u -f 4000 -g --dump-symbols --duration 30"
-    ...
-
-run app_profiler.py:
-
-    $python app_profiler.py
-    ...
-    INFO:root:profiling is finished.
-
-It pulls generated perf.data on host, and collects binaries from device in
-binary_cache.
-
-### Report using report.py
+To report call graph using python scripts, add `-g` option.
 
     $python report.py -g
+    # Double-click an item started with '+' to show its callgraph.
 
-It generates a GUI interface to report data.
+### Visualize profiling data
 
-### Process samples using simpleperf_report_lib.py
-simpleperf_report_lib.py provides an interface reading samples from perf.data.
-An example is report_sample.py.
+`simpleperf_report_lib.py` provides an interface reading samples from perf.data.
+By using it, You can write python scripts to read perf.data or convert perf.data
+to other formats. Below are two examples.
+
 
 ### Show flamegraph
 
@@ -773,7 +757,9 @@
     $stackcollapse-perf.pl out.perf >out.folded
     $./flamegraph.pl out.folded >a.svg
 
+
 ### Visualize using pprof
+
 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.
@@ -781,51 +767,44 @@
     $python pprof_proto_generator.py
     $pprof -pdf pprof.profile
 
+
 ### Annotate source code
-annotate.py reads perf.data and binaries in binary_cache. Then it knows which
-source file:line each sample hits. So it can annotate source code. annotate.py
-is configured by annotate.config. Below is an example.
 
-annotate.config:
+`annotate.py` reads perf.data, binaries in `binary-cache` (collected by `app-profiler.py`)
+and source code, and generates annoated source code in `annotated_files/`.
 
-    ...
-    source_dirs = [“/AndroidStudio/SudoGame”]  # It is a directory containing source code.
-    ...
+It is configured by `annotate.config`.
 
-run annotate.py:
+**1. Fill `annotate.config`**
+
+    Change `source_dirs` line to source_dirs = ["../SimpleperfExamplePureJava"]
+    Change `addr2line_path` line to addr2line_path = "addr2line"
+
+`addr2line` is need to annotate source code. It can be found in Android ndk release.
+Please set `addr2line_path` to the location of `addr2line` if it can't be found
+in PATH environment variable.
+
+**2. Run `annotate.py`**
 
     $python annotate.py
 
-It generates annotated_files directory.
-annotated_files/summary file contains summary information for each source file.
-An example is as below.
 
-    /AndroidStudioProjects/SudoGame/app/src/main/jni/sudo-game-jni.cpp: accumulated_period: 25.587937%, period: 1.250961%
-      function (checkValid(Board const&, int, int)): line 99, accumulated_period: 23.564356%, period: 0.908457%
-      function (canFindSolution_r(Board&, int, int)): line 135, accumulated_period: 22.260125%, period: 0.142359%
-      function (canFindSolution(Board&)): line 166, accumulated_period: 22.233101%, period: 0.000000%
-      function (Java_com_example_sudogame_GameModel_canFindSolution): line 470, accumulated_period: 21.983184%, period: 0.000000%
-      function (Java_com_example_sudogame_GameModel_initRandomBoard): line 430, accumulated_period: 2.226896%, period: 0.000000%
+**3. Read annotated code**
 
-      line 27: accumulated_period: 0.011729%, period: 0.000000%
-      line 32: accumulated_period: 0.004362%, period: 0.000000%
-      line 33: accumulated_period: 0.004427%, period: 0.000000%
-      line 36: accumulated_period: 0.003303%, period: 0.000000%
-      line 39: accumulated_period: 0.010367%, period: 0.004123%
-      line 41: accumulated_period: 0.162219%, period: 0.000000%
+The annotated source code is located at `annotated_files/`.
+`annotated_files/summary` shows how each source file is annotated.
 
-annotated_files/ also contains annotated source files which are found by
-annotate.py. For example, part of checkValid() function in libsudo-game-jni.cpp
-is annotated as below.
+One annotated source file is `annotated_files/java/com/example/simpleperf/simpleperfexamplepurejava/MainActivity.java`.
+It's content is similar to below:
 
-    /* [func] acc_p: 23.564356%, p: 0.908457% */static bool checkValid(const Board& board, int curR, int curC) {
-    /* acc_p: 0.037933%, p: 0.037933%         */    int digit = board.digits[curR][curC];
-    /* acc_p: 0.162355%, p: 0.162355%         */    for (int r = 0; r < BOARD_ROWS; ++r) {
-    /* acc_p: 0.020880%, p: 0.020880%         */        if (r == curR) {
-    /* acc_p: 0.034691%, p: 0.034691%         */            continue;
-                                                        }
-    /* acc_p: 0.176490%, p: 0.176490%         */        if (board.digits[r][curC] == digit) {
-    /* acc_p: 14.957673%, p: 0.059022%        */            LOGI("conflict (%d, %d) (%d, %d)", curR, curC, r, curC);
-    /* acc_p: 0.016296%, p: 0.016296%         */            return false;
-                                                        }
-                                                    }
+    // [file] shows how much time is spent in current file.
+    /* [file] acc_p: 99.966552%, p: 99.837438% */package com.example.simpleperf.simpleperfexamplepurejava;
+    ...
+    // [func] shows how much time is spent in current function.
+    /* [func] acc_p: 16.213395%, p: 16.209250% */            private int callFunction(int a) {
+    ...
+    // This shows how much time is spent in current line.
+    // acc_p field means how much time is spent in current line and functions called by current line.
+    // p field means how much time is spent just in current line.
+    /* acc_p: 99.966552%, p: 83.628188%        */                    i = callFunction(i);
+
diff --git a/annotate.py b/annotate.py
index d25a6cd..d88a916 100644
--- a/annotate.py
+++ b/annotate.py
@@ -106,13 +106,16 @@
             out_pos += 1
             assert addr_line[:2] == "0x"
             assert out_pos < len(stdoutdata)
-            assert addrs[addr_pos] == int(addr_line, 16)
             source_lines = []
             while out_pos < len(stdoutdata) and stdoutdata[out_pos][:2] != "0x":
                 function = stdoutdata[out_pos]
                 out_pos += 1
                 assert out_pos < len(stdoutdata)
-                file, line = stdoutdata[out_pos].split(':')
+                # Handle lines like "C:\Users\...\file:32".
+                items = stdoutdata[out_pos].rsplit(':', 1)
+                if len(items) != 2:
+                    continue
+                (file, line) = items
                 line = line.split()[0]  # Remove comments after line number
                 out_pos += 1
                 if file.find('?') != -1:
@@ -124,8 +127,8 @@
                 else:
                     line = int(line)
                 source_lines.append(SourceLine(file, function, line))
-                dso[addrs[addr_pos]] = source_lines
-                addr_pos += 1
+            dso[addrs[addr_pos]] = source_lines
+            addr_pos += 1
         assert addr_pos == len(addrs)
 
 
@@ -558,6 +561,9 @@
                 path = key
                 from_path = path
                 to_path = os.path.join(dest_dir, path[1:])
+            elif is_windows() and key.find(':\\') != -1 and os.path.isfile(key):
+                from_path = key
+                to_path = os.path.join(dest_dir, key.replace(':\\', '\\'))
             else:
                 path = key[1:] if key.startswith('/') else key
                 # Change path on device to path on host
@@ -607,7 +613,10 @@
             for line in range(1, len(lines) + 1):
                 annotate = annotates.get(line)
                 if annotate is None:
-                    annotate = empty_annotate
+                    if not lines[line-1].strip():
+                        annotate = ''
+                    else:
+                        annotate = empty_annotate
                 else:
                     annotate = '/* ' + annotate + (
                         ' ' * (max_annotate_cols - len(annotate))) + ' */'
@@ -624,3 +633,4 @@
     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
diff --git a/app_profiler.py b/app_profiler.py
index a47f1aa..6c889b4 100644
--- a/app_profiler.py
+++ b/app_profiler.py
@@ -177,7 +177,8 @@
 
 
     def _find_app_process(self):
-        result, output = self.adb.run_and_return_output(['shell', 'ps'])
+        ps_args = ['-e'] if self.android_version >= 8 else []
+        result, output = self.adb.run_and_return_output(['shell', 'ps'] + ps_args)
         if not result:
             return None
         output = output.split('\n')
diff --git a/bin/android/arm/simpleperf b/bin/android/arm/simpleperf
index a7fa0ab..4bb1ef9 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 71e7141..365a943 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 cec84b6..6d77115 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 8ca23bf..c31dc40 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 9dea978..cccfd9c 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 9a4c745..a73138b 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 be1d0d8..a734c87 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 082dbdf..3ca9e1a 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 b41a168..d79ed74 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 e869a83..7459a3e 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 0c7598f..5f5671b 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 d9a260b..186cf1a 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 f74c009..1f985ed 100755
--- a/bin/windows/x86/libsimpleperf_report.dll
+++ b/bin/windows/x86/libsimpleperf_report.dll
Binary files differ
diff --git a/bin/windows/x86/libwinpthread-1.dll b/bin/windows/x86/libwinpthread-1.dll
new file mode 100755
index 0000000..3aa88d7
--- /dev/null
+++ b/bin/windows/x86/libwinpthread-1.dll
Binary files differ
diff --git a/bin/windows/x86/simpleperf.exe b/bin/windows/x86/simpleperf.exe
index bc877fe..46822bd 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 2738d54..e774593 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/libwinpthread-1.dll b/bin/windows/x86_64/libwinpthread-1.dll
new file mode 100755
index 0000000..b2fd346
--- /dev/null
+++ b/bin/windows/x86_64/libwinpthread-1.dll
Binary files differ
diff --git a/bin/windows/x86_64/simpleperf.exe b/bin/windows/x86_64/simpleperf.exe
index 1933c69..46822bd 100755
--- a/bin/windows/x86_64/simpleperf.exe
+++ b/bin/windows/x86_64/simpleperf.exe
Binary files differ
diff --git a/repo.prop b/repo.prop
index 4649183..f257fb4 100644
--- a/repo.prop
+++ b/repo.prop
@@ -1,6 +1,6 @@
 device/asus/fugu 80ed1ee63bc5b4480cf18925ac644517b97f3179
 device/asus/fugu-kernel 8a09131453b9326793261b6c9297f3c43336d6b5
-device/common aec77c28f81468d42289c2b0620e8f2dca63141a
+device/common 81fa95978b5542b9d2851b04d034b9a75ed8b43b
 device/generic/arm64 23d9a6b57c63fbea914ae663a0be693b43d91ffc
 device/generic/armv7-a-neon dd168c481dcb14c7932c7026ac7c8b4af128e4a5
 device/generic/common 11c092a6cbfcf6207f07a9a8e3398e747e7f5461
@@ -20,41 +20,41 @@
 device/google/accessory/arduino abc5159a3ca9dbb5c7e364a1eab99901a4440ac5
 device/google/accessory/demokit 7dfe7f89a3b174709c773fe319531006e46440d9
 device/google/atv fbc45fb7c00d9b0150acdb674c9525ab32abe349
-device/google/contexthub a6bb3688b671c8f158c0e8d0b1e47f73f840798a
+device/google/contexthub b0a8cc4ed7a173314898fb75a286f3179b1a69e1
 device/google/dragon b02923940ab980bd361777629a04fde338e84766
 device/google/dragon-kernel 8c9e4d14540119e0815a453eb4fefbedeaf8794f
-device/google/marlin c967122e0d0cb4e86a6cadad8e0413b29fa528c3
+device/google/marlin 8ba659488f2010e135222049cf237839962f482c
 device/google/marlin-kernel 48bde4626f5da9605b068b6c1bcc1e854a876d52
 device/htc/flounder 949fd9533a62ecc88c2ed30df2244147387e3a1a
 device/htc/flounder-kernel 1edc369683182e3353e1b802272d2406ef4f40fe
-device/huawei/angler 2edce3b3e487af103c1658f3d61f6a3f9870e03a
+device/huawei/angler 81f327d5a743a8f149e4e44cf1a1ea773cb54e92
 device/huawei/angler-kernel db808069857bd03e573ce3c765dd6df43f2a4318
-device/lge/bullhead 65e3284b4b911881e07ac4c41ebeb200fd2ae7e1
+device/lge/bullhead 7f78fc7bcd1e2349e3384e4c498a5fd00fb75804
 device/lge/bullhead-kernel 3f270065c17302930cc9319d399297436b65b3bc
 device/linaro/bootloader/OpenPlatformPkg a3d50249601e68f7d3c885d4259725c54130a213
 device/linaro/bootloader/arm-trusted-firmware 36aa82dda56169333aba6b2c55341404c1d631f0
 device/linaro/bootloader/edk2 09fc3d39493c50b938317477cc7095cee853eb33
-device/linaro/hikey cb9d097082ffd71eb220d5af435e5d7f8cddd465
-device/linaro/hikey-kernel 8fee8684f99ddecdb6618f728d1b9f6aec339ec0
+device/linaro/hikey 9e18cca0b575ad8ca3e6a158cab4795b345c0960
+device/linaro/hikey-kernel b70608ac73211ffa2c381168758dda457f2bc453
 device/moto/shamu df9354d7a28a67ac335a8f608d20bde6f0a97254
 device/moto/shamu-kernel 9ee09a9a4c803663cb0eb415d8ae1d57ba367cfb
-device/sample 8ac4e70d7b8c14f64162d615c6fa2c0c5eaaf378
-kernel/tests 7455bf0dad80a19c336574069b98f6b895b8917b
-platform/art aa03f6fa38da0166790f2b22b679e6568ad56f7d
-platform/bionic 627ed9162538d847ea4e530fd443570d37f57d65
-platform/bootable/recovery fa7d55a7e3235863dd3764f780b4076c10854f92
-platform/build eddf74cadb7111d4d391f08bab96698b667ccbb7
+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 9ce45296145df6b17f94cabe497aa9928b6b3c87
+platform/build/soong 528d5e5d2884309394a8518260682b4b41884051
 platform/compatibility/cdd 068a1efdb6a01e051cd5ca581b3fd70cf1382de5
-platform/cts ffabaa3d0a1df1c1b9324759be04acbf15cb6580
-platform/dalvik fe4d906e500a2c9599d51d5d74f86aa2f0880134
+platform/cts 8617c799b02daa6dd0fa142ad097a3670e013cc6
+platform/dalvik 9fa280c2171b3a016d63e80cda7be031519b7ef7
 platform/developers/build 67343aa8a5faeb6b4df459dbfce4cc17bc7f21f9
 platform/developers/demos 95d49d216223e3431647abd79f5e376958353c95
 platform/developers/samples/android b329d0bb80feecf6a27d38fe0bb3c018a2ba16aa
-platform/development e652b75dc42f4ca2ecc30930315b2a24487ffa90
-platform/docs/source.android.com 043d60370a041acfef0f1d5715944d72992dc267
+platform/development 1686af001e95cb2dae657e3d1459f97fd8f13b44
+platform/docs/source.android.com b5464ea51e87828fc16dc194dfc00e72bf1b224e
 platform/external/ImageMagick 7a8860406c015bbc63f382efed9372044eb0cb74
 platform/external/Microsoft-GSL 44079759f93259a9694607502406dfe3717b04ba
 platform/external/aac b0f6b2906ed8924aed7fbfdaf55bd50ead238f32
@@ -66,15 +66,15 @@
 platform/external/ant-glob a73228afa9540b9c5518d360c5ae630bb634f975
 platform/external/antlr dd5fa6d48b827c5d98b625adbc209f4a05567534
 platform/external/apache-commons-math 18f62fca59d387e3c1ccd8f80087d9c9af40bcc8
-platform/external/apache-harmony eba8f9379c93bb3ff9b2e8dbcb2a3f9b5ef545e7
-platform/external/apache-http 18e4eccff3babfffafc79b949482bc10e749731e
+platform/external/apache-harmony 9906d7dca422939d7b760ee5b8f1e1fad9ec9ef7
+platform/external/apache-http 5eb0106cc59933dda5039ab88c25a32c86539b06
 platform/external/apache-xml 31d7642eb8f37a9166db7f1c9e313ab651bdb8ba
 platform/external/archive-patcher 5a1c799c43d3c17f95cfe173752a231be2049e16
-platform/external/autotest 28468bbcdff8d64255ef0c0ac048d1d5307e4eb7
-platform/external/avb ee4603937b8896b41488d9fdde3790273511d4bd
+platform/external/autotest e1da183377fd9cf3797ad989dab7049e97ed440b
+platform/external/avb dc678e8d3c2a13e2be3802739d0e678185577d7b
 platform/external/bison 7467d52af437dd3dfea237a6865ab84bf258dee0
 platform/external/blktrace d345431f16b8f76f30a58193ff2b26d5853e1109
-platform/external/boringssl 899a4fe0a1b9a593cbfeaebcf15ac6f585d5832b
+platform/external/boringssl 2424d84dd6dbdc0d32a4c80e6810d168f722ce0b
 platform/external/bouncycastle e984dbf63708351e1de1f6613d33befe91ad4dc1
 platform/external/bsdiff b9fa8599064d10afd8c231155500f0b8e934d71f
 platform/external/bzip2 0600e5668b2b1590c2f908a5c420149c6581122e
@@ -87,13 +87,13 @@
 platform/external/clang 2910a18bf8b63ea2a2cc2c6c8be7e7c05faff66b
 platform/external/cmockery 9199c7bfafefea32d1884182fa655b6e4578c1c4
 platform/external/compiler-rt 8bdaf98eeb4dd0f7b8cae390cd18c097a9eb4e2f
-platform/external/conscrypt d16a91958c3b31719169fb659b1107cad1832cb4
+platform/external/conscrypt 366b7587d9da3e4b2a758404938e70aff878a00c
 platform/external/crcalc 5559610bea3b267abef3273868f2d6b8c01409a5
-platform/external/cros/system_api 2719faff7538e3cf2e404f195d61c2b7e0416449
-platform/external/curl 265dfa5b0c66ea5b705f9545030762e1c9c038de
+platform/external/cros/system_api d86285852c0555c8f63e5d12062f6d36603635fd
+platform/external/curl 841623a5504fc1ada3430c714a52be21bd9a452a
 platform/external/dagger2 d4f3a7089333c6a751bf503a59fef88a1db6df51
-platform/external/deqp 89bb39d24906bebd4e506f534e7336ffffec780b
-platform/external/desugar 1cb4af0691935fdd61504e616f67cad868ce5f79
+platform/external/deqp 1203cd8416eb7c84ddd73b25ff6b2037f848131b
+platform/external/desugar e3fedeb0008902ff8cbbb1c56a75c2ec9f9971af
 platform/external/dexmaker 4d6bad69afbe9a5e0cab02edca5a69c961fa4de0
 platform/external/dhcpcd-6.8.2 df64c96f01b3dd2a823d6aa788653c3bedd1efda
 platform/external/dlmalloc 6661f3ca66b55d8f5a57b96fec97efaf8f3897a5
@@ -102,10 +102,10 @@
 platform/external/doclava f381ec7f6fca0618fb01231a758402597b1239e3
 platform/external/donuts 005389fb31a67841b5de42f0d25fbfab843e208c
 platform/external/drm_gralloc e19443ea00d3b27622590b920819e53da68f7fda
-platform/external/drm_hwcomposer bc1e7d8bed66da5b67850a087b36f580f642b43a
+platform/external/drm_hwcomposer c604f0a549b9a981b42ba2b2c82180017cd36e25
 platform/external/droiddriver e6e060c9dab6d60e9d2890529f98acbfbaf4b14c
-platform/external/dtc a5887181228adf975bb41ccb0c421b2a06d3895e
-platform/external/e2fsprogs dd62d63cd1b2ef5fd484306b2426c38680e8467a
+platform/external/dtc 8aa4d201f0b0c56187a5227952e79b61481064e3
+platform/external/e2fsprogs 930bc064484de01c6791b0e2fb7aee33fd1aa0c2
 platform/external/easymock 8bc2748f2850c88ab6b86c6ceed1ce65bed5ee16
 platform/external/eclipse-basebuilder 076f46888ed346775b8efc564d7694063ef5eea7
 platform/external/eclipse-windowbuilder c533332008088ee5f61745b724361fbde5b7e770
@@ -119,7 +119,7 @@
 platform/external/fdlibm fcd17254a9e59ceb0420d4a2faf29db6b004c443
 platform/external/fec b3e9d18f59759ff5407be13ef8c6d2e2a497305e
 platform/external/fio cf41806599b7d50ed4c91aab3815154b8c64324a
-platform/external/flac c690cad78f2e3d6791c28d305b234570fab7b209
+platform/external/flac 9654326e6af758bf25e50f15a7e7b9cff6755a78
 platform/external/fmtlib 1ce26af6d14810a277a5f62a5619a372b93183cc
 platform/external/fonttools fede58680958e96e6e8f61c3cc6282f798452c53
 platform/external/freetype 613f720f08f579806a05f0e45927f4f9ff147885
@@ -141,7 +141,7 @@
 platform/external/hamcrest 0d446c0a6f5ab27bf24d8e046f1d03ce40f09594
 platform/external/harfbuzz_ng 4c37cfd7ee27796854bbd1d3fe74f70e2da857ce
 platform/external/hyphenation-patterns dedeff64279b77bafff72b6d866efc93e829b4ab
-platform/external/icu 62cf2d82b7f702d93be1c72dc48729485f1b05b7
+platform/external/icu c0d7fcce3181eb3ac9016fcd31525fa80eb8670a
 platform/external/ims 01e835687ead2bc237b90f9e60793b1b849327ac
 platform/external/iproute2 1b32ccb0313537bd0bebcb6ec3c0398e90aa103a
 platform/external/ipsec-tools afbdf60e1d4cafe0f894fe8e8e5bfa49e47c80b2
@@ -154,7 +154,7 @@
 platform/external/javassist f7c4b954072e563b75f6910c25bb689bbf38a3d1
 platform/external/jcommander 68545397d8332a61f800ce9617715a22445ed9a9
 platform/external/jdiff 62f4ca1f64eaeb0896416949d6120b912ac67d3b
-platform/external/jemalloc 412112bb89f0bbf60b5a24e42c8072cd301d1581
+platform/external/jemalloc be92dfd38fce4a76e623796b423ee8ddd49fd928
 platform/external/jetty 3077b6f9426ccafb6bd5c00a748e1d40af9e1ae5
 platform/external/jline 74812032f8d8eddbef387f18c96de9e5c38b8fdb
 platform/external/jmdns 0c71647deb7f7835c473fd3dfb45943083e47794
@@ -168,9 +168,10 @@
 platform/external/kernel-headers 134f6bdcbfc9aae59db447822413388b49537864
 platform/external/kmod 087bd70f9a816bc37d77ef71c0b8f4253e60169e
 platform/external/ksoap2 3f3695df2e974811a5759d43f3532dcd9d6be26c
-platform/external/libavc f04b34c5b131c20651c0b4a9bba305d73d88b2fb
+platform/external/libavc fc442e1b02a3cfbb32414c6af8c63af3503cd1d0
+platform/external/libbackup a645153b0a97663636bacdc5527c0d304fa79657
 platform/external/libbrillo 3f59c6460e4750ced0e18cc50855993260899128
-platform/external/libcap c1745912852b22a3ac841202cd1d7504533cfcff
+platform/external/libcap 9c58810fa56b9067e8be10900707ced04fa5c278
 platform/external/libcap-ng 835f318b9785a70415980fba96c34ee5c6b7e415
 platform/external/libchrome c9027cbc0526c43c81d754ccd986d6d748ce7b08
 platform/external/libconstrainedcrypto fca75c837bebfbd51927156158de36fc517742f7
@@ -179,52 +180,52 @@
 platform/external/libcxxabi c41479a1d7de7fe6e9cfbff9be21382f7b23ace7
 platform/external/libdaemon e2f604066d97431c95856c73d7b9ee46b348d37e
 platform/external/libdivsufsort 90d90b27c0b82cac20deabac79e97e274856eaf8
-platform/external/libdrm 853f81c361c98ab5bf9f2c05176ce9c455919640
+platform/external/libdrm 0da99b8ab0f691ad7ec7f4c5c8a09c5df92486a1
 platform/external/libedit 67e14dfc833aafa400a3aad8cb329cbaec503445
-platform/external/libese bf2f0ded6aa38582b35af90d8ff969052f19ed05
+platform/external/libese 343ecd6a43de9fe48e0e557d9527c5cd3b816752
 platform/external/libevent 596447c7ff2881a67e7082c905112584c3e61a17
-platform/external/libexif c668765a842fba2cf497479bca9c7f014076b37e
+platform/external/libexif e1786084cab68abf06232ff9b5945df484092fea
 platform/external/libgdx 5f9bb1dadc7e51a5fdb7171280366f8b3ec86eb8
-platform/external/libgsm 2f66c771f18317147e446fab5a95082d18a6db20
-platform/external/libhevc 09ea1a98b10c5cdc278ee4fe9511532b94d5df17
+platform/external/libgsm c06febc81bf00ad5be3216e060f8ef69dab9c14c
+platform/external/libhevc 3f774369418af612f3f70686fdf5b2fb05505e4e
 platform/external/libjpeg-turbo ae5d0ab01e531a19a9b8237f650bfc16ee8efa23
 platform/external/libldac b4f70c5b723ddd3e7b4785e81cb0120d5d8fd861
 platform/external/liblzf a88b9629447deabe8697d2f8fd4cc70aa6e1b563
 platform/external/libmicrohttpd 1e68f5d827a859ba3b7ab6a70a60247e0b96afa5
 platform/external/libmojo 24543f227908c2e949bb9a15b40276f59fcc9a0a
-platform/external/libmpeg2 1ebd4bb57fe7322cb4637da2253ad944b8107941
+platform/external/libmpeg2 39449cf74dd18e31e0afc4e76c5ef46590b86cbc
 platform/external/libmtp 7ed2065db3ab9851f47426f3a35ba7045ce528b2
-platform/external/libnetfilter_conntrack 2f769d2bbc75f28b9069cc595624acc3d463691a
-platform/external/libnfnetlink d3b7d1f63f19a832929e905d6c569c29d6ab5169
+platform/external/libnetfilter_conntrack 08a13c1ae6d6bf6014d4219a4a72645ec420ca67
+platform/external/libnfnetlink 789db9e676beb0ce29ca9771303db30f6292b205
 platform/external/libnl defabfc078080d60369d901d3c7662f05605cb29
-platform/external/libogg 6dba790f3372d03eee07c693789166ca9fa07b0a
-platform/external/libopus 1f2e74365574f4bb18f409cca0a72981338922af
+platform/external/libogg 6a48629b7c7fc90326b2f959789828007b3cc184
+platform/external/libopus bc4cca95eca2c88cdcb1809e2b14399656498601
 platform/external/libpcap aafa3da3838e0ca0c02617397fe738849690226a
 platform/external/libphonenumber 9313c2ce2fb61213e66adcf8ab4893a5d9c48da1
 platform/external/libpng ccb41b2cf94d4049785588591962d90d68e676b3
-platform/external/libunwind 5626fc08164caab49af8d133a3c3f81eb24c5ef7
+platform/external/libunwind adfc0a1a325ab560f74d404fd833e2661bef7a53
 platform/external/libunwind_llvm a756c603bfde97c21afa285b000145c3942142d8
 platform/external/libusb b81e632687e2380716ced43d28f7c95987959944
 platform/external/libusb-compat 759481ae400d02fe99488dcdcd653b4f8139a39c
 platform/external/libutf 853ef375ba2ce430f5b13b556812b2d83ccc82e1
 platform/external/libvncserver d099c925eed901cedcb5f1b9079af45a3ca0e6b8
 platform/external/libvorbis dee2e0a12822ec62c89c2d7582f1a7d32cd0875b
-platform/external/libvpx 109fe5ff49848a1c8c2f5fb7d1f56a49cd7e6754
+platform/external/libvpx 491c00eaae0cb9f5dce98a427f14f79617fdaee7
 platform/external/libvterm 6d78f36633063dad0689ca42be1ad8d0313ebfab
-platform/external/libxml2 565542d1632ef64ca6fa615529d4745b2e293751
-platform/external/libyuv 6fa12cc8b781532a3abbba209a73f51a48f7fde8
+platform/external/libxml2 81abc1de298aa3656d333840e8af1682de2ea2dc
+platform/external/libyuv 7a6bee2e5623dcc471f49a283144fed44dfb3757
 platform/external/linux-kselftest 788076afadce853398c0b6787cf3c34bc73d747d
 platform/external/littlemock 105f5b4352a348a3628b081f4906f5dbb8c120f6
 platform/external/lld 26c9bb3b51a7ac4bc45f73d532a03cfd9982043a
 platform/external/llvm e0b553c6a8733b0569b9fa228f623da904ff649e
-platform/external/ltp 9aa319dc1ede42ba97c5118e86e254af3c9664ef
+platform/external/ltp 33449a40407077f490620cafb23dfb3739307170
 platform/external/lz4 171f60943c82aca0f67dcd672166d29f4b3a0359
-platform/external/lzma 462f68aa279e25fda265a87c6d3c4da3318314f8
+platform/external/lzma 46b54e959fbe772aa87e40e3805e4f118e7f1258
 platform/external/markdown 06a8f8b914d477183f68b84424bce8ff4dae7e84
 platform/external/mdnsresponder e8c578035302f59c4e09f7170e18302261bc9e63
 platform/external/mesa3d 586cfa78861e71160d5a3dbeaff09554829a1027
 platform/external/messageformat 9e1e4dddc8aa0cae8279281488f8a6bf4f453192
-platform/external/minijail 0b20877d6712e175c7bdd0943c0ffbfd99fc42b4
+platform/external/minijail c4992577c751e9150f01be2c6638943be9a8b585
 platform/external/mksh 693c2ea1e42d69d8df1829ff6c345a40c499e93d
 platform/external/mmc-utils 6de31b2b8a09108f9b91bc12bee2b792f783dc62
 platform/external/mockftpserver 777eb7d351810721b2416c4e48fe08e4ce0476f7
@@ -234,7 +235,7 @@
 platform/external/mp4parser 88bd0c6cfa7fcfbbebcc15c2c565f714cb36b065
 platform/external/mtpd dfc7f34c62ee40f5ce47e0942021f96f62f937f7
 platform/external/nanohttpd c6783c32331b3fe78ffd5077e7f180995d0e268e
-platform/external/nanopb-c b225eb267957f24ca2aa2469bc78d418b2e9b795
+platform/external/nanopb-c 4b114fa241df177ec7fc36132d3bec20726c4f5f
 platform/external/naver-fonts 91e6e9f94d1d769a8f742649674149ba98ce7d45
 platform/external/netcat b023a43765b15f0b0fd5b52b7d8021f515c59c23
 platform/external/netperf e100a0c4105b94f7044b243287a5da22f5e8e4e7
@@ -245,16 +246,16 @@
 platform/external/noto-fonts 60e126f1c096b20d4a3685e1de1147b6595e9012
 platform/external/oauth 49f3624a6d3307b640a012f15b94d04174473501
 platform/external/objenesis a3ef09de71261e043b85a748cc7d73359dd5e6fe
-platform/external/okhttp 1149fa6233442eb686d5e8a363e6cf37deb52ed9
+platform/external/okhttp b53397b37a05fd50529810c726e7214cdc5b191e
 platform/external/opencv 6acb1f4a6e68f80b1cb0182f3d334dd8607697b5
 platform/external/owasp/sanitizer bbfb25464ff30c5a62dce351d719a8c533afb2a3
 platform/external/parameter-framework e210979b2eb1410f80fb88a9a4c235ee0cd23d0c
-platform/external/pcre 9777d249c8e7c7a3a1bff520af28ae2db6c97867
-platform/external/pdfium 9cae1e50337014eb75c6b34e0d084308b9328c7f
+platform/external/pcre 97f96c13a5b0c22e9827279eb0dd38e9c889f244
+platform/external/pdfium e4e9d1b6b387072f9071f896993a9cfe5481ab4c
 platform/external/piex fd058750c2b588ee6944a1f922d5104096201f79
 platform/external/ppp 7e60466a0009f58aa09b60bf6dbb96cacd6cb829
 platform/external/proguard af893cdc1242e4cfbeeb10e2323f9a689a825177
-platform/external/protobuf 0536f43ba6b04df7c54a11820b206b6c91080e7e
+platform/external/protobuf 06884d010cc3abbd97861e696cae2c1736679168
 platform/external/regex-re2 79cce43a82abc1bc56c65de07a7df47d54e163a9
 platform/external/replicaisland 23e53aa67dc788cd2fe0598eaf7c9f20eb93c392
 platform/external/rmi4utils 40eb2d785d3e367c01fc2a3d53820550e7f66739
@@ -264,15 +265,15 @@
 platform/external/safe-iop cd76f998688d145235de78ecd5b340d0eac9239d
 platform/external/scrypt 99611dfb9ac7513ab39f569744439ee6c7568eba
 platform/external/seccomp-tests e602290af558cee366ec98e366e0e8460c39534e
-platform/external/selinux 2cc30d6029d52690bf01b2dc4a04d8af3a49261f
+platform/external/selinux d6ed837a4e4009e153382f1ff2495a13fc24856b
 platform/external/sfntly 9636835bc0ce3752a3fec8199d432035ad1e6290
 platform/external/shflags c4876e01829b8cf110ee33267bb1bad1f8ebb51d
-platform/external/skia 0ee70a42d89594a0624fcd503769a317e1ed7ade
-platform/external/sl4a fe90a3df2bf1757a44143d4c3f0a966021567b03
+platform/external/skia 740dcbc14f4bb497082890c1c4a85c0a993120a9
+platform/external/sl4a 218c97224d681dae57bdfd2dce60a285d81a4140
 platform/external/slf4j b4eb5f69f088f53ede0b7ee4a1a3bf2c3ff58418
-platform/external/smali bda1c3d6e4fcb57ee1b7f26cced4bf0655d5531d
+platform/external/smali 78cf98bb8c439f99f06f7b609c5c533a9d41de68
 platform/external/snakeyaml 03d1dd1553534e717fdff5f7bed00b67dbb23431
-platform/external/sonic 0227d834966b304525869d88fd20b2ac835df878
+platform/external/sonic 1163465de6c4b6c1816de74db60b28769cf5ac96
 platform/external/sonivox 95ad2973de15846e1f67c5c5c30eae877afb2ca4
 platform/external/speex c704149eb9fd927da7b82520f69a8545e4f7604a
 platform/external/spirv-llvm 4695d7739b29602883cc55f6a4f6ebd69f663903
@@ -285,44 +286,44 @@
 platform/external/testng 8f2e8231852f454b5903cf886be55e9f647cdd76
 platform/external/timezonepicker-support 99e91a76fd74bad10266623d67cdb98d011f709e
 platform/external/tinyalsa 03f3f4ab42a8fd290bb2b38e97d2f2f67b0fc9ad
-platform/external/tinycompress 68460e65505443f29147c16ec506af69ae8fb75e
-platform/external/tinyxml b162e864bd02bb79423b4ef01d0e5e5840aa416b
+platform/external/tinycompress 8fbcb03b59600de71b3c4f191e11819217a68851
+platform/external/tinyxml c7cb92cfeeefee847babc537f57ebb87f71332b6
 platform/external/tinyxml2 0f9c4d987d9f3e191ba40eec13f55a4b80815625
 platform/external/toolchain-utils 7091edfaa0ec531905b7d914e9307cd74caf02ea
-platform/external/toybox 64279d40426b9a6c27f4eb1b83e843aad16b497c
-platform/external/tpm2 29e56ce56bb9bc894e6111f58af97178d7eacd5e
-platform/external/tremolo 171b6d34276a69495030a91456563c0aaec0cb3d
+platform/external/toybox 77666693a18a788c51b3af94e0f30fe48aff48ee
+platform/external/tpm2 44544398445dd5f5adbe13c5b551eb087781da64
+platform/external/tremolo 25ee83986e9140518904d54d136167d5d9e5db26
 platform/external/unicode 680f240bda39c798480bef3bb36c671af1f575c1
 platform/external/universal-tween-engine 5a8be7ee6337367a1dcf11bdad865e7917519e46
-platform/external/v8 6515ea0f649745f47edc3133172cc9d3f0b81350
+platform/external/v8 236342d4b8ef8ee3141f5f846984ff20700b38bb
 platform/external/valgrind c9fc475448cb7d2cd023ed03ff4038dad1ff73e8
 platform/external/vboot_reference e74e24bcad6e56abb60f3e4847478c3ffba12a14
 platform/external/vixl 2da09a48dc4d5a3c585f897f256c2c6c5fa4eb5a
 platform/external/vogar baf4ec0f47d639129edfea1f544e775200012458
 platform/external/volley 3a1232594eb627e9e59b22406816648a55a3f2ae
 platform/external/vulkan-validation-layers 4c40acb97e6df4a5895877f81cde4e9c0704a95f
-platform/external/webp c09614dd8c66c3e27112f32e5f7a6ef14b262559
-platform/external/webrtc 6d99081fdddc3be9d473afe799179cf06a208258
+platform/external/webp 624569b3ad72e2285ecdec7464389527619ae62f
+platform/external/webrtc 0d85cc3c3cfefb17deac1924412203b38b790aed
 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 bac3bcd13c6440d03227a2a7175c47671e241a28
+platform/external/zlib 8f227ebc3d47c648eec4c773040ce058bbea8bd4
 platform/external/zopfli b36f966df9e7767a6b0aeb00fea29af0c57c89be
 platform/external/zxing fedf8f2d8099bf7bb85dc3db8699343d56617deb
-platform/frameworks/av 32553d9b08f8a56b4da75d67cc3b1ef50895fb4e
-platform/frameworks/base 4c7a999d79eabbd8d0fea831ab3ae8162bd29a7e
+platform/frameworks/av 2cb9b1b621ae744bf05384087b3ae1719968f168
+platform/frameworks/base d308803b82f5317eebafdf3a97baff3bcd460e60
 platform/frameworks/compile/libbcc c29bfc44f2d650b9c1bcfcecc0b6e4537e541944
 platform/frameworks/compile/mclinker 4fefd441bc867e8fdb92e0d696fa73f056bdbc25
-platform/frameworks/compile/slang 52b2948023a90b45df2abba79efed4218d3f720b
+platform/frameworks/compile/slang cccde6e1484fdf840c38cd04a893d2e13460ec0d
 platform/frameworks/data-binding 15281a01df0a5892d818080f1df669bdb8a319f7
 platform/frameworks/ex 552350d39a06d2a7d3fa3ea0b051c194bd9e88a0
-platform/frameworks/hardware/interfaces 62ec662ed0bc838881bae047abf1e7e495f650c5
-platform/frameworks/minikin d9110339954abe465d84be88a0ddef094dc1f789
+platform/frameworks/hardware/interfaces 1e562633c164503e2cce456dbc8b5d08f6753839
+platform/frameworks/minikin 84bd31a7020cf137a123731649996116e498a1cd
 platform/frameworks/ml 3d53a93c79beb608ca52f7e1ffbf2fc7d9c3722f
-platform/frameworks/multidex 668b6077de19c7254f4e72dfbd8a27c00a7e04a6
-platform/frameworks/native e1b504457d6fa2d531e7398f00ff93f05d21037e
+platform/frameworks/multidex 49f3d944cf2413562ae5032b8dfc2c39955c6bf7
+platform/frameworks/native 4a9b7174ca37e95e6dd33594ca30c774c8866fa5
 platform/frameworks/opt/bitmap a0d4e3108663202564a6833b76770075b8e5b767
 platform/frameworks/opt/bluetooth 971623a90fae3dd4e2f5d1d48c8f8ca50068344e
 platform/frameworks/opt/calendar 886d7d1277b82347c30ec5d79ba1576680947bb8
@@ -333,18 +334,18 @@
 platform/frameworks/opt/inputconnectioncommon 3baece9b20fa480da46d860acd7320fd9eee3386
 platform/frameworks/opt/inputmethodcommon 990fcb1a6dbb5d1204cc8ec86e4bc3f691f4aeeb
 platform/frameworks/opt/net/ethernet fbba1273031483f336fa6f7127114bbff5b88e77
-platform/frameworks/opt/net/ims 1d508fa7f9d259ac6763e975e460944242578350
+platform/frameworks/opt/net/ims b10b61e10955b1ceee6193acbc543e4d62ae0fd6
 platform/frameworks/opt/net/voip 2e09c0ba8a11ee629a85582413598c60cca09e8e
-platform/frameworks/opt/net/wifi 4753dd1d9e157bfcc42e1a2fecede38c23d427b2
+platform/frameworks/opt/net/wifi 33d887d7bd60284426008b359e635358352e5342
 platform/frameworks/opt/photoviewer fa19a401cc279cb95b071dbed650fa0285a2fdcb
 platform/frameworks/opt/setupwizard 2cce48fde424bd078f024d5ddc7c564ca1161e2f
-platform/frameworks/opt/telephony ad9c0373abb323d077da71257878e8fc29d567d1
+platform/frameworks/opt/telephony 5656e3a1c593f0acd287a410817130479fd04281
 platform/frameworks/opt/timezonepicker e344fd847c154f2d0680bf1089390326d634d847
 platform/frameworks/opt/vcard 15d297d8ac4664e4a491448d9c15158ee51714f9
-platform/frameworks/rs 1bc0fee3ba535b5268c061381ad0da51734fedd1
+platform/frameworks/rs 5cfec00dd293c8e0203c9854fbd7f40be3951b0f
 platform/frameworks/support 7dbbadd44f1d8b14990cf413bace64e1535a2564
 platform/frameworks/webview 23064ee133778d05ef3ffbaf7de4c4962f9b0c65
-platform/frameworks/wilhelm 6e595bb525fe55ed0968cee6f8dbbe365a484db7
+platform/frameworks/wilhelm c781d43d8a90c802f4bb157a53c30c6bc73f7c2b
 platform/hardware/akm 7889f98849ad3913586904e00d91b32cc0ceb75b
 platform/hardware/broadcom/libbt 50330f8ce5e7edd2b15f9a3415a71db3d83d584d
 platform/hardware/broadcom/wlan 052255ec30cf33e27bb0406cd5b3f9998325d6e4
@@ -363,10 +364,10 @@
 platform/hardware/intel/img/psb_headers aed9716b5467e75728f761ac75a4ba5ca3c51ea0
 platform/hardware/intel/img/psb_video 7407927b0eda431b7d817cb9d78189f335f509b1
 platform/hardware/intel/sensors 68dc9e70b79dacddc4e0bf00af0de7f764b04eed
-platform/hardware/interfaces b422f16e233938513966f912e44ecf646eedfe16
+platform/hardware/interfaces 8b4c1e458997ed8c8b9bc97e4af4d4c3675c7c80
 platform/hardware/invensense 11e5ff75af866f91622b6008fa13db1c3685ae69
-platform/hardware/libhardware d839667cd00b277b2631276ef745d883db58bb3c
-platform/hardware/libhardware_legacy 9845354ef785a88060bbeabd5db7f7b4b1c9171f
+platform/hardware/libhardware 87c3a2576793e5a7bb3669f202eae3440e5121f6
+platform/hardware/libhardware_legacy dd67435bacb5d796c1d5c6f35c32455996549d3a
 platform/hardware/marvell/bt 3f33d194e8300816b94d1d7b68b1d48c8f903251
 platform/hardware/qcom/audio ba9bce36176b05695bd042acadc4a254ab911872
 platform/hardware/qcom/bootctrl 6007fe6af3f7eb0c6b5fc3cab3c0f0cf5a7b50fe
@@ -384,13 +385,13 @@
 platform/hardware/qcom/msm8x27 8ff5c0057cbdecfa09410c1710ba043e191a2862
 platform/hardware/qcom/msm8x84 582b414269d8472d17eef65d8a8965aa8105042f
 platform/hardware/qcom/power 3a098ee1f89c398b9d6e7b5dfae9c694994f8bc4
-platform/hardware/qcom/wlan 7bd86be1abdb6df254f174ab63c28730e6835741
-platform/hardware/ril 0ce4693d8f5766741faaa42f24e94808ff062bb9
-platform/libcore 37030d1489bc3a76c835617a8a8059e0b47dea71
+platform/hardware/qcom/wlan 35072f35547089ce98d1706fc06940654372b008
+platform/hardware/ril cea643260186fd22e9b803bba9079fe473ac6861
+platform/libcore 356287514869ba0e7211513c4356fac6a2067a83
 platform/libnativehelper d0865381b9f1989fc059bb8ae4c31519b56b1b5a
-platform/manifest 6d0e01af67b684548d5c4b4d3e90fa70352bea37
+platform/manifest b5f733a60ce39e789d8c07cac72d12ca0f82f925
 platform/packages/apps/BasicSmsReceiver 0aa0611f9c6775575da56a1746fef1cf68267b0e
-platform/packages/apps/Bluetooth 5584fba25df20743fbab9a821fc1a10e32c8a57e
+platform/packages/apps/Bluetooth abc3d7eb7e5da788123710b0cd8aa13f54ec845f
 platform/packages/apps/Browser2 decae510679c74796b1a9f7b0cacd8504fcc53f7
 platform/packages/apps/Calculator e1bda28f1545111ba7734577f23e194bf3db3f5f
 platform/packages/apps/Calendar 2bbf7b8414ebcff2207b08224d8913241a766a5a
@@ -411,13 +412,13 @@
 platform/packages/apps/HTMLViewer f19c4a10890cafb17ceaf68cda835dc24aad455c
 platform/packages/apps/KeyChain 64b7df195d2bfdcc41579e9ef5f3b49afde18116
 platform/packages/apps/Launcher2 44c1afdc7fe9f4420933ad0c9fd824931179ca27
-platform/packages/apps/Launcher3 ad72bf8b500498e1ddb4b2754c7557d606214605
+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/MusicFX 035fa0123d87b48554cbd294ee9681b25eb7049b
-platform/packages/apps/Nfc dfa4469000747644aa25c64a790419ebf7b140a2
+platform/packages/apps/Nfc 5d0528c7ec88bdd06e8d747b39827c8f728e9c8a
 platform/packages/apps/OneTimeInitializer 01e429c08e51291315890de9677151a7e0b6ad35
 platform/packages/apps/PackageInstaller c5976c5927142a9f7eeb260a982a45fbcd1c665e
 platform/packages/apps/Phone 79731f02b7009206a01182d2cca15dfc8491da09
@@ -427,7 +428,7 @@
 platform/packages/apps/QuickSearchBox 9fd59c0b83d97b90fb5bc098155a5a2803a42c5e
 platform/packages/apps/RetailDemo 66244a5c528afb29b1a88aa788770063b91c89b2
 platform/packages/apps/SafetyRegulatoryInfo 1e01c3e1bcc0ed83b3676e1d5c0b75d5ed873391
-platform/packages/apps/Settings 31ec85a913beed0ee0ac6293a48ba5e0574714f0
+platform/packages/apps/Settings 79694e79d1368f763d2179239fa8ccf3fd13a507
 platform/packages/apps/SoundRecorder 5f67a8eaea9379d7fce53db77e9ed7b47e49f1e1
 platform/packages/apps/SpareParts 4db997871e3f4c3f84660815096e5276b47c5c91
 platform/packages/apps/SpeechRecorder 51cc8462c082a26810f5d7c5a2648232a77e795c
@@ -436,8 +437,8 @@
 platform/packages/apps/TV 430c2be3b91676005fdd243553e38acff8dfc3de
 platform/packages/apps/Tag 60102ca02f1a93af59cc479f2a80a40a382d668c
 platform/packages/apps/Terminal 2c4b6548ff31f403fb0af8be422331398aff3f13
-platform/packages/apps/Test/connectivity 0691327dbbb083f36b1a921ffcd785a5432515c3
-platform/packages/apps/TvSettings 4f4356e8c7080f2db8aa35fb1b818356c4013b58
+platform/packages/apps/Test/connectivity f96115d1b531aaec264bd755fe142b910dfe08a1
+platform/packages/apps/TvSettings 731ad9852f5b7c897f419a5eceeb33fa9edd55fd
 platform/packages/apps/UnifiedEmail 5c504aac78c847e4c4dd9521c3bd68153eebf953
 platform/packages/apps/WallpaperPicker 969934f908ff2ddda77bddbb80f206daf6a24281
 platform/packages/experimental e24ee92653e28ddf0020ffb9e5ddc99931117674
@@ -452,7 +453,7 @@
 platform/packages/providers/DownloadProvider a4f49c59dc16ce9ed42ba4c35436dc31c9af0c45
 platform/packages/providers/MediaProvider a01878b2d9cfd6f953948a94b9d5efab4f9e5494
 platform/packages/providers/PartnerBookmarksProvider 5dffc10ad0c9be63e7499378a82db55165e6f046
-platform/packages/providers/TelephonyProvider c1d3c501c1854025f7bce81dd9bc71e627cf00fa
+platform/packages/providers/TelephonyProvider 8af31df84b8743a99cde7885cb664a78829517e0
 platform/packages/providers/TvProvider 374df0a9f8c1b92b1bdb7572f30543188c8c7a1c
 platform/packages/providers/UserDictionaryProvider 12907529afb603d10bc133e808728cef12e5dad6
 platform/packages/screensavers/Basic e72ef139782ca896dced7524abe7cfcc9ed35db1
@@ -462,18 +463,18 @@
 platform/packages/services/Car f9cfa43094ac3111c92283a0ce9db8e377ac47ab
 platform/packages/services/Mms 96388dd7a3717ae1ee539c8b057089ffb163e0c6
 platform/packages/services/NetworkRecommendation 98734c16a4873df7cd6214ae5b7faca1fd6f4201
-platform/packages/services/Telecomm 91d5655e891dc45fa781d4dac1c6867d27481471
-platform/packages/services/Telephony 1329e4fb6bf52d5a7e372bee30f07ea7e0833dd4
+platform/packages/services/Telecomm a84782331e231844ccfb610b5136057cc77bab2b
+platform/packages/services/Telephony eaf215348492d935e93516a4eed3fafde93ade9d
 platform/packages/wallpapers/LivePicker 313c31a2d7ff12d4f78d11458d8b268a5fe97d9c
 platform/pdk 708589163e790eb3a7fec09f4832a0f78999bdf3
 platform/platform_testing f59383c56ad8ec4ef0994233777d1c2a02df7d14
 platform/prebuilts/abi-dumps/ndk 667013f5822a0c450634437973b88f795dc838be
 platform/prebuilts/abi-dumps/vndk 83a0ec4746ab945004a9e71f2253d5fed8a4cc75
-platform/prebuilts/android-emulator bc2e710df2c103e086dcf09c07e34d5b88658b7a
+platform/prebuilts/android-emulator 89fbf2893b590cf224ebe2db9ab7e363c64fd477
 platform/prebuilts/build-tools eb2e878dfa5c5cb6d6fed87c1490cfea2c1edb4f
 platform/prebuilts/checkstyle a4b8a4a6bb3686daa8577bfee4e0ca6c79914d7d
-platform/prebuilts/clang/host/darwin-x86 f293128462c3e09c30cc88a4c625a4cf2b317112
-platform/prebuilts/clang/host/linux-x86 fb559ed60ff43fcbcc928288f7824c3f56ab8df1
+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
@@ -501,46 +502,46 @@
 platform/prebuilts/ndk 983ca04ca92f67e9ae871e3224d21399ce2f3936
 platform/prebuilts/python/darwin-x86/2.7.5 0c5958b1636c47ed7c284f859c8e805fd06a0e63
 platform/prebuilts/python/linux-x86/2.7.5 3229c5a24529bad2a85691f17d9e75a300af5085
-platform/prebuilts/qemu-kernel 26e23dfe25b167a6c3bd0275cd82e1f388cec0ca
+platform/prebuilts/qemu-kernel f34d9da39f5b53d294a524d1de1e88759e21ca50
 platform/prebuilts/sdk 6f6b5641b531f18c8e8d314b4b0560370ffbf1ab
 platform/prebuilts/tools 817901bac6e6f7690151d2b30ced91973637a488
 platform/sdk 1da8730be2203d266be81f9a6e0446f9f8da4717
-platform/system/bt 779b4fd786c571cb8013f4d94ddacfe7116fb05f
+platform/system/bt 36d19de1aa2f2dcdbfe609fa8d1e542a3e7547fc
 platform/system/ca-certificates e312bd5044fc07e85b8b0c21b8f21a9329ce9636
-platform/system/connectivity/wificond 392b5d9e18254a2a87b5f9dd5e25929264545d91
+platform/system/connectivity/wificond e2cfd0257ca330bea72b56387dc7197363be7b32
 platform/system/connectivity/wifilogd 0568dbda87117efcb2a739ff49cdd1de3ed7f886
-platform/system/core 4c1560ce5c096f9a084aebb0754dd53f2b1e2586
-platform/system/extras e3d4de1a615f5ceeebcb2a8c1e563c30cdeefc45
+platform/system/core 1445c4b9321b288710ca9cbe0b14473dcb4ab8db
+platform/system/extras f942f9570e526d6853fe0ab1af9b78dd196ea585
 platform/system/gatekeeper 7f5c6593f298ebbef9d2a669118968ea3873aa9d
-platform/system/hardware/interfaces 4dc19f7050814d0e73885795a069182ea3b49cc4
-platform/system/hwservicemanager 79a9e3263f171a220ce4e32d89e5df10b1ab6499
-platform/system/keymaster 18d5ae3233b8e11adf2b52a086f6e4999c5733df
-platform/system/libfmq d42f9ee50b76e26051ac662bd703749a49d9d93b
-platform/system/libhidl 686f611ebbfe93a85a77cbfa016c13df2b5e4eb4
-platform/system/libhwbinder c763bcbdb7bf07436e3a1649ed41e4ca430a15bf
-platform/system/libufdt 094c7b47091908698af44073ac5aaa7e89ae6027
-platform/system/libvintf b2924cbe95b48a5374256731123d5905bdb70a9f
-platform/system/media 9b88fb1019ac89e2160eaf423c3ec21348c480af
-platform/system/netd 63f625f441bf6799af3dfadc5792aa8b25f36a2b
-platform/system/nfc 7d88ec24d04e89ee36b49829d43ed8dc730dcf58
-platform/system/nvram 5d89b4e421cd44e7b6c44cff229eea73b96b7728
+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 5684f61fe2a92cfa2c1250481201d9970d1e0f19
-platform/system/tools/aidl 91adb8bc5a604b66bdfb379974d62f533f352ed1
-platform/system/tools/hidl e0586b0e450deaf81cc732896bced28c63de714e
+platform/system/sepolicy bf030965f9545b381fdec32eae553c09ad7ca480
+platform/system/tools/aidl d7f900170dac3d3df60f6f7cbac14bcd4173b139
+platform/system/tools/hidl 31c55de03e64126ebf2a336da5534c9ec18cbf5e
 platform/system/tpm dd2735f149fe58555efa004e330a49ee71954d3f
 platform/system/update_engine 04c2305d79b65a3013e3d5b329f1fcc128874479
-platform/system/vold 399bd0866c23efa95b10af28b6301f34bb32c806
-platform/test/vts 22bb863fe69135680333a9c781fafe5896d77b68
-platform/test/vts-testcase/fuzz 8b5185bd0e261e622324ea1a82248a247424536e
-platform/test/vts-testcase/hal 1a5a3776c064aa5ed60056bdcf7b7aa2f65b5f48
-platform/test/vts-testcase/hal-trace 8b8325bc7106c8dba872157bcfb86c7cf518dd17
-platform/test/vts-testcase/kernel 173e2b2f60cacebbcedfd52d5606f023c86a8d69
-platform/test/vts-testcase/performance 6c4aa78a7f7b0c0ddde788ba055a4b2fde9b49ea
-platform/test/vts-testcase/security bfa19fbe426d9f099516b8824317e61233aa7aa2
-platform/test/vts-testcase/vndk 6b7d61df78f79eb510b72a264fa1c477179de5b9
+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/tools/adt/idea d3106c42c5466362da9bfb9f7453e5d60af83579
-platform/tools/apksig 10c9d71d48ff2db01a2d1f157651036494f569f7
+platform/tools/apksig 3222d6c8a40307c4912ab80d666dcb6846840dea
 platform/tools/base 908b391a9c006af569dfaff08b37f8fdd6c4da89
 platform/tools/build 69c4b95102b4b9862bfba68b3eaf5b7537a705ee
 platform/tools/external/fat32lib 3880776e41ff7def06e351720f2d162f88b58a03
@@ -551,7 +552,7 @@
 platform/tools/repohooks 4c4e78c4d9b52a1a5c5ed11c39ab36d258037a2c
 platform/tools/studio/cloud 58f06e77e051fff3903adabca7acdaa9dd12ec2d
 platform/tools/swt 8996e71047a2bd11efee46ef14e02435ab5fa07a
-platform/tools/test/connectivity c18d01db9ae402b057df76b0fcdeb8629f7b9cd0
-platform/tools/tradefederation 499cb17a252d2344539c915592a82ace4ca4da1d
-platform/tools/tradefederation/contrib 44e6254e5f5437324103fb2cad2b1671ff20bafc
+platform/tools/test/connectivity f43366e288f03e501a45cd96a9fcf972d75f16b1
+platform/tools/tradefederation 5886802f8050ecf0073dce1b8c2412dd331d250d
+platform/tools/tradefederation/contrib 0b0e7d254039081f40461b4d8a4ddb0910c3be59
 toolchain/binutils c80811581709b9346364e3229b888f9ad830cdf5
diff --git a/simpleperf_report_lib.py b/simpleperf_report_lib.py
index 27ce08a..de90466 100644
--- a/simpleperf_report_lib.py
+++ b/simpleperf_report_lib.py
@@ -167,14 +167,9 @@
         self.convert_to_str = (sys.version_info >= (3, 0))
 
     def _load_dependent_lib(self):
-        # As the windows dll is built with mingw we need to also find "libwinpthread-1.dll".
-        # Load it before libsimpleperf_report.dll if it does exist in the same folder as this script.
+        # As the windows dll is built with mingw we need to load "libwinpthread-1.dll".
         if is_windows():
-            libwinpthread_path = os.path.join(get_script_dir(), "libwinpthread-1.dll")
-            if os.path.exists(libwinpthread_path):
-                self._libwinpthread = ct.CDLL(libwinpthread_path)
-            else:
-                log_fatal('%s is missing' % libwinpthread_path)
+            self._libwinpthread = ct.CDLL(get_host_binary_path('libwinpthread-1.dll'))
 
     def Close(self):
         if self._instance is None:
diff --git a/update.py b/update.py
index 69e24f3..a5e14d6 100755
--- a/update.py
+++ b/update.py
@@ -46,7 +46,8 @@
     InstallEntry('sdk_arm64-sdk', 'simpleperf_host32', 'linux/x86/simpleperf', True),
     InstallEntry('sdk_mac', 'simpleperf_host', 'darwin/x86_64/simpleperf'),
     InstallEntry('sdk_mac', 'simpleperf_host32', 'darwin/x86/simpleperf'),
-    InstallEntry('sdk', 'simpleperf.exe', 'windows/x86_64/simpleperf.exe', True),
+    # simpleperf.exe on x86_64 windows doesn't work, use simpleperf32.exe instead.
+    InstallEntry('sdk', 'simpleperf32.exe', 'windows/x86_64/simpleperf.exe', True),
     InstallEntry('sdk', 'simpleperf32.exe', 'windows/x86/simpleperf.exe', True),
 
     # libsimpleperf_report.so on host
@@ -56,6 +57,12 @@
     InstallEntry('sdk_mac', 'libsimpleperf_report32.so', 'darwin/x86/libsimpleperf_report.dylib'),
     InstallEntry('sdk', 'libsimpleperf_report.dll', 'windows/x86_64/libsimpleperf_report.dll', True),
     InstallEntry('sdk', 'libsimpleperf_report32.dll', 'windows/x86/libsimpleperf_report.dll', True),
+
+    # libwinpthread-1.dll on windows host
+    InstallEntry('local:../../prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/bin/libwinpthread-1.dll',
+                 'libwinpthread-1.dll', 'windows/x86_64/libwinpthread-1.dll', False),
+    InstallEntry('local:../../prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8/x86_64-w64-mingw32/lib32/libwinpthread-1.dll',
+                 'libwinpthread-1_32.dll', 'windows/x86/libwinpthread-1.dll', False)
 ]
 
 script_install_entry = InstallEntry('sdk_arm64-sdk', 'simpleperf_script.zip', 'simpleperf_script.zip')
@@ -77,6 +84,9 @@
     """Fetches and artifact from the build server."""
     logger().info('Fetching %s from %s %s (artifacts matching %s)', build,
                   target, branch, pattern)
+    if target.startswith('local:'):
+        shutil.copyfile(target[6:], pattern)
+        return
     fetch_artifact_path = '/google/data/ro/projects/android/fetch_artifact'
     cmd = [fetch_artifact_path, '--branch', branch, '--target', target,
            '--bid', build, pattern]
diff --git a/utils.py b/utils.py
index ab76c3f..d5515ba 100644
--- a/utils.py
+++ b/utils.py
@@ -65,6 +65,8 @@
     if is_windows():
         if binary_name.endswith('.so'):
             binary_name = binary_name[0:-3] + '.dll'
+        elif binary_name.find('.') == -1:
+            binary_name += '.exe'
         dir = os.path.join(dir, 'windows')
     elif sys.platform == 'darwin': # OSX
         if binary_name.endswith('.so'):