summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYabin Cui <yabinc@google.com>2023-03-23 10:25:24 -0700
committerYabin Cui <yabinc@google.com>2023-03-23 14:34:17 -0700
commit372f7a2939c2c609f5117de70ec45fedba1f7017 (patch)
tree5ac3303a82e35b03b8fb1ceef8fbeb06685992db
parent6d625d0eb9c0602532a52e8eb87363f2ea6da73e (diff)
downloadsimpleperf-372f7a2939c2c609f5117de70ec45fedba1f7017.tar.gz
Taken from branch aosp-simpleperf-release. Bug: 274618295 Test: run test.py for Android N-U on both devices and emulators Test: run test.py from linux/darwin/windows. Change-Id: I62a8c9465e7a0bbadd88b515c80ee2ca5034e476
-rw-r--r--ChangeLog22
-rwxr-xr-xbin/android/arm/simpleperfbin2824096 -> 2884216 bytes
-rwxr-xr-xbin/android/arm64/simpleperfbin3853120 -> 4043608 bytes
-rwxr-xr-xbin/android/x86/simpleperfbin4400836 -> 4500836 bytes
-rwxr-xr-xbin/android/x86_64/simpleperfbin4260448 -> 4330328 bytes
-rwxr-xr-xbin/darwin/x86_64/libsimpleperf_report.dylibbin14035376 -> 12874544 bytes
-rwxr-xr-xbin/darwin/x86_64/simpleperfbin13976320 -> 12814816 bytes
-rwxr-xr-xbin/linux/x86_64/libsimpleperf_report.sobin7175616 -> 7073984 bytes
-rwxr-xr-xbin/linux/x86_64/simpleperfbin7148320 -> 7051752 bytes
-rwxr-xr-xbin/windows/x86_64/libsimpleperf_report.dllbin5577216 -> 5368320 bytes
-rwxr-xr-xbin/windows/x86_64/simpleperf.exebin4627968 -> 4611072 bytes
-rwxr-xr-xbinary_cache_builder.py389
-rw-r--r--doc/README.md181
-rw-r--r--doc/android_application_profiling.md2
-rw-r--r--doc/executable_commands_reference.md28
-rwxr-xr-xgecko_profile_generator.py111
-rwxr-xr-xpprof_proto_generator.py2
-rw-r--r--repo.prop1992
-rwxr-xr-xreport_sample.py6
-rw-r--r--simpleperf_report_lib.py16
-rw-r--r--simpleperf_utils.py10
-rw-r--r--test/app_test.py15
-rw-r--r--test/binary_cache_builder_test.py65
-rw-r--r--test/cpp_app_test.py16
-rwxr-xr-xtest/do_test.py16
-rw-r--r--test/gecko_profile_generator_test.py25
-rw-r--r--test/java_app_test.py71
-rw-r--r--test/kotlin_app_test.py59
-rw-r--r--test/pprof_proto_generator_test.py2
-rw-r--r--test/report_html_test.py24
-rw-r--r--test/report_lib_test.py23
-rw-r--r--test/report_sample_test.py28
-rw-r--r--test/test_utils.py4
-rw-r--r--test/testdata/README.md26
-rw-r--r--test/testdata/SimpleperfExampleCpp/app/build.gradle6
-rwxr-xr-xtest/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.sobin1400312 -> 1915368 bytes
-rwxr-xr-xtest/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.sobin968796 -> 1139628 bytes
-rwxr-xr-xtest/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86/libnative-lib.sobin1267432 -> 1542220 bytes
-rwxr-xr-xtest/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86_64/libnative-lib.sobin1456912 -> 1790712 bytes
-rw-r--r--test/testdata/SimpleperfExampleCpp/app/build/outputs/apk/debug/app-debug.apkbin3948626 -> 4509156 bytes
-rw-r--r--test/testdata/SimpleperfExampleCpp/app/release/app-release.apkbin0 -> 3651017 bytes
-rw-r--r--test/testdata/SimpleperfExampleCpp/app/src/main/AndroidManifest.xml4
-rw-r--r--test/testdata/SimpleperfExampleCpp/app/src/main/cpp/CMakeLists.txt2
-rw-r--r--test/testdata/SimpleperfExampleCpp/build.gradle26
-rw-r--r--test/testdata/SimpleperfExampleCpp/gradle/wrapper/gradle-wrapper.properties2
-rw-r--r--test/testdata/SimpleperfExampleCpp/settings.gradle14
-rw-r--r--test/testdata/SimpleperfExampleJava/app/build.gradle39
-rw-r--r--test/testdata/SimpleperfExampleJava/app/build/outputs/apk/debug/app-debug.apkbin0 -> 3761762 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/proguard-rules.pro (renamed from test/testdata/SimpleperfExamplePureJava/app/proguard-rules.pro)10
-rw-r--r--test/testdata/SimpleperfExampleJava/app/release/app-release.apkbin0 -> 3160868 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/release/output-metadata.json20
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/androidTest/java/simpleperf/example/java/ExampleInstrumentedTest.java26
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/AndroidManifest.xml36
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MainActivity.java (renamed from test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MainActivity.java)8
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MultiProcessActivity.java (renamed from test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MultiProcessActivity.java)11
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MultiProcessService.java (renamed from test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MultiProcessService.java)5
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/SleepActivity.java (renamed from test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/SleepActivity.java)8
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/drawable-v24/ic_launcher_foreground.xml30
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/drawable/ic_launcher_background.xml170
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_main.xml (renamed from test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/layout/activity_main.xml)12
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_multi_process.xml (renamed from test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_multi_process.xml)12
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_sleep.xml (renamed from test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_sleep.xml)12
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml5
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml5
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher.webpbin0 -> 1404 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.webpbin0 -> 2898 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher.webpbin0 -> 982 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.webpbin0 -> 1772 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher.webpbin0 -> 1900 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webpbin0 -> 3918 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.webpbin0 -> 2884 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webpbin0 -> 5914 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webpbin0 -> 3844 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webpbin0 -> 7778 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/values-night/themes.xml16
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/values/colors.xml10
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/values/strings.xml3
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/values/themes.xml16
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/xml/backup_rules.xml13
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/main/res/xml/data_extraction_rules.xml19
-rw-r--r--test/testdata/SimpleperfExampleJava/app/src/test/java/simpleperf/example/java/ExampleUnitTest.java (renamed from test/testdata/SimpleperfExamplePureJava/app/src/test/java/com/example/simpleperf/simpleperfexamplepurejava/ExampleUnitTest.java)4
-rw-r--r--test/testdata/SimpleperfExampleJava/build.gradle5
-rw-r--r--test/testdata/SimpleperfExampleJava/gradle.properties (renamed from test/testdata/SimpleperfExampleOfKotlin/gradle.properties)14
-rw-r--r--test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.jarbin0 -> 59203 bytes
-rw-r--r--test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.properties (renamed from test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.properties)6
-rwxr-xr-xtest/testdata/SimpleperfExampleJava/gradlew (renamed from test/testdata/SimpleperfExampleOfKotlin/gradlew)111
-rw-r--r--test/testdata/SimpleperfExampleJava/gradlew.bat (renamed from test/testdata/SimpleperfExamplePureJava/gradlew.bat)53
-rw-r--r--test/testdata/SimpleperfExampleJava/settings.gradle16
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/build.gradle44
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/build/outputs/apk/debug/app-debug.apkbin0 -> 4565009 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/proguard-rules.pro (renamed from test/testdata/SimpleperfExampleOfKotlin/app/proguard-rules.pro)10
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/release/app-release.apkbin0 -> 3771798 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/release/output-metadata.json20
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/androidTest/java/simpleperf/example/kotlin/ExampleInstrumentedTest.kt (renamed from test/testdata/SimpleperfExampleOfKotlin/app/src/androidTest/java/com/example/simpleperf/simpleperfexampleofkotlin/ExampleInstrumentedTest.kt)12
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/AndroidManifest.xml31
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/java/simpleperf/example/kotlin/MainActivity.kt (renamed from test/testdata/SimpleperfExampleOfKotlin/app/src/main/java/com/example/simpleperf/simpleperfexampleofkotlin/MainActivity.kt)7
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/java/simpleperf/example/kotlin/SleepActivity.kt (renamed from test/testdata/SimpleperfExampleOfKotlin/app/src/main/java/com/example/simpleperf/simpleperfexampleofkotlin/SleepActivity.kt)9
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable-v24/ic_launcher_foreground.xml30
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable/ic_launcher_background.xml170
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/layout/activity_main.xml (renamed from test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_main.xml)12
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/layout/activity_sleep.xml18
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml5
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml5
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.webpbin0 -> 1404 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.webpbin0 -> 2898 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.webpbin0 -> 982 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.webpbin0 -> 1772 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.webpbin0 -> 1900 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webpbin0 -> 3918 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.webpbin0 -> 2884 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webpbin0 -> 5914 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webpbin0 -> 3844 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webpbin0 -> 7778 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/values-night/themes.xml16
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/colors.xml10
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/strings.xml3
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/themes.xml16
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/backup_rules.xml13
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/data_extraction_rules.xml19
-rw-r--r--test/testdata/SimpleperfExampleKotlin/app/src/test/java/simpleperf/example/kotlin/ExampleUnitTest.kt (renamed from test/testdata/SimpleperfExampleOfKotlin/app/src/test/java/com/example/simpleperf/simpleperfexampleofkotlin/ExampleUnitTest.kt)4
-rw-r--r--test/testdata/SimpleperfExampleKotlin/build.gradle6
-rw-r--r--test/testdata/SimpleperfExampleKotlin/gradle.properties (renamed from test/testdata/SimpleperfExamplePureJava/gradle.properties)16
-rw-r--r--test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.jarbin0 -> 59203 bytes
-rw-r--r--test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.properties (renamed from test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.properties)6
-rwxr-xr-xtest/testdata/SimpleperfExampleKotlin/gradlew (renamed from test/testdata/SimpleperfExamplePureJava/gradlew)111
-rw-r--r--test/testdata/SimpleperfExampleKotlin/gradlew.bat (renamed from test/testdata/SimpleperfExampleOfKotlin/gradlew.bat)53
-rw-r--r--test/testdata/SimpleperfExampleKotlin/settings.gradle16
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/build.gradle37
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/build/outputs/apk/profiling/app-profiling.apkbin1964023 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling.gradle58
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips64/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86_64/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/AndroidManifest.xml26
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/layout/activity_sleep.xml9
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin3358 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin5084 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin2386 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin3179 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin4648 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin7381 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin7008 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin11545 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin9442 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin16109 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/colors.xml6
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/strings.xml3
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/styles.xml11
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/build.gradle28
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.jarbin53636 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExampleOfKotlin/settings.gradle1
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/build.gradle32
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/build/outputs/apk/profiling/app-profiling.apkbin1547238 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling.gradle58
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips64/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86_64/wrap.sh2
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/androidTest/java/com/example/simpleperf/simpleperfexamplepurejava/ExampleInstrumentedTest.java27
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/AndroidManifest.xml29
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher.pngbin3418 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.pngbin4208 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher.pngbin2206 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.pngbin2555 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher.pngbin4842 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.pngbin6114 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.pngbin7718 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.pngbin10056 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.pngbin10486 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.pngbin14696 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/colors.xml6
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/strings.xml3
-rw-r--r--test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/styles.xml11
-rw-r--r--test/testdata/SimpleperfExamplePureJava/build.gradle25
-rw-r--r--test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.jarbin53636 -> 0 bytes
-rw-r--r--test/testdata/SimpleperfExamplePureJava/settings.gradle1
-rw-r--r--test/testdata/etm/perf_etm.data (renamed from test/testdata/etm/perf.data)bin12321 -> 12321 bytes
-rw-r--r--test/tools_test.py17
185 files changed, 3004 insertions, 1956 deletions
diff --git a/ChangeLog b/ChangeLog
index eb7136a..b3ff6a6 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,25 @@
+build 9796343 (March 22, 2023)
+Fix dozens of security bugs detected by fuzzer.
+record cmd:
+ Increase the default user buffer size from 64M to 256M for devices having >= 4G memory. This is
+ to reduce lost samples and incomplete callchains.
+ Add --user-buffer-size to adjust the user buffer size.
+record/stat cmd:
+ Support using process name regex to select processes via the -p option.
+ Raise file desciptors limit to better support "stat --per-thread -a".
+report:
+ Support demangling rust symbols.
+ Suppress read symbol warnings for not-ELF files.
+ Improve deobfuscating Java symbols (ndk issue 1836).
+ In report scripts, add --aggregate-threads to merge samples for selected threads.
+ In binary_cache_builder.py, support searching for binaries having different names from those
+ recorded in perf.data. Also fix a bug supporting native libs embedded in apk.
+ In gecko_profile_generator.py, remove small stack gaps to get a smoother view in Stack Chart.
+doc:
+ Update doc on the broken DWARF call graph issue.
+ Add doc for trying the latest simpleperf builds and scripts.
+
+
build 9042912 (Sep 8, 2022)
Fix adhoc codesign for darwin binaries.
Release protobuf files in proto directory.
diff --git a/bin/android/arm/simpleperf b/bin/android/arm/simpleperf
index e642518..bf6b056 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 c3f4451..a81a14b 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 a5e7811..32fc919 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 5f2ac5c..cb7f7bf 100755
--- a/bin/android/x86_64/simpleperf
+++ b/bin/android/x86_64/simpleperf
Binary files differ
diff --git a/bin/darwin/x86_64/libsimpleperf_report.dylib b/bin/darwin/x86_64/libsimpleperf_report.dylib
index 07e22c3..cd829eb 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 c8ead13..4a4396d 100755
--- a/bin/darwin/x86_64/simpleperf
+++ b/bin/darwin/x86_64/simpleperf
Binary files differ
diff --git a/bin/linux/x86_64/libsimpleperf_report.so b/bin/linux/x86_64/libsimpleperf_report.so
index 0b2b6a1..1f9f13f 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 7d5027d..d8dd840 100755
--- a/bin/linux/x86_64/simpleperf
+++ b/bin/linux/x86_64/simpleperf
Binary files differ
diff --git a/bin/windows/x86_64/libsimpleperf_report.dll b/bin/windows/x86_64/libsimpleperf_report.dll
index 11b8c50..0e9e289 100755
--- a/bin/windows/x86_64/libsimpleperf_report.dll
+++ b/bin/windows/x86_64/libsimpleperf_report.dll
Binary files differ
diff --git a/bin/windows/x86_64/simpleperf.exe b/bin/windows/x86_64/simpleperf.exe
index 60091fa..1d9a97e 100755
--- a/bin/windows/x86_64/simpleperf.exe
+++ b/bin/windows/x86_64/simpleperf.exe
Binary files differ
diff --git a/binary_cache_builder.py b/binary_cache_builder.py
index 4322e2c..46c8532 100755
--- a/binary_cache_builder.py
+++ b/binary_cache_builder.py
@@ -19,13 +19,14 @@
it, and put them in binary_cache.
"""
-from dataclasses import dataclass
+from collections import defaultdict
import logging
import os
import os.path
from pathlib import Path
import shutil
-from typing import List, Optional, Union
+import sys
+from typing import Dict, List, Optional, Tuple, Union
from simpleperf_report_lib import ReportLib
from simpleperf_utils import (
@@ -37,27 +38,233 @@ def is_jit_symfile(dso_name):
return dso_name.split('/')[-1].startswith('TemporaryFile')
-class BinaryCacheBuilder(object):
+class BinaryCache:
+ def __init__(self, binary_dir: Path):
+ self.binary_dir = binary_dir
+
+ def get_path_in_cache(self, device_path: str, build_id: str) -> Path:
+ """ Given a binary path in perf.data, return its corresponding path in the cache.
+ """
+ if build_id:
+ filename = device_path.split('/')[-1]
+ # Add build id to make the filename unique.
+ unique_filename = build_id[2:] + '-' + filename
+ return self.binary_dir / unique_filename
+
+ # For elf file without build id, we can only follow its path on device. Otherwise,
+ # simpleperf can't find it. However, we don't prefer this way. Because:
+ # 1) It doesn't work for native libs loaded directly from apk
+ # (android:extractNativeLibs=”false”).
+ # 2) It may exceed path limit on windows.
+ if device_path.startswith('/'):
+ device_path = device_path[1:]
+ device_path = device_path.replace('/', os.sep)
+ return Path(os.path.join(self.binary_dir, device_path))
+
+
+class BinarySource:
+ """ Source to find debug binaries. """
+
+ def __init__(self, readelf: ReadElf):
+ self.readelf = readelf
+
+ def collect_binaries(self, binaries: Dict[str, str], binary_cache: BinaryCache):
+ """ pull binaries needed in perf.data to binary_cache.
+ binaries: maps from binary path to its build_id in perf.data.
+ """
+ raise Exception('not implemented')
+
+ def read_build_id(self, path: Path):
+ return self.readelf.get_build_id(path)
+
+
+class BinarySourceFromDevice(BinarySource):
+ """ Pull binaries from device. """
+
+ def __init__(self, readelf: ReadElf, disable_adb_root: bool):
+ super().__init__(readelf)
+ self.adb = AdbHelper(enable_switch_to_root=not disable_adb_root)
+
+ def collect_binaries(self, binaries: Dict[str, str], binary_cache: BinaryCache):
+ if not self.adb.is_device_available():
+ return
+ for path, build_id in binaries.items():
+ self.collect_binary(path, build_id, binary_cache)
+ self.pull_kernel_symbols(binary_cache.binary_dir / 'kallsyms')
+
+ def collect_binary(self, path: str, build_id: str, binary_cache: BinaryCache):
+ if not path.startswith('/') or path == "//anon" or path.startswith("/dev/"):
+ # [kernel.kallsyms] or unknown, or something we can't find binary.
+ return
+ binary_cache_file = binary_cache.get_path_in_cache(path, build_id)
+ self.check_and_pull_binary(path, build_id, binary_cache_file)
+
+ def check_and_pull_binary(self, path: str, expected_build_id: str, binary_cache_file: Path):
+ """If the binary_cache_file exists and has the expected_build_id, there
+ is no need to pull the binary from device. Otherwise, pull it.
+ """
+ if binary_cache_file.is_file() and (
+ not expected_build_id or expected_build_id == self.read_build_id(binary_cache_file)
+ ):
+ logging.info('use current file in binary_cache: %s', binary_cache_file)
+ else:
+ logging.info('pull file to binary_cache: %s to %s', path, binary_cache_file)
+ target_dir = binary_cache_file.parent
+ if not target_dir.is_dir():
+ os.makedirs(target_dir)
+ if binary_cache_file.is_file():
+ binary_cache_file.unlink()
+ self.pull_file_from_device(path, binary_cache_file)
+
+ def pull_file_from_device(self, device_path: str, host_path: Path):
+ if self.adb.run(['pull', device_path, str(host_path)]):
+ return True
+ # On non-root devices, we can't pull /data/app/XXX/base.odex directly.
+ # Instead, we can first copy the file to /data/local/tmp, then pull it.
+ filename = device_path[device_path.rfind('/')+1:]
+ if (self.adb.run(['shell', 'cp', device_path, '/data/local/tmp']) and
+ self.adb.run(['pull', '/data/local/tmp/' + filename, host_path])):
+ self.adb.run(['shell', 'rm', '/data/local/tmp/' + filename])
+ return True
+ logging.warning('failed to pull %s from device', device_path)
+ return False
+
+ def pull_kernel_symbols(self, file_path: Path):
+ if file_path.is_file():
+ file_path.unlink()
+ if self.adb.switch_to_root():
+ self.adb.run(['shell', 'echo', '0', '>/proc/sys/kernel/kptr_restrict'])
+ self.adb.run(['pull', '/proc/kallsyms', file_path])
+
+
+class BinarySourceFromLibDirs(BinarySource):
+ """ Collect binaries from lib dirs. """
+
+ def __init__(self, readelf: ReadElf, lib_dirs: List[Path]):
+ super().__init__(readelf)
+ self.lib_dirs = lib_dirs
+ self.filename_map = None
+ self.build_id_map = None
+ self.binary_cache = None
+
+ def collect_binaries(self, binaries: Dict[str, str], binary_cache: BinaryCache):
+ self.create_filename_map(binaries)
+ self.create_build_id_map(binaries)
+ self.binary_cache = binary_cache
+
+ # Search all files in lib_dirs, and copy matching files to build_cache.
+ for lib_dir in self.lib_dirs:
+ if self.is_platform_symbols_dir(lib_dir):
+ self.search_platform_symbols_dir(lib_dir)
+ else:
+ self.search_dir(lib_dir)
+
+ def create_filename_map(self, binaries: Dict[str, str]):
+ """ Create a map mapping from filename to binaries having the name. """
+ self.filename_map = defaultdict(list)
+ for path, build_id in binaries.items():
+ index = path.rfind('/')
+ filename = path[index + 1:]
+ self.filename_map[filename].append((path, build_id))
+
+ def create_build_id_map(self, binaries: Dict[str, str]):
+ """ Create a map mapping from build id to binary path. """
+ self.build_id_map = {}
+ for path, build_id in binaries.items():
+ if build_id:
+ self.build_id_map[build_id] = path
+
+ def is_platform_symbols_dir(self, lib_dir: Path):
+ """ Check if lib_dir points to $ANDROID_PRODUCT_OUT/symbols. """
+ subdir_names = [p.name for p in lib_dir.iterdir()]
+ return lib_dir.name == 'symbols' and 'system' in subdir_names
+
+ def search_platform_symbols_dir(self, lib_dir: Path):
+ """ Platform symbols dir contains too many binaries. Reading build ids for
+ all of them takes a long time. So we only read build ids for binaries
+ having names exist in filename_map.
+ """
+ for root, _, files in os.walk(lib_dir):
+ for filename in files:
+ binaries = self.filename_map.get(filename)
+ if not binaries:
+ continue
+ file_path = Path(os.path.join(root, filename))
+ build_id = self.read_build_id(file_path)
+ for path, expected_build_id in binaries:
+ if expected_build_id == build_id:
+ self.copy_to_binary_cache(file_path, build_id, path)
+
+ def search_dir(self, lib_dir: Path):
+ """ For a normal lib dir, it's unlikely to contain many binaries. So we can read
+ build ids for all binaries in it. But users may give debug binaries with a name
+ different from the one recorded in perf.data. So we should only rely on build id
+ if it is available.
+ """
+ for root, _, files in os.walk(lib_dir):
+ for filename in files:
+ file_path = Path(os.path.join(root, filename))
+ build_id = self.read_build_id(file_path)
+ if build_id:
+ # For elf file with build id, use build id to match.
+ device_path = self.build_id_map.get(build_id)
+ if device_path:
+ self.copy_to_binary_cache(file_path, build_id, device_path)
+ elif self.readelf.is_elf_file(file_path):
+ # For elf file without build id, use filename to match.
+ for path, expected_build_id in self.filename_map.get(filename, []):
+ if not expected_build_id:
+ self.copy_to_binary_cache(file_path, '', path)
+ break
+
+ def copy_to_binary_cache(
+ self, from_path: Path, expected_build_id: str, device_path: str):
+ to_path = self.binary_cache.get_path_in_cache(device_path, expected_build_id)
+ if not self.need_to_copy(from_path, to_path, expected_build_id):
+ # The existing file in binary_cache can provide more information, so no need to copy.
+ return
+ to_dir = to_path.parent
+ if not to_dir.is_dir():
+ os.makedirs(to_dir)
+ logging.info('copy to binary_cache: %s to %s', from_path, to_path)
+ shutil.copy(from_path, to_path)
+
+ def need_to_copy(self, from_path: Path, to_path: Path, expected_build_id: str):
+ if not to_path.is_file() or self.read_build_id(to_path) != expected_build_id:
+ return True
+ return self.get_file_stripped_level(from_path) < self.get_file_stripped_level(to_path)
+
+ def get_file_stripped_level(self, path: Path) -> int:
+ """Return stripped level of an ELF file. Larger value means more stripped."""
+ sections = self.readelf.get_sections(path)
+ if '.debug_line' in sections:
+ return 0
+ if '.symtab' in sections:
+ return 1
+ return 2
+
+
+class BinaryCacheBuilder:
"""Collect all binaries needed by perf.data in binary_cache."""
def __init__(self, ndk_path: Optional[str], disable_adb_root: bool):
- self.adb = AdbHelper(enable_switch_to_root=not disable_adb_root)
self.readelf = ReadElf(ndk_path)
- self.binary_cache_dir = 'binary_cache'
- if not os.path.isdir(self.binary_cache_dir):
- os.makedirs(self.binary_cache_dir)
+ self.device_source = BinarySourceFromDevice(self.readelf, disable_adb_root)
+ self.binary_cache_dir = Path('binary_cache')
+ self.binary_cache = BinaryCache(self.binary_cache_dir)
self.binaries = {}
- def build_binary_cache(self, perf_data_path: str, symfs_dirs: List[Union[Path, str]]):
+ def build_binary_cache(self, perf_data_path: str, symfs_dirs: List[Union[Path, str]]) -> bool:
+ self.binary_cache_dir.mkdir(exist_ok=True)
self.collect_used_binaries(perf_data_path)
- self.copy_binaries_from_symfs_dirs(symfs_dirs)
- if self.adb.is_device_available():
- self.pull_binaries_from_device()
- self._pull_kernel_symbols()
+ if not self.copy_binaries_from_symfs_dirs(symfs_dirs):
+ return False
+ self.pull_binaries_from_device()
self.create_build_id_list()
+ return True
def collect_used_binaries(self, perf_data_path):
- """read perf.data, collect all used binaries and their build id (if available)."""
+ """read perf.data, collect all used binaries and their build id(if available)."""
# A dict mapping from binary name to build_id
binaries = {}
lib = ReportLib()
@@ -82,149 +289,45 @@ class BinaryCacheBuilder(object):
binaries[name] = lib.GetBuildIdForPath(dso_name)
self.binaries = binaries
- def copy_binaries_from_symfs_dirs(self, symfs_dirs: List[Union[Path, str]]):
- """collect all files in symfs_dirs."""
- if not symfs_dirs:
- return
-
- # It is possible that the path of the binary in symfs_dirs doesn't match
- # the one recorded in perf.data. For example, a file in symfs_dirs might
- # be "debug/arm/obj/armeabi-v7a/libsudo-game-jni.so", but the path in
- # perf.data is "/data/app/xxxx/lib/arm/libsudo-game-jni.so". So we match
- # binaries if they have the same filename (like libsudo-game-jni.so)
- # and same build_id.
-
- # Map from filename to binary paths.
- filename_dict = {}
- for binary in self.binaries:
- index = binary.rfind('/')
- filename = binary[index+1:]
- paths = filename_dict.get(filename)
- if paths is None:
- filename_dict[filename] = paths = []
- paths.append(binary)
-
- # Walk through all files in symfs_dirs, and copy matching files to build_cache.
- for symfs_dir in symfs_dirs:
- for root, _, files in os.walk(symfs_dir):
- for filename in files:
- paths = filename_dict.get(filename)
- if not paths:
- continue
- build_id = self._read_build_id(os.path.join(root, filename))
- for binary in paths:
- expected_build_id = self.binaries.get(binary)
- if expected_build_id == build_id:
- self._copy_to_binary_cache(os.path.join(root, filename),
- expected_build_id, binary)
- break
-
- def _copy_to_binary_cache(self, from_path, expected_build_id, target_file):
- if target_file[0] == '/':
- target_file = target_file[1:]
- target_file = target_file.replace('/', os.sep)
- target_file = os.path.join(self.binary_cache_dir, target_file)
- if not self._need_to_copy(from_path, target_file, expected_build_id):
- # The existing file in binary_cache can provide more information, so no need to copy.
- return
- target_dir = os.path.dirname(target_file)
- if not os.path.isdir(target_dir):
- os.makedirs(target_dir)
- logging.info('copy to binary_cache: %s to %s' % (from_path, target_file))
- shutil.copy(from_path, target_file)
-
- def _need_to_copy(self, source_file, target_file, expected_build_id):
- if not os.path.isfile(target_file):
- return True
- if self._read_build_id(target_file) != expected_build_id:
- return True
- return self._get_file_stripped_level(source_file) < self._get_file_stripped_level(
- target_file)
-
- def _get_file_stripped_level(self, file_path):
- """Return stripped level of an ELF file. Larger value means more stripped."""
- sections = self.readelf.get_sections(file_path)
- if '.debug_line' in sections:
- return 0
- if '.symtab' in sections:
- return 1
- return 2
+ def copy_binaries_from_symfs_dirs(self, symfs_dirs: List[Union[str, Path]]) -> bool:
+ if symfs_dirs:
+ lib_dirs: List[Path] = []
+ for symfs_dir in symfs_dirs:
+ if isinstance(symfs_dir, str):
+ symfs_dir = Path(symfs_dir)
+ if not symfs_dir.is_dir():
+ logging.error("can't find dir %s", symfs_dir)
+ return False
+ lib_dirs.append(symfs_dir)
+ lib_dir_source = BinarySourceFromLibDirs(self.readelf, lib_dirs)
+ lib_dir_source.collect_binaries(self.binaries, self.binary_cache)
+ return True
def pull_binaries_from_device(self):
- """pull binaries needed in perf.data to binary_cache."""
- for binary in self.binaries:
- build_id = self.binaries[binary]
- if not binary.startswith('/') or binary == "//anon" or binary.startswith("/dev/"):
- # [kernel.kallsyms] or unknown, or something we can't find binary.
- continue
- binary_cache_file = binary[1:].replace('/', os.sep)
- binary_cache_file = os.path.join(self.binary_cache_dir, binary_cache_file)
- self._check_and_pull_binary(binary, build_id, binary_cache_file)
-
- def _check_and_pull_binary(self, binary, expected_build_id, binary_cache_file):
- """If the binary_cache_file exists and has the expected_build_id, there
- is no need to pull the binary from device. Otherwise, pull it.
- """
- need_pull = True
- if os.path.isfile(binary_cache_file):
- need_pull = False
- if expected_build_id:
- build_id = self._read_build_id(binary_cache_file)
- if expected_build_id != build_id:
- need_pull = True
- if need_pull:
- target_dir = os.path.dirname(binary_cache_file)
- if not os.path.isdir(target_dir):
- os.makedirs(target_dir)
- if os.path.isfile(binary_cache_file):
- os.remove(binary_cache_file)
- logging.info('pull file to binary_cache: %s to %s' % (binary, binary_cache_file))
- self._pull_file_from_device(binary, binary_cache_file)
- else:
- logging.info('use current file in binary_cache: %s' % binary_cache_file)
-
- def _read_build_id(self, file_path):
- """read build id of a binary on host."""
- return self.readelf.get_build_id(file_path)
-
- def _pull_file_from_device(self, device_path, host_path):
- if self.adb.run(['pull', device_path, host_path]):
- return True
- # In non-root device, we can't pull /data/app/XXX/base.odex directly.
- # Instead, we can first copy the file to /data/local/tmp, then pull it.
- filename = device_path[device_path.rfind('/')+1:]
- if (self.adb.run(['shell', 'cp', device_path, '/data/local/tmp']) and
- self.adb.run(['pull', '/data/local/tmp/' + filename, host_path])):
- self.adb.run(['shell', 'rm', '/data/local/tmp/' + filename])
- return True
- logging.warning('failed to pull %s from device' % device_path)
- return False
-
- def _pull_kernel_symbols(self):
- file_path = os.path.join(self.binary_cache_dir, 'kallsyms')
- if os.path.isfile(file_path):
- os.remove(file_path)
- if self.adb.switch_to_root():
- self.adb.run(['shell', 'echo', '0', '>/proc/sys/kernel/kptr_restrict'])
- self.adb.run(['pull', '/proc/kallsyms', file_path])
+ self.device_source.collect_binaries(self.binaries, self.binary_cache)
def create_build_id_list(self):
""" Create build_id_list. So report scripts can find a binary by its build_id instead of
path.
"""
- build_id_list_path = os.path.join(self.binary_cache_dir, 'build_id_list')
+ build_id_list_path = self.binary_cache_dir / 'build_id_list'
+ # Write in binary mode to avoid "\r\n" problem on windows, which can confuse simpleperf.
with open(build_id_list_path, 'wb') as fh:
for root, _, files in os.walk(self.binary_cache_dir):
for filename in files:
- path = os.path.join(root, filename)
- relative_path = path[len(self.binary_cache_dir) + 1:]
- build_id = self._read_build_id(path)
+ path = Path(os.path.join(root, filename))
+ build_id = self.readelf.get_build_id(path)
if build_id:
+ relative_path = path.relative_to(self.binary_cache_dir)
line = f'{build_id}={relative_path}\n'
fh.write(str_to_bytes(line))
+ def find_path_in_cache(self, device_path: str) -> Optional[Path]:
+ build_id = self.binaries.get(device_path)
+ return self.binary_cache.get_path_in_cache(device_path, build_id)
+
-def main():
+def main() -> bool:
parser = BaseArgumentParser(description="""
Pull binaries needed by perf.data from device to binary_cache directory.""")
parser.add_argument('-i', '--perf_data_path', default='perf.data', type=extant_file, help="""
@@ -238,8 +341,8 @@ def main():
ndk_path = None if not args.ndk_path else args.ndk_path[0]
builder = BinaryCacheBuilder(ndk_path, args.disable_adb_root)
symfs_dirs = flatten_arg_list(args.native_lib_dir)
- builder.build_binary_cache(args.perf_data_path, symfs_dirs)
+ return builder.build_binary_cache(args.perf_data_path, symfs_dirs)
if __name__ == '__main__':
- main()
+ sys.exit(0 if main() else 1)
diff --git a/doc/README.md b/doc/README.md
index 51ffc83..d1ecbcc 100644
--- a/doc/README.md
+++ b/doc/README.md
@@ -1,5 +1,9 @@
# Simpleperf
+Android Studio includes a graphical front end to Simpleperf, documented in
+[Inspect CPU activity with CPU Profiler](https://developer.android.com/studio/profile/cpu-profiler).
+Most users will prefer to use that instead of using Simpleperf directly.
+
Simpleperf is a native CPU 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. The simpleperf executable can run on Android >=L,
@@ -57,6 +61,7 @@ Python scripts are split into three parts according to their functions:
3. Scripts used for parsing profiling data, like simpleperf_report_lib.py.
+The python scripts are tested on Python >= 3.9. Older versions may not be supported.
Detailed documentation for the Python scripts is [here](#scripts-reference).
@@ -101,83 +106,100 @@ See [view_the_profile.md](./view_the_profile.md).
## Answers to common issues
-### Why we suggest profiling on Android >= N devices?
-
-1. Running on a device reflects a real running situation, so we suggest
- profiling on real devices instead of emulators.
-2. To profile Java code, we need ART running in oat mode, which is only
- available >= L for rooted devices, and >= N for non-rooted devices.
-3. Old Android versions are likely to be shipped with old kernels (< 3.18),
- which may not support profiling features like recording dwarf based call graphs.
-4. Old Android versions are likely to be shipped with Arm32 chips. In Arm32
- mode, recording stack frame based call graphs doesn't work well.
-
-### Suggestions about recording call graphs
-
-Below is our experiences of dwarf based call graphs and stack frame based call graphs.
-
-dwarf based call graphs:
-1. Need support of debug information in binaries.
-2. Behave normally well on both ARM and ARM64, for both fully compiled Java code and C++ code.
-3. Can only unwind 64K stack for each sample. So usually can't show complete flamegraph. But
- probably is enough for users to identify hot places.
-4. Take more CPU time than stack frame based call graphs. So the sample frequency is suggested
- to be 1000 Hz. Thus at most 1000 samples per second.
-
-stack frame based call graphs:
-1. Need support of stack frame registers.
-2. Don't work well on ARM. Because ARM is short of registers, and ARM and THUMB code have different
- stack frame registers. So the kernel can't unwind user stack containing both ARM/THUMB code.
-3. Also don't work well on fully compiled Java code on ARM64. Because the ART compiler doesn't
- reserve stack frame registers.
-4. Work well when profiling native programs on ARM64. One example is profiling surfacelinger. And
+### Support on different Android versions
+
+On Android < N, the kernel may be too old (< 3.18) to support features like recording DWARF
+based call graphs.
+On Android M - O, we can only profile C++ code and fully compiled Java code.
+On Android >= P, the ART interpreter supports DWARF based unwinding. So we can profile Java code.
+On Android >= Q, we can used simpleperf shipped on device to profile released Android apps, with
+ `<profileable android:shell="true" />`.
+
+
+### Comparing DWARF based and stack frame based call graphs
+
+Simpleperf supports two ways recording call stacks with samples. One is DWARF based call graph,
+the other is stack frame based call graph. Below is their comparison:
+
+Recording DWARF based call graph:
+1. Needs support of debug information in binaries.
+2. Behaves normally well on both ARM and ARM64, for both Java code and C++ code.
+3. Can only unwind 64K stack for each sample. So it isn't always possible to unwind to the bottom.
+ However, this is alleviated in simpleperf, as explained in the next section.
+4. Takes more CPU time than stack frame based call graphs. So it has higher overhead, and can't
+ sample at very high frequency (usually <= 4000 Hz).
+
+Recording stack frame based call graph:
+1. Needs support of stack frame registers.
+2. Doesn't work well on ARM. Because ARM is short of registers, and ARM and THUMB code have
+ different stack frame registers. So the kernel can't unwind user stack containing both ARM and
+ THUMB code.
+3. Also doesn't work well on Java code. Because the ART compiler doesn't reserve stack frame
+ registers. And it can't get frames for interpreted Java code.
+4. Works well when profiling native programs on ARM64. One example is profiling surfacelinger. And
usually shows complete flamegraph when it works well.
-5. Take less CPU time than dwarf based call graphs. So the sample frequency can be 4000 Hz or
+5. Takes much less CPU time than DWARF based call graphs. So the sample frequency can be 10000 Hz or
higher.
-So if you need to profile code on ARM or profile fully compiled Java code, dwarf based call graphs
-may be better. If you need to profile C++ code on ARM64, stack frame based call graphs may be
-better. After all, you can always try dwarf based call graph first, because it always produces
-reasonable results when given unstripped binaries properly. If it doesn't work well enough, then
-try stack frame based call graphs instead.
+So if you need to profile code on ARM or profile Java code, DWARF based call graph is better. If you
+need to profile C++ code on ARM64, stack frame based call graphs may be better. After all, you can
+fisrt try DWARF based call graph, which is also the default option when `-g` is used. Because it
+always produces reasonable results. If it doesn't work well enough, then try stack frame based call
+graph instead.
-Simpleperf may need unstripped native binaries on the device to generate good dwarf based call
-graphs. It can be supported by downloading unstripped native libraries on device, as [here](#fix-broken-callchain-stopped-at-c-functions).
-### Why we can't always get complete DWARF-based call graphs?
+### Fix broken DWARF based call graph
-DWARF-based call graphs are generated by unwinding thread stacks. When a sample is generated, up to
-64KB stack data is dumped by the kernel. By unwinding the stack based on dwarf information, we get
-a callchain. But the thread stack can be much longer than 64KB. In that case, we can't unwind to
-the thread start point.
+A DWARF-based call graph is generated by unwinding thread stacks. When a sample is recorded, a
+kernel dumps up to 64 kilobytes of stack data. By unwinding the stack based on DWARF information,
+we can get a call stack.
-To alleviate the problem, simpleperf joins callchains after recording them. If two callchains of
-a thread have an entry containing the same ip and sp address, then simpleperf tries to join them to
-make the callchains longer. In that case, the longer we run, the more samples we get. This makes it
-more likely to get complete callchains, but it's still not guaranteed to get complete call graphs.
+Two reasons may cause a broken call stack:
+1. The kernel can only dump up to 64 kilobytes of stack data for each sample, but a thread can have
+ much larger stack. In this case, we can't unwind to the thread start point.
-### How to solve missing symbols in report?
+2. We need binaries containing DWARF call frame information to unwind stack frames. The binary
+ should have one of the following sections: .eh_frame, .debug_frame, .ARM.exidx or .gnu_debugdata.
-The simpleperf record command collects symbols on device in perf.data. But if the native libraries
-you use on device are stripped, this will result in a lot of unknown symbols in the report. A
-solution is to build binary_cache on host.
+To mitigate these problems,
+
+
+For the missing stack data problem:
+1. To alleviate it, simpleperf joins callchains (call stacks) after recording. If two callchains of
+ a thread have an entry containing the same ip and sp address, then simpleperf tries to join them
+ to make the callchains longer. So we can get more complete callchains by recording longer and
+ joining more samples. This doesn't guarantee to get complete call graphs. But it usually works
+ well.
+
+2. Simpleperf stores samples in a buffer before unwinding them. If the bufer is low in free space,
+ simpleperf may decide to cut stack data for a sample to 1K. Hopefully, this can be recovered by
+ callchain joiner. But when a high percentage of samples are cut, many callchains can be broken.
+ We can tell if many samples are cut in the record command output, like:
```sh
-# Collect binaries needed by perf.data in binary_cache/.
-$ ./binary_cache_builder.py -lib NATIVE_LIB_DIR,...
+$ simpleperf record ...
+simpleperf I cmd_record.cpp:809] Samples recorded: 105584 (cut 86291). Samples lost: 6501.
```
-The NATIVE_LIB_DIRs passed in -lib option are the directories containing unstripped native
-libraries on host. After running it, the native libraries containing symbol tables are collected
-in binary_cache/ for use when reporting.
+ There are two ways to avoid cutting samples. One is increasing the buffer size, like
+ `--user-buffer-size 1G`. But `--user-buffer-size` is only available on latest simpleperf. If that
+ option isn't available, we can use `--no-cut-samples` to disable cutting samples.
-```sh
-$ ./report.py --symfs binary_cache
+For the missing DWARF call frame info problem:
+1. Most C++ code generates binaries containing call frame info, in .eh_frame or .ARM.exidx sections.
+ These sections are not stripped, and are usually enough for stack unwinding.
+
+2. For C code and a small percentage of C++ code that the compiler is sure will not generate
+ exceptions, the call frame info is generated in .debug_frame section. .debug_frame section is
+ usually stripped with other debug sections. One way to fix it, is to download unstripped binaries
+ on device, as [here](#fix-broken-callchain-stopped-at-c-functions).
+
+3. The compiler doesn't generate unwind instructions for function prologue and epilogue. Because
+ they operates stack frames and will not generate exceptions. But profiling may hit these
+ instructions, and fails to unwind them. This usually doesn't matter in a frame graph. But in a
+ time based Stack Chart (like in Android Studio and Firefox profiler), this causes stack gaps once
+ in a while. We can remove stack gaps via `--remove-gaps`, which is already enabled by default.
-# report_html.py searches binary_cache/ automatically, so you don't need to
-# pass it any argument.
-$ ./report_html.py
-```
### Fix broken callchain stopped at C functions
@@ -202,6 +224,31 @@ To use app_profiler.py:
$ ./app_profiler.py -lib <unstripped_dir>
```
+
+### How to solve missing symbols in report?
+
+The simpleperf record command collects symbols on device in perf.data. But if the native libraries
+you use on device are stripped, this will result in a lot of unknown symbols in the report. A
+solution is to build binary_cache on host.
+
+```sh
+# Collect binaries needed by perf.data in binary_cache/.
+$ ./binary_cache_builder.py -lib NATIVE_LIB_DIR,...
+```
+
+The NATIVE_LIB_DIRs passed in -lib option are the directories containing unstripped native
+libraries on host. After running it, the native libraries containing symbol tables are collected
+in binary_cache/ for use when reporting.
+
+```sh
+$ ./report.py --symfs binary_cache
+
+# report_html.py searches binary_cache/ automatically, so you don't need to
+# pass it any argument.
+$ ./report_html.py
+```
+
+
### Show annotated source code and disassembly
To show hot places at source code and instruction level, we need to show source code and
@@ -238,3 +285,13 @@ $ mmma system/extras/simpleperf -j30
If built successfully, out/target/product/generic_arm64/system/bin/simpleperf is for ARM64, and
out/target/product/generic_arm64/system/bin/simpleperf32 is for ARM.
+
+The source code of simpleperf python scripts is in [system/extras/simpleperf/scripts](https://android.googlesource.com/platform/system/extras/+/master/simpleperf/scripts/).
+Most scripts rely on simpleperf binaries to work. To update binaries for scripts (using linux
+x86_64 host and android arm64 target as an example):
+```sh
+$ cp out/host/linux-x86/lib64/libsimpleperf_report.so system/extras/simpleperf/scripts/bin/linux/x86_64/libsimpleperf_report.so
+$ cp out/target/product/generic_arm64/system/bin/simpleperf_ndk64 system/extras/simpleperf/scripts/bin/android/arm64/simpleperf
+```
+
+Then you can try the latest simpleperf scripts and binaries in system/extras/simpleperf/scripts.
diff --git a/doc/android_application_profiling.md b/doc/android_application_profiling.md
index 65fae75..5ee46a5 100644
--- a/doc/android_application_profiling.md
+++ b/doc/android_application_profiling.md
@@ -70,7 +70,7 @@ android {
}
task createWrapShLibDir
- for (String abi : ["armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64"]) {
+ for (String abi : ["armeabi-v7a", "arm64-v8a", "x86", "x86_64"]) {
def dir = new File("app/wrap_sh_lib_dir/lib/" + abi)
dir.mkdirs()
def wrapFile = new File(dir, "wrap.sh")
diff --git a/doc/executable_commands_reference.md b/doc/executable_commands_reference.md
index e3db970..0e29fbf 100644
--- a/doc/executable_commands_reference.md
+++ b/doc/executable_commands_reference.md
@@ -206,15 +206,23 @@ process to run the new command and then monitor the child process.
# Stat process 11904 and 11905.
$ simpleperf stat -p 11904,11905 --duration 10
+# Stat processes with name containing "chrome".
+$ simpleperf stat -p chrome --duration 10
+# Stat processes with name containing part matching regex "chrome:(privileged|sandboxed)".
+$ simpleperf stat -p "chrome:(privileged|sandboxed)" --duration 10
+
# Stat thread 11904 and 11905.
$ simpleperf stat -t 11904,11905 --duration 10
# Start a child process running `ls`, and stat it.
$ simpleperf stat ls
-# Stat the process of an Android application. This only works for debuggable apps on non-rooted
-# devices.
-$ simpleperf stat --app simpleperf.example.cpp
+# Stat the process of an Android application. On non-root devices, this only works for debuggable
+# or profileable from shell apps.
+$ simpleperf stat --app simpleperf.example.cpp --duration 10
+
+# Stat only selected thread 11904 in an app.
+$ simpleperf stat --app simpleperf.example.cpp -t 11904 --duration 10
# Stat system wide using -a.
$ simpleperf stat -a --duration 10
@@ -362,15 +370,23 @@ The way to select target in record command is similar to that in the stat comman
# Record process 11904 and 11905.
$ simpleperf record -p 11904,11905 --duration 10
+# Record processes with name containing "chrome".
+$ simpleperf record -p chrome --duration 10
+# Record processes with name containing part matching regex "chrome:(privileged|sandboxed)".
+$ simpleperf record -p "chrome:(privileged|sandboxed)" --duration 10
+
# Record thread 11904 and 11905.
$ simpleperf record -t 11904,11905 --duration 10
# Record a child process running `ls`.
$ simpleperf record ls
-# Record the process of an Android application. This only works for debuggable apps on non-rooted
-# devices.
-$ simpleperf record --app simpleperf.example.cpp
+# Record the process of an Android application. On non-root devices, this only works for debuggable
+# or profileable from shell apps.
+$ simpleperf record --app simpleperf.example.cpp --duration 10
+
+# Record only selected thread 11904 in an app.
+$ simpleperf record --app simpleperf.example.cpp -t 11904 --duration 10
# Record system wide.
$ simpleperf record -a --duration 10
diff --git a/gecko_profile_generator.py b/gecko_profile_generator.py
index 396c9a5..9fe9ad3 100755
--- a/gecko_profile_generator.py
+++ b/gecko_profile_generator.py
@@ -25,13 +25,15 @@
Then open gecko-profile.json.gz in https://profiler.firefox.com/
"""
+from collections import Counter
+from dataclasses import dataclass, field
import json
+import logging
import sys
+from typing import List, Dict, Optional, NamedTuple, Tuple
-from dataclasses import dataclass, field
from simpleperf_report_lib import ReportLib
-from simpleperf_utils import BaseArgumentParser, flatten_arg_list, ReportLibOptions
-from typing import List, Dict, Optional, NamedTuple, Set, Tuple
+from simpleperf_utils import BaseArgumentParser, ReportLibOptions
StringID = int
@@ -67,6 +69,10 @@ class Sample(NamedTuple):
stack_id: Optional[StackID]
time_ms: Milliseconds
responsiveness: int
+ complete_stack: bool
+
+ def to_json(self):
+ return [self.stack_id, self.time_ms, self.responsiveness]
# Schema: https://github.com/firefox-devtools/profiler/blob/53970305b51b9b472e26d7457fee1d66cd4e2737/src/types/profile.js#L425
@@ -119,6 +125,14 @@ CATEGORIES = [
]
+def is_complete_stack(stack: List[str]) -> bool:
+ """ Check if the callstack is complete. The stack starts from root. """
+ for entry in stack:
+ if ('__libc_init' in entry) or ('__start_thread' in entry):
+ return True
+ return False
+
+
@dataclass
class Thread:
"""A builder for a profile of a single thread.
@@ -203,7 +217,7 @@ class Thread:
))
return frame_id
- def _add_sample(self, comm: str, stack: List[str], time_ms: Milliseconds) -> None:
+ def add_sample(self, comm: str, stack: List[str], time_ms: Milliseconds) -> None:
"""Add a timestamped stack trace sample to the thread builder.
Args:
@@ -223,13 +237,43 @@ class Thread:
self.samples.append(Sample(stack_id=prefix_stack_id,
time_ms=time_ms,
- responsiveness=0))
+ responsiveness=0,
+ complete_stack=is_complete_stack(stack)))
- def _to_json_dict(self) -> Dict:
- """Converts this Thread to GeckoThread JSON format."""
- # The samples aren't guaranteed to be in order. Sort them by time.
+ def sort_samples(self) -> None:
+ """ The samples aren't guaranteed to be in order. Sort them by time. """
self.samples.sort(key=lambda s: s.time_ms)
+ def remove_stack_gaps(self, max_remove_gap_length: int, gap_distr: Dict[int, int]) -> None:
+ """ Ideally all callstacks are complete. But some may be broken for different reasons.
+ To create a smooth view in "Stack Chart", remove small gaps of broken callstacks.
+
+ Args:
+ max_remove_gap_length: the max length of continuous broken-stack samples to remove
+ """
+ if max_remove_gap_length == 0:
+ return
+ i = 0
+ remove_flags = [False] * len(self.samples)
+ while i < len(self.samples):
+ if self.samples[i].complete_stack:
+ i += 1
+ continue
+ n = 1
+ while (i + n < len(self.samples)) and (not self.samples[i + n].complete_stack):
+ n += 1
+ gap_distr[n] += 1
+ if n <= max_remove_gap_length:
+ for j in range(i, i + n):
+ remove_flags[j] = True
+ i += n
+ if True in remove_flags:
+ old_samples = self.samples
+ self.samples = [s for s, remove in zip(old_samples, remove_flags) if not remove]
+
+ def to_json_dict(self) -> Dict:
+ """Converts this Thread to GeckoThread JSON format."""
+
# Gecko profile format is row-oriented data as List[List],
# And a schema for interpreting each index.
# Schema:
@@ -258,7 +302,7 @@ class Thread:
"time": 1,
"responsiveness": 2,
},
- "data": self.samples
+ "data": [s.to_json() for s in self.samples],
},
# https://github.com/firefox-devtools/profiler/blob/53970305b51b9b472e26d7457fee1d66cd4e2737/src/types/gecko-profile.js#L156
"frameTable": {
@@ -291,11 +335,37 @@ class Thread:
}
+def remove_stack_gaps(max_remove_gap_length: int, thread_map: Dict[int, Thread]) -> None:
+ """ Remove stack gaps for each thread, and print status. """
+ if max_remove_gap_length == 0:
+ return
+ total_sample_count = 0
+ remove_sample_count = 0
+ gap_distr = Counter()
+ for tid in list(thread_map.keys()):
+ thread = thread_map[tid]
+ old_n = len(thread.samples)
+ thread.remove_stack_gaps(max_remove_gap_length, gap_distr)
+ new_n = len(thread.samples)
+ total_sample_count += old_n
+ remove_sample_count += old_n - new_n
+ if new_n == 0:
+ del thread_map[tid]
+ if total_sample_count != 0:
+ logging.info('Remove stack gaps with length <= %d. %d (%.2f%%) samples are removed.',
+ max_remove_gap_length, remove_sample_count,
+ remove_sample_count / total_sample_count * 100
+ )
+ logging.debug('Stack gap length distribution among samples (gap_length: count): %s',
+ gap_distr)
+
+
def _gecko_profile(
record_file: str,
symfs_dir: Optional[str],
kallsyms_file: Optional[str],
- report_lib_options: ReportLibOptions) -> GeckoProfile:
+ report_lib_options: ReportLibOptions,
+ max_remove_gap_length: int) -> GeckoProfile:
"""convert a simpleperf profile to gecko format"""
lib = ReportLib()
@@ -319,7 +389,6 @@ def _gecko_profile(
if sample is None:
lib.Close()
break
- event = lib.GetEventOfCurrentSample()
symbol = lib.GetSymbolOfCurrentSample()
callchain = lib.GetCallChainOfCurrentSample()
sample_time_ms = sample.time / 1000000
@@ -336,7 +405,7 @@ def _gecko_profile(
if thread is None:
thread = Thread(comm=sample.thread_comm, pid=sample.pid, tid=sample.tid)
threadMap[sample.tid] = thread
- thread._add_sample(
+ thread.add_sample(
comm=sample.thread_comm,
stack=stack,
# We are being a bit fast and loose here with time here. simpleperf
@@ -347,7 +416,12 @@ def _gecko_profile(
# setting `simpleperf record --clockid realtime`.
time_ms=sample_time_ms)
- threads = [thread._to_json_dict() for thread in threadMap.values()]
+ for thread in threadMap.values():
+ thread.sort_samples()
+
+ remove_stack_gaps(max_remove_gap_length, threadMap)
+
+ threads = [thread.to_json_dict() for thread in threadMap.values()]
profile_timestamp = meta_info.get('timestamp')
end_time_ms = (int(profile_timestamp) * 1000) if profile_timestamp else 0
@@ -397,13 +471,22 @@ def main() -> None:
parser.add_argument('--kallsyms', help='Set the path to find kernel symbols.')
parser.add_argument('-i', '--record_file', nargs='?', default='perf.data',
help='Default is perf.data.')
+ parser.add_argument('--remove-gaps', metavar='MAX_GAP_LENGTH', dest='max_remove_gap_length',
+ type=int, default=3, help="""
+ Ideally all callstacks are complete. But some may be broken for different
+ reasons. To create a smooth view in "Stack Chart", remove small gaps of
+ broken callstacks. MAX_GAP_LENGTH is the max length of continuous
+ broken-stack samples we want to remove.
+ """
+ )
parser.add_report_lib_options()
args = parser.parse_args()
profile = _gecko_profile(
record_file=args.record_file,
symfs_dir=args.symfs,
kallsyms_file=args.kallsyms,
- report_lib_options=args.report_lib_options)
+ report_lib_options=args.report_lib_options,
+ max_remove_gap_length=args.max_remove_gap_length)
json.dump(profile, sys.stdout, sort_keys=True)
diff --git a/pprof_proto_generator.py b/pprof_proto_generator.py
index 4a8993b..a22e424 100755
--- a/pprof_proto_generator.py
+++ b/pprof_proto_generator.py
@@ -35,7 +35,7 @@ from simpleperf_utils import (Addr2Nearestline, BaseArgumentParser, BinaryFinder
flatten_arg_list, log_exit, ReadElf, ToolFinder)
try:
import profile_pb2
-except ImportError:
+except ImportError as e:
log_exit(f'{e}\nprotobuf package is missing or too old. Please install it like ' +
'`pip install protobuf==4.21`.')
diff --git a/repo.prop b/repo.prop
index 2f8e0ae..4815a01 100644
--- a/repo.prop
+++ b/repo.prop
@@ -1,824 +1,882 @@
-device/amlogic/yukawa b2ec824115c6a9a32fa572ba8805fb2fe40b5e64
-device/amlogic/yukawa-kernel 3a6aaab5091f80c31757c8ca1d31aac387175295
-device/common ec849df781fc85aa39a7ee0c50646c2819ae0a9c
+device/amlogic/yukawa 3d1928784cba4e2f957d34ed3ddebd739e07a70a
+device/amlogic/yukawa-kernel eacb7f96b54ea6ce0ebb797ffdc9dbf3c99d4bd8
+device/common c7183550fa5b61f4941cce89f383fdf684d7d46a
device/generic/arm64 a8f870b2bcc01d57753173ba88d82f450cf831fe
device/generic/armv7-a-neon a0ee1f09b316767ab6e655dcf670fcdf1da55ca9
device/generic/art 29f98b9b6a81d5db6ebd4d926221df20f632fa3f
-device/generic/car cbb14d2acd67c11379b40d2faa11844f02de5235
-device/generic/common 981ab1a04a7f2ca51438c702c197e25ef7fbb3e3
-device/generic/goldfish 6bf8b23ee082494dee622a0e7b748c9b8de04d1d
-device/generic/goldfish-opengl 13c2409c86657d56ffcfb3e515fc863099cb42c2
+device/generic/car 42eff4b00cf87cfe3eddb06c864d64f45cf4ee15
+device/generic/common 375c14b63313c3a22fc25f7a24a96492cac7bd66
+device/generic/goldfish f6a38fdb55b99a84ba6b7b39a0f952c8950aed03
+device/generic/goldfish-opengl ff37db2d0b6533f8811e021b8071eb6ccc8e9fc9
device/generic/mini-emulator-arm64 a8c0896b7b861d7b88978c39b2ff2378cfab11d4
device/generic/mini-emulator-armv7-a-neon e601f097400b954be840190789ea50ebec3d749d
device/generic/mini-emulator-x86 d88a605514040a77cc5a90f8c48a963c652963b4
device/generic/mini-emulator-x86_64 ad534dd78016dbdf78c7c2140ad606aca6d02568
-device/generic/opengl-transport 528dd7a22887119f9a48c03bd10c7e12227228cc
+device/generic/opengl-transport a7a674b7500d644399e4875bcb750285369205d7
device/generic/qemu 5ab1a80ca9a3edb54b8db53e20508f132aa9af8b
-device/generic/trusty 7132d3d340f01258f2acce371c6d4f6ad5dff571
-device/generic/uml da7cc929ac991282cfc3d5f9f063f6bb055c8523
-device/generic/vulkan-cereal 9f683240103c5d2921d056376d08a01b1c8ea371
+device/generic/trusty 026ed1b0122e049444badb7f41d88e5f688ce9b1
+device/generic/uml 24427fa3ecb2835d2fc496a5622d63072011e0c7
+device/generic/vulkan-cereal eefd1c392ed8ff5aedd50abb89e9fbc729e114e1
device/generic/x86 817ed7bdaba24c0cf699236ba877858e7516acf6
device/generic/x86_64 8c842b376a213920eb9eef147c0dc0c9e5563796
-device/google/atv 917bbbec197fbeaf834f54d6fd2b1b69d9b64224
-device/google/barbet 20df9c59492f8d03debf78279db1f402b2483968
-device/google/barbet-sepolicy 9351351737e4a1cfbcb31ebf722544e804594e18
-device/google/bluejay f86dccf6741acd64f7317098be07c0c685071737
-device/google/bluejay-kernel 3197ec542fed905a849bf371278e1a1154d1760b
-device/google/bluejay-sepolicy 97bad77bfa3cf1705783e4e4bc45bb203e8df086
-device/google/bramble 3b8c673627db679e723b61af20fc7746279b1b11
-device/google/bramble-sepolicy 8a7b15ee0f914bca699189c8f1d04c548ef3c102
-device/google/contexthub fa4c61589dc5f2a56224ea82bfc3c1d2c7d2019b
-device/google/coral f04a96614c5b9cb2c0286f11177f95e61370e8c8
-device/google/coral-kernel fc4e3c319b4da82ad75c1a0697319095b5d1b6d5
-device/google/coral-sepolicy 88d85f8fd127e7b5f2776c0214dcc6d511f61b51
-device/google/cuttlefish 2afe086c0c80d034c1db82626609dc0f86687368
-device/google/cuttlefish_prebuilts 02781ff700b6d69354947622bc778d962e7b00d5
-device/google/fuchsia 15dd6cca8b4fe482926995c6400e4763c3285dc2
-device/google/gs-common fde4b28464a47993b379aca162f919857b889a01
-device/google/gs101 90e24c8f229c31c65dd2b65b1c90f1cadded5d98
-device/google/gs101-sepolicy 0a47f48deb3b1147ae728cf5cc086593355700c1
-device/google/raviole 9bdb1badb045f97f5d2c3391c5c8a39c687b07e5
-device/google/raviole-kernel 0ebc714f6db06b3a6fb0e8e0e15d6e62b32843fa
-device/google/redbull ba6b81bb23708281fce680284e5913fb4e59f1c4
-device/google/redbull-kernel 16d0d5ab172b97a45f9c6155a335d9e1f2b4c51f
-device/google/redbull-sepolicy 0ff8b22d0b87d88bf3d92488388bad425b88465d
-device/google/redfin 3708e3a1a7b3e2d7b48338569947d0b8d83998ca
-device/google/redfin-sepolicy e923a1d2eb571cff8bb3923d63352c1b3ff8ee1f
-device/google/sunfish d2f8e24dd87d1a2888c10d045f748e7c5aab4dc2
-device/google/sunfish-kernel 2af6f25fdbf956d9f43bb9878cb5056e6a8c080d
-device/google/sunfish-sepolicy 3c96ea6f4fb0e7a70ed496aae1a5dd1245823d03
-device/google/trout 2a1d023be9ca7ae1ee79a2602a0c5cb77d9ee73a
+device/google/atv 82962f8eebab8b11a2e2ef29265b91a3f7563ee4
+device/google/barbet 6b75f001c043365097508fb0d2dd6938cb1832da
+device/google/barbet-sepolicy 165f0500a7d01d4ef32eda98b7e4eb8ee08a5f1d
+device/google/bluejay 1eeb92ab8ce7e0f403e9d2a0096e6383099998b6
+device/google/bluejay-kernel 68732734906b0c122806eaf416988f85ca492ad9
+device/google/bluejay-sepolicy 175be72af605b1329bb3338336d3f37f4c08074a
+device/google/bramble 4f7728a443282b350ae62257ea86a9968ad5b532
+device/google/bramble-sepolicy 5562cc56de314c101a53731eed772c4172c62254
+device/google/contexthub 15cd088f65687a89ee6d01da5c8327b78f5af8dd
+device/google/coral 6a0045e7b9a8f30dbb5bf80168ea0a0c085a8242
+device/google/coral-kernel 6a22401545aa828c318f45014133786d13fc2cb8
+device/google/coral-sepolicy 119f940b9326c813ff86266ac80d5bdfa70937d9
+device/google/cuttlefish 55de376959d68d6bee8f9f65dd78f4fdce1750ea
+device/google/cuttlefish_prebuilts dc150a79b227118b6e614713b2b7a136b70c280b
+device/google/fuchsia 4deaf1f4a322e156aab73f51ea42caa812cb1771
+device/google/gs-common be5304cafa0757b7aaad734ef3a8c5dcbc74be09
+device/google/gs101 4c4dcad393f39cd327e6ef3113adb284d200ebce
+device/google/gs101-sepolicy f6fb6ad36ba0bbd658f3500d7290734e8635f1ed
+device/google/gs201 59063122a87747623fff9c7fa9fa0a83cfc9be78
+device/google/gs201-sepolicy 067ec20f889ab83cc1af1130608ff97321b6c0ff
+device/google/pantah ab2d8eb397f892d66e55839d966d1d338746d651
+device/google/pantah-kernel 8abe6f14c20f46196440efe1a34b9bcbdf9b8556
+device/google/pantah-sepolicy 0c6ce4ca0413a0d1ec3e0478c83abdf2fdffe952
+device/google/raviole cf29ff9b2b221532eec22a7e7692e9360ec27223
+device/google/raviole-kernel 46fc1b4337e7a0d8bc932848ed586d9cf3ac8321
+device/google/redbull f595539213cee4b44b2254b0ba091db6a04389b6
+device/google/redbull-kernel 9e64e94f2d58f09744a98de87dff1245c51a7a5f
+device/google/redbull-sepolicy a8fc5bc01abecea038a0da55cd8fc26d48c17a9e
+device/google/redfin 763ceea5c9b96616e205bcbabc9f96c36029d5cc
+device/google/redfin-sepolicy d7833be4c37508f262ef3e789da7db185c621d27
+device/google/sunfish 48602102d8c685665896fc7e743fb70eba9519d8
+device/google/sunfish-kernel 52bbc8ab8951d5b6df13f1c34fd6adce2509408f
+device/google/sunfish-sepolicy d9538db97d2abf956afeb4de8a7612022608e6ac
+device/google/trout 389b36915b97921b6183509532d15a9438b27fd8
device/google/vrservices 1dc8a3ac019079bbff315920970c7b2628c8ff8b
-device/google_car ba85230511042be3b04a71c2fe1da2c3b1864757
-device/linaro/dragonboard bf8a4774a2a6afe9c9b940880ddf587676d89311
-device/linaro/dragonboard-kernel 19f45a6ce281380e5bd505555c0d97ca6a02696a
-device/linaro/hikey 90ebf94ff5fe0033784fb04206955e4b73e96a12
-device/linaro/hikey-kernel 5fb005041b2631e4039ab818ab797591e842c137
-device/linaro/poplar a1484d9fa8c44a25d52a55ccd3944a8e94eb7771
+device/google_car 9c8faceb89193bef5af369f631bb0af9aa91e851
+device/linaro/dragonboard 6a272eb2498239c16b1d57c36bfc419d28ed86cc
+device/linaro/dragonboard-kernel 1b73be6000529cc90b44cc01529a16b0236b3ff4
+device/linaro/hikey b288c71c877db1f7c4814e8271b280b9353c182b
+device/linaro/hikey-kernel 37632c695e99b9a22af8f020f63321dad30d6411
+device/linaro/poplar 6a43016b1e40f56461bba0de0909c955805c8719
device/linaro/poplar-kernel dc5a5f37e19871ed67bb9e9209e7318bb3e6ad31
-device/mediatek/wembley-sepolicy 6168f8db64780dd64154adaa5e0c93090f2daa82
-device/sample 1a8b0580139fcd49f178f0ad0f6b612d4639ba75
-device/ti/beagle-x15 24ccdbe9651b3115ed627c3c30fe53237c86689f
-device/ti/beagle-x15-kernel 4089ae6ff9094517aed7942c6103154848b04c43
-kernel/configs 5fc4f975dba0f14a3ebbcb6ab3719a6d73eca7cd
-kernel/prebuilts/4.19/arm64 512dcb50c426ce1d457cbe161f18e861307ae4ff
-kernel/prebuilts/5.10/arm64 41941a773a7c2e3337f322b40138fc97af0da7b9
-kernel/prebuilts/5.10/x86-64 59cecbfb189fe7a4bb10c6dfe7b46fe5c4da11bd
-kernel/prebuilts/5.15/arm64 028b8af3317c9b1bd85f243953bb129ff162ae78
-kernel/prebuilts/5.15/x86-64 bde87552d208470ef37b97f88e917d1418bbe279
-kernel/prebuilts/5.4/arm64 b35a6df7c8243922bc7790b6369a97e1fa7466d6
-kernel/prebuilts/5.4/x86-64 0e991399a711b306a44c72356d3c98c0a5821025
+device/sample 9c11de233f6c5e6ff5bf621f38b0dd17e2a05f6b
+device/ti/beagle-x15 15d1aee6f12ca7edbd18f7919e0eb7eb671d9e20
+device/ti/beagle-x15-kernel 023a9a6074d4a76dfda2e81c1afd53aea69ac1bd
+kernel/configs 688fb59ac60f3a471948f74245082b74cb6c5db5
+kernel/prebuilts/4.19/arm64 b38d60607f970e0e909748641514f0153c1aa33b
+kernel/prebuilts/5.10/arm64 c67dc0301e148d2d571b94c6a03f7e67106d4dd8
+kernel/prebuilts/5.10/x86-64 91b5e6a3892c7e825e4cc521a248fcd8dec81194
+kernel/prebuilts/5.15/arm64 05b32f931560cf9e55e5dc2e21f595c1fc301f84
+kernel/prebuilts/5.15/x86-64 77dbfe74ba0101aaffd8737a8186e24cc4e60594
+kernel/prebuilts/5.4/arm64 c8c1e206427f3a6235bc644022b7b990d44a56e7
+kernel/prebuilts/5.4/x86-64 e73dc86a6807f743e2edbb4b794b5a91cb36c01f
+kernel/prebuilts/6.1/arm64 a7076a43665a7899818490ed1c19a7e15b0dd7a9
+kernel/prebuilts/6.1/x86-64 e604bab987dec6d4c437bd0a8478ff12f06f1120
kernel/prebuilts/common-modules/virtual-device/4.19/arm64 31fa2c2d74f8b3659d8a2093f727486c4d890540
kernel/prebuilts/common-modules/virtual-device/4.19/x86-64 396ea43be7fdb2f7fa7f5ebf3e9aa2a3491a0e68
-kernel/prebuilts/common-modules/virtual-device/5.10/arm64 6dc61b0efc68980417e6a6b8b82afc7db896518a
-kernel/prebuilts/common-modules/virtual-device/5.10/x86-64 6ab4bb752771a3324fd8ee9e198880004bf32599
-kernel/prebuilts/common-modules/virtual-device/5.15/arm64 266829d7cc2756ee187a94040fc59110b22cdcb2
-kernel/prebuilts/common-modules/virtual-device/5.15/x86-64 8228e26b7040c620aee5ad47dc33e59b62c25d40
-kernel/prebuilts/common-modules/virtual-device/5.4/arm64 4241f2657e74ed5028bd225901d80d50bb32d26b
-kernel/prebuilts/common-modules/virtual-device/5.4/x86-64 88b2d176c62464f84e4710b11d0c020c5910e605
-kernel/prebuilts/common-modules/virtual-device/mainline/arm64 01969f0ed19a9a61cb3e29cafd976ada359aad5b
-kernel/prebuilts/common-modules/virtual-device/mainline/x86-64 8212e7f511e7eb29508ee756eaf73189cebd4c6d
-kernel/prebuilts/mainline/arm64 f08d48db964f24e942f54b8734e2dc81145c6af2
-kernel/prebuilts/mainline/x86-64 0b298a8ceaef26e9e07f7d07defe10804647cb0d
-kernel/tests a5689d28109afd0191f4d34ffc2731359780693c
-platform/art ab3b1d7e57a5b3bc01306664dbd4d1f5b927c76e
-platform/bionic 1144bd84e31c38ec669e8af67922b1f256b1d571
-platform/bootable/libbootloader fc08bda129232ceae4da0f3b6f318f0da745d2b1
-platform/bootable/recovery cee470d4a5119f434d2e454042a0ece3004cefb3
-platform/build c080f058c80a4896a2e818eb1214abd6e729abca
-platform/build/bazel 223f1e18106137f9b111ab97af5e964ac151b6df
-platform/build/bazel_common_rules 50154e7a56b7d8886b32a14dce262382e1c98c31
-platform/build/blueprint bce5cd833f856d830f6976fab3ceb8d205fe4e4d
-platform/build/orchestrator ab84a98d9fcef1ca133e8acb59bc3431f0cd55d6
+kernel/prebuilts/common-modules/virtual-device/5.10/arm64 cd22e1bc9d0e9989f09bba672db829ebbeefb57f
+kernel/prebuilts/common-modules/virtual-device/5.10/x86-64 20630b3e5e31760c4e471b2b12931a5699573bf8
+kernel/prebuilts/common-modules/virtual-device/5.15/arm64 c68fb993196ffeee1b70b10c3da8e602d16d974e
+kernel/prebuilts/common-modules/virtual-device/5.15/x86-64 463ca7b8b8b1f6c179d47b8df79f40096a772925
+kernel/prebuilts/common-modules/virtual-device/5.4/arm64 4f27972affa120ff4bf05d7b98c3d1ab738e1238
+kernel/prebuilts/common-modules/virtual-device/5.4/x86-64 19bb1957b2ed46e500386eafb79372891a2f4c30
+kernel/prebuilts/common-modules/virtual-device/6.1/arm64 71cb6267be041a0249b4c6d6f0e913e419f1db4e
+kernel/prebuilts/common-modules/virtual-device/6.1/x86-64 c430b0210a6f95cb17348275dff5823c23269025
+kernel/prebuilts/common-modules/virtual-device/mainline/arm64 7cb02fb6a88110bdcceb4acfd90104827edd2643
+kernel/prebuilts/common-modules/virtual-device/mainline/x86-64 12392d78b08bf7299d68e0f0709bb2bfc98027a1
+kernel/prebuilts/mainline/arm64 98243d4f9a8d64f1d43dd2570fc032021b2a5e6b
+kernel/prebuilts/mainline/x86-64 989a3431eb6467c5364b0dab5ff0cba7814546c7
+kernel/tests a4aec14704baea29519538135c836f2bbbd88227
+platform/art ffcf66df66431b68b7fce3b3b91dd456d7d7e865
+platform/bionic ff309abeabc40fe7e5d5b0e77f79d7b939ea7648
+platform/bootable/libbootloader 7135682957015c1d2c5fb678e7a2223aac6a909c
+platform/bootable/recovery ead0017223e288331893b3cff4b67d449bcf87e6
+platform/build 87916727a3b1f0d3495bfd16fac9271e536e6b16
+platform/build/bazel 2b59ee496ee144e1ab313edf914378cf9ca807d1
+platform/build/bazel_common_rules aa197aff72c51d6f8a42dd5eec7a343a4a0db796
+platform/build/blueprint 1b8023f7d57da03e19ff44f6cec86beea998bcc6
+platform/build/orchestrator 631954eb9b9b3a648cf1481a86d5eedc76fb6737
platform/build/pesto 6980c20af488be1cab45cc3ec1d56ecc1c017523
-platform/build/soong 1cfa289b693a576457df7c31c55719e2913f4a67
-platform/cts 1759e05f2a101c928cd282e115597dae17afd707
-platform/dalvik 50d3485794cfd45a8950d356618e441f8c4f507a
+platform/build/soong d7c3e3b0780aa45f8c1f8f3dcdf254c772bae627
+platform/cts ce95123f93d5f6339220cb658987d0e5658c1030
+platform/dalvik ba7d9699c17f44ec19be06476445b3c0517e1120
platform/developers/build bf0f321f0a16d52d62ed3c499383609810845693
platform/developers/demos 03814c35b8ee0a1284c667556260124d97466b28
platform/developers/samples/android 3b699d3c85159a41aa6b34e4a7b9586d8721c973
-platform/development 2ecd67fb89c6f97515b77c7de24a0aa33b04f3bd
-platform/external/AFLplusplus b4b7d8a1b8bee617ca0a53ac95063b4dedba57da
+platform/development b5b1e6540a7f9774b5af53d61083da5af4f180a8
+platform/external/AFLplusplus f541b161a469a14aa6123346c9b74d92eacb3134
platform/external/ComputeLibrary 1405801f50cd428018429491f77a6d4497c23aae
-platform/external/FP16 c01c51cf72e34d489a2f650d53f69bfabd927811
-platform/external/FXdiv 9f033fd0ac82b9e6243e9bfb6fce38d15754e338
+platform/external/FP16 39b08a054a8c089a52ccc842e08cb3d7f487d7b4
+platform/external/FXdiv be60de4ee8d00068488e3bdf650feb8c2d6881a6
platform/external/ImageMagick 1d10a2764b5ad9622e4d9ea9cd5c141112bf4ab1
-platform/external/OpenCL-CTS 615cd6bb1069ad71d048c05160bd0e9e600c3877
-platform/external/OpenCSD a393d05339d055affb943fd0354ae1606a023ebe
+platform/external/MPAndroidChart 3799d5b2bf5d0fbfe754a14f4c3f74fc9c5ff34b
+platform/external/OpenCL-CTS c81f15bae0f7823225adce7882487120dd1654fb
+platform/external/OpenCSD ce999c96f812d258308d28ece9030593a07f7db2
platform/external/TestParameterInjector 21e9dae08ccce536f7caf687697952338300fedc
-platform/external/XNNPACK 036993273443223d11d2f52691f49bb10e7677b5
-platform/external/aac aab69c55d9d59b4fb31bd1eb2ca1c44162e89103
-platform/external/abseil-cpp 3c72fd80c0902c89f361af34190128b0b02663c1
-platform/external/android-clat 807106584a974fcaf338d06f759b91ebc97aec8c
-platform/external/android-nn-driver 120bdfd775058c0c3d321120b2aaab7d7c4bbc14
+platform/external/XNNPACK 8ecb4af724de2cb6cee245c9056805c19642d2e7
+platform/external/aac 638dff52c9804c824bc8955e971321ebd7bc25c4
+platform/external/abseil-cpp 978ae57f3f60170b2e4611dbc325d81280e737b6
+platform/external/android-clat 0f12c7d2c5ea2ac52ce84ab83d499f3e0782f29b
+platform/external/android-key-attestation 9007698a5e550d8a97c8cde635b1ea943425b742
+platform/external/android-nn-driver 0562918257f1d9f7f8a9335d95aa8fea2d574ab0
platform/external/androidplot 9b8347467de2bda30fefd0c5b2428c4844f327f4
-platform/external/angle 4f3f0df7b6e1fa13d60e97e38dffe2c5c8c7b535
-platform/external/ant-glob a3981fae4fa505d6fea545992d842d8b331094b8
-platform/external/antlr e5cb53a934ae25bd89937ef9a9ad1a61b3253764
+platform/external/angle cb5df7724e70e1fd25a328dc3647fe799fe0cf82
+platform/external/ant-glob 95e51b66823c19140455380aed4cf49958f5a64d
+platform/external/antlr c4e29db728ee0bb93a6dbd2a9156cc8043b2f59c
platform/external/apache-commons-bcel 29460e8058d5f5c44edc8c114816920416fb88bd
-platform/external/apache-commons-compress 6f910b9feef0e6dacf00bf47f31a3b8167003b87
-platform/external/apache-commons-math 1ae315cef5ac20c547af47dd2be3c88e021f5c34
-platform/external/apache-harmony 31b2bd6b100d8384ae50d3b94c46a267985af714
+platform/external/apache-commons-compress 354f8b72be434f0fa32a9947e2a101f5b9c92d55
+platform/external/apache-commons-io 4a3b61e52ca0be6b47507ffbf441696eadbde522
+platform/external/apache-commons-lang 783f152d00ea56425653bfa3599bd5da76fc9b98
+platform/external/apache-commons-math 22b6f58bbffb82f18e96a6c189c18fedd2a7e9b9
+platform/external/apache-harmony f72a729b0353fce985432057bbea5dc930c58fbe
platform/external/apache-http 0e862d3baa700afc164e60ab973e0d20d444d12c
-platform/external/apache-xml 2fad594b389e9ae065f5df513f90f77197736a88
+platform/external/apache-velocity-engine 4b2bb6fceef5181bafebf3601a7bd009984ffad3
+platform/external/apache-xml 05be08f075097b602fc88fa417906a05b5711eb0
platform/external/arm-neon-tests 502002a1ff353d56274d50181a04775934fae76c
-platform/external/arm-optimized-routines f78d14525e1f2d37e047c0c2e6b92a8184540629
-platform/external/arm-trusted-firmware 0c29b8922d96faf1faae94f42ed95682dbf6575d
+platform/external/arm-optimized-routines 6e84c212b2967378b32e0ca7fe09335e4f3e6a00
+platform/external/arm-trusted-firmware 79da9d3917d87179199e2f185d155da4e4ec1aaf
platform/external/armnn a57a89ebdde238ffe235139659e35280f561da06
-platform/external/auto eb3e1b22622638f132a0a5886210f78ab8815669
-platform/external/autotest cd78d14b9c8f44a554aadf4a42da0e24faba56e9
-platform/external/avb 659e67698022c23d8352db856836cc0034592009
-platform/external/bazel-skylib 72255f17f27b915cc76212d16395fed8f0d2b436
-platform/external/bazelbuild-kotlin-rules ca807f220265d0063f234e8251ffca5e1c6cae00
-platform/external/bazelbuild-rules_android 4b418053ffcc02885809b092b93cd74528f5c477
-platform/external/bc 5cd1320ce4c73337007637b494b0756afb5961e5
-platform/external/bcc 0930d69f8dc995050696bb13d61ed321ffe9ff13
+platform/external/auto e186883854cfe4eba6b33cea02af8b4a1f07aabb
+platform/external/autotest af85cc740f39e257c2970b8b076e5d4bcce96ff4
+platform/external/avb 7ea9f12462c0958e33af3696f08757d64d6d7518
+platform/external/bazel-skylib bae1cb97912499c4bc24b52b7c8763d168f08417
+platform/external/bazelbuild-kotlin-rules ecb290b0b6680c622ddfb2233a1bf40069db9762
+platform/external/bazelbuild-rules_android 4aafad588d7a322456194dd61b79c2224d978338
+platform/external/bazelbuild-rules_license 40bd8edd39e2af737d05b7edac69fb8cd2ebd01e
+platform/external/bc aea1ec87638053e48b5a69b1483e1fad0b358c33
+platform/external/bcc 3b83459abe9e71408c569296b8641261364aa037
platform/external/blktrace 9d58d5785c1502152923376b0a6c55c2c8c84509
-platform/external/boringssl 2397fbdb842adc2fbf5057c12445ad2287453cc8
-platform/external/bouncycastle c6cec6ae8fdeb037c82946ceff5b0f97fbf00bf1
-platform/external/bpftool dcb1cebdcc279974315ea1876708794d5f8bf5e8
-platform/external/brotli 7dd8750f39367e74d76d2f16ef9e30423083fede
-platform/external/bsdiff 15ad500a8b32f3b30cfd62e648da5eff5043c3d2
+platform/external/boringssl eb2b7db1eb03603fe28b3a77ad93950ff2b71903
+platform/external/bouncycastle e5292d24572ab786b1fa6ae715b496305631ebd7
+platform/external/bpftool 6916d25e34ee04559485a0e015b57b3cc4f8ae7b
+platform/external/brotli 40e33799fc26de17e67d72d1d4fad7cb47ea26d5
+platform/external/bsdiff 05387cc7d51b53fec51e70815f94d275824d4c82
platform/external/bzip2 30c2054978ffd069996e994efa7d712a70bf42c2
-platform/external/caliper 2934eb43176dd0d2b04ee101ebeedfeb64b7ba05
-platform/external/capstone 4a1decb92bd513b6d55195100678ba6f1e82f145
+platform/external/caliper 656c0620986d1158467fce467f9fe2d64eca2658
+platform/external/capstone fd5fe7918ecec3000e35938e33b38b13d623946c
platform/external/catch2 ebcd91591bb8a4d35299c77b8bce50b56945357b
platform/external/cblas d525496a8dc559af6809ef04ff81db390ca2ddee
-platform/external/cbor-java adcb150ad92063263795b7b6dcefff161993bbd8
-platform/external/chromium-trace bc59333df1a0e67e010adb1a1b7c2e199565cbd6
-platform/external/chromium-webview e32f19c36b39a38f9135937a80b7af7cf116b6f4
-platform/external/clang 4d97f34b19759460998a4f16dd43fd7ee00de939
-platform/external/cldr e75d729736dd7c8f00e3c0e6e91b838e49a7534a
+platform/external/cbor-java 47b1250c4e8e17d5b4f6c23aa962966fd28f0bf8
+platform/external/chromium-trace 2967cc04a841af5b348bd9401f3210aa2f345a52
+platform/external/chromium-webview 081572c1bf7210d85bda2f6408c01d59a327f332
+platform/external/clang 37ed869361f7a7af068d4c9639691ed417c26226
+platform/external/cldr 513420a7429205cdef0436a549a1eedc247a495f
platform/external/cn-cbor 550d411e7d57c8bd55720dfeb2e2cf36cb1863f1
platform/external/compiler-rt 9f7e2c4488db5c84a5b50b6b525d4f695625dce9
-platform/external/connectedappssdk 8c99d47d1e4d910ec6e9422b7a25f15b70840307
-platform/external/conscrypt a3fa464d52af249f653642b762780822db17d3b9
-platform/external/cpu_features edd8528a949b00bc284d7d604a1ab3465d9e09dc
-platform/external/cpuinfo 418f3a29aa879c79b2f3c34f97f5fc3ac1a43c51
+platform/external/connectedappssdk 91ec3ddd08f146faf09c887e4b3f87bcd287e8ca
+platform/external/conscrypt c6e2a9d4b91cce13433466bdd8f1927b81c78895
+platform/external/cpu_features 623ac44c4ae58c52abb159ec5574ebd65931d015
+platform/external/cpuinfo 0aeee4bee5091a1801b1edc6ca790883540d5f9a
platform/external/crcalc a2330584579e3a1de604c0d703491546a39861fe
-platform/external/cros/system_api fbc51b57a6a56013e0132bcfdf1ccac3a02ef18d
-platform/external/crosvm 59546c0141de2a7ba278b6c1e58ace9bdeae35b0
-platform/external/curl 620646f2b1a9b6e8c0430f6a625e311284c9593c
-platform/external/dagger2 596ba5d418da02d8fab67c2da890c65112ceea40
-platform/external/deqp 0d1a658bd83675b4aff5540520b3a8577a7bdcc7
-platform/external/deqp-deps/SPIRV-Headers 8e7ed19a3d990980bda00e2bdf237e6444097326
-platform/external/deqp-deps/SPIRV-Tools f1a473716c1f3516c9a6073af7b7331a33a7d6f2
-platform/external/deqp-deps/amber 637d987088cd2eea496b26cb0f4377150e311b83
-platform/external/deqp-deps/glslang d09fad13bcb797dd1c78ae3702ee9f9495db9279
-platform/external/desugar e18720a607d082ddd3e45c64465d5c1cdc751022
-platform/external/dexmaker 293818bccb35d22dbf2839d839ab2eb6dff81ebc
-platform/external/dlmalloc 35207412104f4ea87765d8c7d25d50bce32d10f2
-platform/external/dng_sdk b9a3636a52d09cfa4f335810fea11dad991f3999
+platform/external/cronet b47f7ec2d897a96c910ac30c61699ad3c3a2f289
+platform/external/crosvm fe0364b4c1e5835d9c65fbb6fa6d1f5908ba4dff
+platform/external/curl 0a1a66d4c190de06e28796d65ea6abc718ddca46
+platform/external/dagger2 c767bed2d07f0195464fd764422c94dadaca170a
+platform/external/deqp 75949b4788b5d86dcda7cd85fa493e58ab7ed5a8
+platform/external/deqp-deps/SPIRV-Headers 08536495f8a964cbd80110952a0cc837527165e0
+platform/external/deqp-deps/SPIRV-Tools 1ad3d2195d74e1ec84f8c3533041dfb313b65b4b
+platform/external/deqp-deps/amber 2955282d3c2d3213fe11e5c93170b8c3ff7dfabd
+platform/external/deqp-deps/glslang d9814bea6ce0434b6f0ed3f3d265288f2e4e52d5
+platform/external/desugar da47960df7ac3d468b61e4aae9b79553f57b889a
+platform/external/dexmaker 931fd0644090f17f78935cd4af9101623ea3da05
+platform/external/dlmalloc bca4c256fdde629b82bc3220bc5df74df3378ac5
+platform/external/dng_sdk aea983095e7aacab5f8a9c350d19fdadbb72ca84
platform/external/dnsmasq 982782e3fc85b182a03b463cc8aff32630c3d251
-platform/external/doclava 796c133f3c9bbc4be36d0f12d440762ccdc51036
-platform/external/dokka 0ca33a1f724b9a1b20bd66e7c2b22a98e21805f5
-platform/external/downloader a3bf51f06eb8d479c32cb96a2345e8984fd1d917
-platform/external/drm_hwcomposer 6760d8817c96235cc23cdef39b4b230fd3c8fc38
-platform/external/dtc 916624920d41342e31e93e5eb88c5308b0bcbe2b
-platform/external/dynamic_depth f14f06ddcc8d8560e7cd63cd2baa28fce84c6629
-platform/external/e2fsprogs bd68daf6662de1a3cfd3385cd9c17c0a6390b0c7
+platform/external/doclava 798034415d62679356d8b29e821f75b957fbb391
+platform/external/dokka 95497905c9edf88295a1e62ea783501d5c9a534e
+platform/external/double-conversion a9e7a7201d16be4d5b6cc2f1499fd3cd396e9df2
+platform/external/downloader 7d424e59d16f4884dc60b4986f11d647bd75a664
+platform/external/drm_hwcomposer 4140e51b7f2c9f824b0f895a0c8bf9bc09e16b64
+platform/external/dtc 0cd033c7cf6b98164f8cd7f0a3909153af59462b
+platform/external/dynamic_depth 2d0f512acdf499fdf3d9fc26d4de46f20df0fd7e
+platform/external/e2fsprogs b1a495128918d56ff5f9ffb77b84b7de3af2b939
platform/external/easymock 78c20bdf92d5b8f4950f410d707dbc1cb3496612
-platform/external/eigen be4bd8f377d80c5f5503c13a1c83107596baa8b7
-platform/external/elfutils 38f301f63ffd64eae2a4a46b7eb8fbb0a4f36e5c
-platform/external/emma 297160f06fdba9ccbeac1ebed7efb7a680658688
-platform/external/erofs-utils e3766d1e5423ce55e428a97ff482f90fc676897a
-platform/external/error_prone 6cf00349a4ce103555db678a2b5d08aa9e208829
+platform/external/eigen c406a11213b3b9ba8ad81e66281ed374e0c17dbd
+platform/external/elfutils 419368b972179181e2bea389afdbb9c5256e2f90
+platform/external/emma 8fdfe3edb6571867664fecb6c28eb74cc08aa349
+platform/external/erofs-utils 1f2baa3d1c13eda3793f437dd1168fe3b6630dcd
+platform/external/error_prone 0767ce7654ff97ebde1654c5ae20373c6beec4c9
platform/external/escapevelocity 73e06735c7ee06982d6f2dfa7ab5bfae0b2d852c
-platform/external/ethtool 6e06be638f65214289770234fca82e7e090ee670
-platform/external/exfatprogs b05f34cc6395bdaa21d7209cfad2127cc3b88698
-platform/external/exoplayer e80c19fb4fd5810faa01aaa8e15052247702ec8c
-platform/external/expat b1eca2529998116906639fb367e1f16da2baabdc
-platform/external/f2fs-tools 3d9f09081aa2ce503a87e3574f5e0124c29a9d3c
+platform/external/ethtool 0cc11b75f3f5882cd62591d447b495e715bd5caa
+platform/external/exfatprogs a23c86b7d8dc0cce128d16904ca2604ee4985f1a
+platform/external/exoplayer 09b7658d86cdb7e00b6d8273556dacdaf7d8fe58
+platform/external/expat 98707562abdb4eb3ff9f59261bb6eaeaeadcd26b
+platform/external/f2fs-tools a7bf740b186199bb18b86022364ba16d9028df06
platform/external/fastrpc 3065a7f78ba670bff8854a4f1c2e57e8a65ccab3
platform/external/fdlibm 5b0dddd008a606e0bf9918615375760fffeb7d1a
platform/external/fec a2c7619bac44104319a7af8897f793e4a4a3d4fb
-platform/external/fft2d 712c0ece3c998d8b2f91e4b51abe688bb56bc3a1
+platform/external/fft2d 56d35e29b0ae513da2a0c646e13cf62c3824639e
platform/external/firebase-messaging 3b50eee31a498f8e976cd665e9e27704c6641a83
-platform/external/flac a1e5acc800b1cf86e570053a549724e011156f84
-platform/external/flatbuffers 86e389ce4cebf514de6adf21a6decba09c1f9782
-platform/external/fmtlib c79c908f3787af7e0e9eda2b24409984ac8e4206
-platform/external/fonttools 39f90baa8df2c0da8a75ce5da4e53c7c362ae93b
-platform/external/freetype 000df7a51fdf83fadbb4e26bce3b24149edacc5b
+platform/external/flac 9624fcd6866b5fb554fd6ead78a61c42395657f1
+platform/external/flatbuffers b0761f39d1a3a1fac250348d67d785fdc6c53f9d
+platform/external/fmtlib 41b3958496f0aabc01bb9bb94ad8d6e452510e29
+platform/external/fonttools 7dc85e7bc1df5063b411431e1893d6bde4bdb93e
+platform/external/freetype bb067abc13c30388f9d9f0183978c9f1094462b6
platform/external/fsck_msdos bc06adce6ef1d72fc9513506334e1b02cc724748
-platform/external/fsverity-utils 9c7c529077368d40e33d92783b2239fde4d5ee75
-platform/external/gemmlowp 51508f0c4e2f3c3aedc5bc6124aaa0588e2c4b03
+platform/external/fsverity-utils 372c4822512a1fd6a627ed2a397bb7740ed64db5
+platform/external/gemmlowp 08f2325e053bbbf433bff49465d932301539efa2
platform/external/geojson-jackson 3a1013e96df5be6b33fc90ba7d758bdd99ece91d
-platform/external/geonames 944d891cf908dc3bc64b8028ce7020cbf2eb0f89
-platform/external/gflags aee6dc9cf9624d1d273585d57ddd31149f2d9a30
-platform/external/gfxstream-protocols 0baa7fc35b262b5c2799b5380e76c33b5da412fd
-platform/external/giflib 300f04332697e2371d713007aef9ec30f8128607
+platform/external/geonames bef4e3a0610d6a9e8b1f0abe605f7afc9bf6e4c4
+platform/external/gflags 28fa21d3a0b0b8f0b08e2f6798141044f399d33b
+platform/external/gfxstream-protocols 1fb35d1beb793ed3379930b61a7645668cb43f3b
+platform/external/giflib 1a06eb54ba65a37216ec265a47505c9891cca82c
platform/external/glide 783bf3f7159668d379b64e6d0ce7ea319b5f3ad5
-platform/external/go-cmp cbcd0414745584b49ae672ac1a5f5c1281dde76f
-platform/external/golang-protobuf 984b43d1579a8d6c3f771e42eed0685257fa67d9
+platform/external/go-cmp 6251c118c21362a11f0ae011200e66ef1bff4867
+platform/external/golang-protobuf cdfa6a8b4120af1898f7d104f315b9b855e3a041
platform/external/google-benchmark 59680164324b2a5690fe493f5ecf55807d3987a4
-platform/external/google-breakpad 6e218db25a0c712bb8f07eaed67327e25d415f1f
+platform/external/google-breakpad 7dad1adc1a87616cbd9f525351ec5eb93de2ba23
platform/external/google-fonts/arbutus-slab 7d899c94b4c6db8fb21cdf50d9fe06c4ac167b4c
platform/external/google-fonts/arvo 91173b4b6f34bb20a3011d5532d9cd52396491aa
platform/external/google-fonts/barlow f8442e4aedbcf82a1144bb555dc712ea838e54f4
platform/external/google-fonts/big-shoulders-text d5d942e16d327c4f85f2b22fd02f9fbb4f395658
-platform/external/google-fonts/carrois-gothic-sc 790644909f880c30d358e8a047e29d45eab629f6
-platform/external/google-fonts/coming-soon e0e7b08aa17575e66e83c0b34507ed93addf3b05
-platform/external/google-fonts/cutive-mono 70b3d6ea6853b5594095381db7a0b7908df711f1
-platform/external/google-fonts/dancing-script 2604e49c3522a27e74cdb857281881c9412eca03
+platform/external/google-fonts/carrois-gothic-sc 090bfbbd8b4c0c0595ad6cf609d3ed84cc660bc5
+platform/external/google-fonts/coming-soon 40f3938a68d506c4de6842171a4c13cd74790ae3
+platform/external/google-fonts/cutive-mono 1ad8ff0958437998caa5e567d5917ca5aade3cb5
+platform/external/google-fonts/dancing-script a171e428817b333f1c294769974ae2fdbc468c0d
platform/external/google-fonts/fraunces fe6f33c6f90d8693b23f96d240bf88130a1e95ff
platform/external/google-fonts/karla 60a40a9df7bb375f2e7a81a8c82cf9bfd455e4e9
platform/external/google-fonts/lato b6bcd2e9d9e8256809d7cf6a5adde6438fc6c752
platform/external/google-fonts/lustria 0bd87a34c637d134828a9d1a97c5e1228d61d8c8
-platform/external/google-fonts/rubik 7de5026ff772bd1659ea60fc14d568c154bf9379
+platform/external/google-fonts/rubik e7d07af0772124a9f5ffc463f8d18bee13ee174a
platform/external/google-fonts/source-sans-pro 9b92a072c16b22f8a4e9379ec20e9071d16683be
platform/external/google-fonts/zilla-slab 5c6061004e275a7b37f44532b04e62e2c0f73167
platform/external/google-fruit 102ef33dbc86d485fb3a763e5135da673dea870e
-platform/external/google-java-format d96de6e21faf6cc9d3a4a12a3efc70c318cef58d
+platform/external/google-java-format dc1e556bee08f9fb90e6836bdd929976b149da27
platform/external/google-styleguide 839fa273f50bdda7830edee05e5f7fdaed4674d9
-platform/external/googletest fe4decd038c44d22490a610efd7847ca20cf3407
-platform/external/gptfdisk 3396f79817c4493aac12f864760e11a3c0bf9bad
-platform/external/grpc-grpc 1531ed1100c2bce5aec9bfad78861942c5ba3e1c
-platform/external/grpc-grpc-java 06f887d84a2b5911bee91a3fe3728f54a4074aef
-platform/external/gson 670b66deb1fc036998ef7fc84c3fd970342e3db1
-platform/external/guava b210fa96d4d6184149eb7e293bc9980e22f3a2a6
-platform/external/guice 8dd0a8df30d0fadccfb74ffaddd0447b2f1afa38
-platform/external/gwp_asan 9909f56c9cadacb6ff3147c9d50da2b162e00af9
-platform/external/hamcrest 4c1b3bf174945532599d9a5562881fbe5e21140a
-platform/external/harfbuzz_ng e73155c4c6fd0d74edfe2c8611f6e4d9fda6dea7
-platform/external/hyphenation-patterns 7584978f2bd93c79a93e9fdfc4114c5b5699f845
-platform/external/icing 80303fded8ea10e0de68b2a3300e0e4b14370fc8
-platform/external/icu cc9db99ec7f54c20aa92e1b40e43b12f253c7911
-platform/external/igt-gpu-tools e512c84b2f18ec16cc032a964298378753dd2456
-platform/external/image_io 1d58c1129dc192b8274d572017235f891293ae41
-platform/external/ims 6af69fd8c98f447d6e87ef4af000a595abcfc356
+platform/external/googletest c0c45077916618b8123e6c4ebc4681c531ee6467
+platform/external/gptfdisk 91edcc37d45d8cc0e9cb5ff4918b5ba2d5297a57
+platform/external/grpc-grpc 5281b87313c736fea76e3f1099e33204aba73d0b
+platform/external/grpc-grpc-java bb4cdbdb2c9a1d685a109e8a6dee71208027db98
+platform/external/gson 82f99c294e068abcbd1c7d08c516bf89925eae3b
+platform/external/guava 9324d56f67c46e40c0c5a9488e57ce734fb0f9e3
+platform/external/guice ce6853c74b811c93ee46e48a89303b2dc9d4e228
+platform/external/gwp_asan 6e930f587fabc18bab0ee2fdf66e5496b2b04eb6
+platform/external/hamcrest 200bdda8b151e01528c2c1fbdad255688645ea21
+platform/external/harfbuzz_ng 74bef5000c565642bb2ea0bcc5ec9333d8b72099
+platform/external/hyphenation-patterns 1894d30afe6e30418444740f3cca3a4f1803e7f8
+platform/external/icing af6d8e19ac4500ff2312a4543a8a2c993057cff0
+platform/external/icu 95c0d8cc97c43ff07499a8122b1b3b7edc741d09
+platform/external/igt-gpu-tools 00276db4dfd26615183bf238d843f9288cae9e09
+platform/external/image_io 84a5e2e04d411e1bdbdd58f79c47517ed4f4f411
+platform/external/ims cd12ec284af301f28934a7a8ef23efe3cba3f10e
platform/external/iperf3 d810f388faaa558fa12fedabcc08c02a4ce835fd
-platform/external/iproute2 1cc46d6ad529b9fa076c396b43a0720b84898caa
-platform/external/ipsec-tools db68e1127f8b69ca2d299d20fa10cb7ecfbb0617
+platform/external/iproute2 e1c0934b082915b6993db3d5c52b674127de0acb
+platform/external/ipsec-tools 4d7d094e9a2e38448ca50697c14ee8790ffa4acf
platform/external/iptables 043923390a5de839a7be64c2244bc57a40671b8b
-platform/external/iputils f520b137a0259d5fb3b7031a5234e84bcf572eef
-platform/external/iw 4777a60c176706b124a797b088d0cffc83819443
-platform/external/jackson-annotations 3f402972aaf3cc84623497e649390189d9fe6127
-platform/external/jackson-core 374b1857db62c9bc74aa0ffccf622b4a46751992
-platform/external/jackson-databind 30091dba4d6dbf2467b82c109b4971637ed7848a
-platform/external/jacoco f09bb6653bce880f6176265679854ace3df2159d
-platform/external/jarjar d926ad812914b2cf00685a07620022dcc77cb22e
-platform/external/javaparser c331b2ab522141f16c43a89ae86417edb24257d7
+platform/external/iputils bd36e4131c289e7f1eefb5a271205be1896281dc
+platform/external/iw 792456395eff0ccf28817535032479b22847bc3a
+platform/external/jackson-annotations b73fb394133048329b826e42accc351b0e73408d
+platform/external/jackson-core ea0d9ee74e9f7b9bbcf4c0fb3eb4967b922d3851
+platform/external/jackson-databind 7188a442a84aa75debd737c73e45f8e1a3186f45
+platform/external/jacoco b9679f0f715948c30985137f5652181f586a5e7e
+platform/external/jarjar 457ffe2a00d15228708d93bc286d293a726e7ec0
+platform/external/javaparser 08faaaa44878ad0d7291654e6cae0a425a10c71c
platform/external/javapoet 7d694e1d15d48ea8f1d0fb8fdf1ce70986a2b211
-platform/external/javasqlite 0c861da745713294fee87c7d11f8a86bb2736af2
-platform/external/javassist fe8d83256711b4f9cbdb485d8a3e29475a6d4952
-platform/external/jazzer-api 8726f2d0fb773827bdaabfe107d76fe1fe24aade
+platform/external/javasqlite 3af16293e07e4274c2af9916e7f48b6bed5dd311
+platform/external/javassist d5ef73633e83fb0f12da792629c9654f5de18899
+platform/external/jazzer-api 405ba82d392eb440d3c51e2f873a1e729ac183e2
platform/external/jcommander 0ffc853ecc79ff1d22b33525174da5904a3fa12f
-platform/external/jdiff 96621d19fa4683571df0d6f078523985727ca44b
+platform/external/jdiff ea701cb502fd6c5b82334e7097abf7cd575634c9
platform/external/jemalloc_new ae39186d99efe29e8773577fc35a36c49500bc23
-platform/external/jimfs 1fab01c11350aba282e64baa94302b8d5f9ee54c
+platform/external/jimfs 89ed7968263d45f6f90e41a57791b4884acc58e4
platform/external/jline 1fa13171dc2b6621a8f1e6e0738c21f9815091ea
-platform/external/jsilver 45d600ffadcac2cd202b0be0216a284232d62a86
-platform/external/jsmn f34f42ed4bd77ed845559e5a3a73f0f2095be3ba
+platform/external/jsilver 8ff7ab186fd3ae54ac291b8147437326393c62b3
+platform/external/jsmn 26cde347569e34c00dad9a0c5af9b3f6ce1c967b
platform/external/jsoncpp 7b7f3fdb8d74db9084f74d2f720a41e3c9a75878
-platform/external/jsr305 871b84f4b99daeb7e007b2807fbe4a4b780a8a50
-platform/external/jsr330 658284b28b24a716731600a9c7ecf5fd063b5500
-platform/external/junit da7c97492932af679f97510113e53e914b398387
-platform/external/junit-params 7c43b3c9633599c9d41fb23d5bee75021054bb81
-platform/external/kernel-headers 148cd0999c5d50d3000335873e2d1a836fa55a03
-platform/external/kmod c4d443a5668c88b18affc26466207dc815de5bb3
-platform/external/kotlinc 5bf177410654ce238f94c7a49e64a781fdce2d42
-platform/external/kotlinx.atomicfu c04dd69a90a3613803c0f83a2100caeb03e984cf
-platform/external/kotlinx.coroutines 68a386a1dae08f7b034c546e5a1454eac9cfe665
-platform/external/kotlinx.metadata ab85dc2760096d12994dfebfb14b66dc288bbc66
-platform/external/ksoap2 cb0fa651d30b35383b811195c4c2088d9affb202
-platform/external/ktfmt a241c34bc8fb779f4ebf5ba818b069884d5ac995
-platform/external/libabigail 4d1bc3533d4d11254cd38ec5615e1f36bdbc0a28
-platform/external/libaom 9bf542908191fdec1891d90b725530e42f3ab1a2
-platform/external/libavc 46aeaab18589e36f66a75c92ba6ed3ec908d2c3b
-platform/external/libbackup 21840276ba039d03ec2b8701dffab25c8267cb8b
-platform/external/libbpf 67bd74e9404fbae1adb513f1d70272ae046c55af
+platform/external/jsr305 f0277ec4ca3fc2b36e12f3c987fe8abacb97111a
+platform/external/jsr330 7d984e42cacea0fa7ef69dcb84f8b2041d29e9d6
+platform/external/junit d2b1616cb539e6a0ca632eb0f96b5c2e408312e5
+platform/external/junit-params 03a5fe7c4e9cd89113638258f6fcce0a4193456b
+platform/external/kernel-headers 84f0ddcdd9841908ea2bdf9cbb3a1998a0b9a03c
+platform/external/kmod be4f7e4175709fd0e1219bb8eb5aac13c4a76c00
+platform/external/kotlinc 4eb154d9a8b00971dbff71bf186bd7408ddc98bb
+platform/external/kotlinpoet cd8c6483505a52c79cd8db562df6285aefc1301e
+platform/external/kotlinx.atomicfu a5cc21701c0a56ffc41a260aa8eca5259cb8b213
+platform/external/kotlinx.coroutines 99b6d41112a3ff144a04f80c1314d79953ed869b
+platform/external/kotlinx.metadata 8e60bf226d98554acc976e93d2c769d5f0b5af58
+platform/external/ksoap2 19d275075332187277fe573372649104d173fdd8
+platform/external/ktfmt b6d3c4087a824cde7b2a0811478c7c6d9f6488c7
+platform/external/libabigail f932064b7353348213ab14825e57f740f3d28471
+platform/external/libaom acd2391d0e783d87786a35b3b4dbcfac79468a6f
+platform/external/libavc 69966a8600c166eb8c9ab97635c9bf11ddae3c81
+platform/external/libbackup 7650f0321fcd692ce63c46c0e2849f99dee63330
+platform/external/libbpf 955a3de1b95ec1777dd168f3ce78001a45f34fe7
platform/external/libbrillo 53420514a426bc75b592969dd906a4e60b6b00e2
-platform/external/libcap f7a485b92b791e59317f4ae348a2d5b6853c42dd
+platform/external/libcap c40671b04549f1ca7403788cc52a02f70d82f786
platform/external/libcap-ng 61c4ba8efbccf1338f857846d4047aa96e87f774
-platform/external/libchrome d224a1bfd3735015752b047a3c8f3117b05a66b5
+platform/external/libchrome 78214afefa5ec13bfc19edf08d613a7d798046aa
+platform/external/libchrome-gestures d8446b535828c4ca10aa0eb75ffefbbca2cde04c
platform/external/libchromeos-rs b27975d123683186505d746bcf516f8bb469da82
platform/external/libconfig 24d8529c70e48df31edfc397ef8cc417d9442d89
-platform/external/libcups 29fae4d9b5485f95c5fdd7f2d2d789e55a702f7b
-platform/external/libcxx 2487a5a2a40ccc1afc792b6d4277d6c42f8051e9
-platform/external/libcxxabi 8f9a15eed3a53c4055aea0e6c2d816d843dc8406
-platform/external/libdivsufsort cf6573b676b95b468f621bb2bb4f7290c2df630b
-platform/external/libdrm 671ff9d25a1ec6801597c8cc747c75381622464d
-platform/external/libepoxy bc5a3f62fbb905123415050e517ae6fac2b1b034
-platform/external/libese 17eeb8e64856d113c3c3b5a0501e6acce22dfe92
-platform/external/libevent 24295d33f7d31cd5a99e94ad1a9af1f828e9595c
+platform/external/libcups 56ea9e7007a6cb10a809e4a42ca3201d9cda3a0e
+platform/external/libcxx 519016360f68d541ed83dc25596071de9ef656a8
+platform/external/libcxxabi 478d285a753fe385db5f70d447a5bca20f4b4bd5
+platform/external/libdivsufsort 46a0dc68594de255d2bc1f2fb1e933e959d77be4
+platform/external/libdrm 119b600e189cd4fb26ef3512b684338ff934c230
+platform/external/libepoxy 5750f73d618f0748118ed24048d11e4b9c726a1e
+platform/external/libese 4e34e07fba150fde463e65174bd3dfa42242e7c6
+platform/external/libevent c315c9f34b37e5ae135a0b98bee83b3b6d30c68b
platform/external/libexif 5aae61d99cd31167d303d1551f7915727e7597c4
platform/external/libffi 1ee03ac50fa45d5d5cb935d81fff21fe3d191da1
-platform/external/libfuse 87daae8260685f6b0e09ce2be86d81a3e5de0118
-platform/external/libgav1 4f23ec9a5bf9634f36196758c7bf400ededcb167
-platform/external/libgsm d0dd14a24b2232d1bc2e4d56c66fc8cfa3662251
-platform/external/libhevc de58ead84f65711fdb0fb6300cf0b937c72c56ec
+platform/external/libfuse 62c6c510a43c719916077f765f89355d5f939740
+platform/external/libgav1 09a2d3e2f711201046d2b3043b067382cb420365
+platform/external/libgsm 6b76088a1c58e924dd83f88193fac76743cc741c
+platform/external/libhevc 80fe874429a27a4c8d27e50ae725ff78a92ec32b
platform/external/libiio aa30157751eac3fc66bd8d3c05f671fe22173dd3
-platform/external/libjpeg-turbo 5d3c88fac37d475230e9e39e41ba4d2563445139
+platform/external/libjpeg-turbo 20f746f763f5b7d3fb0944b818404448f14b5071
platform/external/libkmsxx 88d593da1959fb8b39bc8ddd3a3f817417d71db9
-platform/external/libldac 61cc12db576095bd6fcf69a7603f0a5800176e50
-platform/external/libmpeg2 847e3d0067cd5a593f8d15f636ffc4b1f4782b92
+platform/external/libldac 1109e2c255614d1980db7c83009aace56e3ee66b
+platform/external/libmpeg2 10e183afe02c07b01a514dd3ad3ad2fe83df8aed
platform/external/libnetfilter_conntrack c793c5e9d06d0d99cdde0bf4b2ca93071b22cc5b
platform/external/libnfnetlink 36b2e95da1c45066635d4bd0d975deb129fc4dab
-platform/external/libnl efff083c998a5522fc7b10d8e9af5ab673dbf719
+platform/external/libnl 93561a06443ed558faa3c1fab5093b483b64ead3
platform/external/libogg f577a4172a8e994e7490cea40f19dbbcdc2c9126
-platform/external/libopus 583c2f1859217698441662ebff1a2da563303024
-platform/external/libpalmrejection 834d9728663470f83306b2fdcb3a5f36fccaeb24
-platform/external/libpcap deb2d4fe1dbea597fba963196df9eaebbc15180e
-platform/external/libphonenumber 39f0e8dbd9211fa1988f5f2f8110ed5443260a09
-platform/external/libpng f0d83724a476d6f08addee22a92f7702a2af1f4a
-platform/external/libprotobuf-mutator 4809a21bda5507461ce57f8e67d28a091de0d753
-platform/external/libsrtp2 d53f3b52e09133dfb41f443707200ead8d9e5f39
-platform/external/libtextclassifier e560e0d427475353f5175f44256a537633b2c8f4
-platform/external/libtraceevent fd0f027bad29fedc511182d54cf8dcf15bc13490
-platform/external/libtracefs 88c6000bd334a5c18705d96c129d9b4750c23872
-platform/external/liburing 5296a5dc05d910a34c4d5e33da4fdfb4593d09d2
-platform/external/libusb 7b0b6752bc665262e7347021fcab10ce959173bc
+platform/external/libopus f8c750c9b3b662663f2ad6148af2f9c2563913e6
+platform/external/libpalmrejection 2270a16340c8ea443ce6df056a04731bf5f67c94
+platform/external/libpcap e4f14459800ae87ed5162d39b41ed224230606ee
+platform/external/libphonenumber 6c85a131fbf38801b07fbb73345853171e761d37
+platform/external/libpng a889a01ae5c1c3a942558a051409ecfe292f268d
+platform/external/libprotobuf-mutator 1f657e7b8ab2a95b3da744ca38875161804bf619
+platform/external/libsrtp2 99c0ae83c4556bf9ca3b867ee2906f59b7126c33
+platform/external/libtextclassifier b44d74773a74a8b62155a5183d5ed1ca357ee813
+platform/external/libtraceevent dec3c376f545d90a474db10516cc4a1662ef25b0
+platform/external/libtracefs 0caa3f03e2d0f41763b51205b7248ea8974724f4
+platform/external/liburing 28bbf964fe4d6401c03f78f2295f4e8d24f35359
+platform/external/libusb 360583157bb9d8a11ce1d976cd9f4659db234e0a
platform/external/libutf 6c4633be06e1ebe206150c4860f6424147968226
-platform/external/libvpx f775ca1853d787b1cd9ce35ec0a689daab3173e8
-platform/external/libwebm 2dce9760990e3646899ee8cbdf1cddff50c7dd62
-platform/external/libwebsockets 63fd3e56f3f2c6920bbf6747645f289d384c22a0
-platform/external/libxaac 52e3ebdf67a044816b6a1a855bca956c649cb3fc
-platform/external/libxkbcommon 073f98c35412488f29fa9974a66c7b6975731848
-platform/external/libxml2 2aa62fefee36210c3350456879af607b712bb82f
-platform/external/libyuv 6a62d51f67f4db74ddecc4c29f6ca388609572b4
-platform/external/linux-kselftest 5ae1dcc4ab563211109cbe4445966f32256da24b
-platform/external/llvm 248e33917f8f7a7a0d812f06482831b356356afb
+platform/external/libvpx 812c65c1e717cb0d8e6d3db66970adf6a88390c6
+platform/external/libwebm 766f7044ba34b8803f220f9bc9dc65ec1738f6ab
+platform/external/libwebsockets cd9d0869aa6e1ff74bb1e0c25c991ba0d4f5264d
+platform/external/libxaac 0d6726e2c619c5f4663bc8f2f0bdf1d986a6d99d
+platform/external/libxkbcommon 863030e90cdfa7941048d1f14198997edeef52aa
+platform/external/libxml2 909d1a0f850686713bb697a9371af4343cd1f70d
+platform/external/libyuv 342ca3cb9ad9c6c6ef4423095566204886fc74cf
+platform/external/licenseclassifier 22bd2bd64d82495e023f1caf07a4755bce3e051b
+platform/external/linux-kselftest e9981602d9168f1930a982a4b317ffb7727f355a
+platform/external/llvm ab882123de9e4db1cb2711c52a5d05d328675bc0
platform/external/lmfit d4e2f0edbf898336a4a63c79d11e6d12e3f6bc02
-platform/external/lottie 188c6310c2dce31c8b0757acbbaf63683d836026
-platform/external/ltp ad1945db559d5042881b135a80f7b5b67939a121
-platform/external/lua ae73059043431babd953dcadffd1315df60cad02
-platform/external/lz4 048c38e2bcdee3a2c8e8afd39bca2b4d93eb87b5
-platform/external/lzma 840661150bc64385b0b337e334f35ff732f4c82c
+platform/external/lottie 6f78f71ec2bbdfa17c24438e2e64422c30f5cba6
+platform/external/ltp 9f72a8d3984e4b4037b9c409bfa78e714d4978d1
+platform/external/lua 8e889734456b175eae12b71202f9c7c98dd605d5
+platform/external/lz4 b36ff997a854c3dc575ea436f64dceb67fba892d
+platform/external/lzma 3d30ecb3935118d084c4a1457a8993785427a290
platform/external/marisa-trie 3b71c518b6de4e7d1fc9a18f43ee29c5f0c76c19
-platform/external/markdown e5dfed10bfde57e68ab7ea2afd9d374e2a338ead
-platform/external/mdnsresponder 6e45066f94d28f5b98132b41dad62fb2a0ec88b9
-platform/external/mesa3d f9c5145870644d9f188776e8cc23ef007a6ca9a4
+platform/external/markdown 59af2b2915a9e01fb627171e4d18e98d475da870
+platform/external/mbedtls d8a73fb88738415327d568f7d0e7ddeb11f4c319
+platform/external/mdnsresponder 4a91d6add457174dfec34c51c464b353795a836a
+platform/external/mesa3d d0d727ca0fb73320c133333350b10849650bf8be
platform/external/mime-support d94f12474474d1c8f706238ed82385fbd2a58550
-platform/external/minigbm 249662510adfd68313b38b5e642700782a6b026c
-platform/external/minijail 643f098fa116505b42d4a90c11e1475b1466c4f8
+platform/external/minigbm bdf79f9ef0047443af2b23406743ec5c0fe97c51
+platform/external/minijail b8eb61d61636145a05add058951f3fa357521c52
platform/external/mksh 37fb955ddb3f0034d129fa2602dcf0c58b35d9ec
-platform/external/mobile-data-download 13e28c894861eadec3ea17fd322161df661a2129
-platform/external/mobly-bundled-snippets d4fb9730e720a55e77b6643716cb43b7bf51dcb5
-platform/external/mobly-snippet-lib 54997cf2856c98381293fcb8e3c32b941d38525e
-platform/external/mockftpserver 54ff96d2da7f3ba7570530eccd48015c1e899023
-platform/external/mockito 94aac1d4e088294aeda47b1c374eaf4cf2b46f4c
+platform/external/mobile-data-download abed6de63800f7a12aa237145296eb832271cba0
+platform/external/mobly-bundled-snippets c1eceebfff2f51e1696e079fc23f5e5128aaca0b
+platform/external/mobly-snippet-lib fa82c5c5d753f24ad3b25b5dba40d7dc1f1e1581
+platform/external/mockftpserver 00aef00dad2bf2c21ab7a46e126477f0e9306b37
+platform/external/mockito e66cc35a0c13ce3bdfa3e84037e1f797ae3f3e1c
platform/external/mockwebserver f6880ea05e1eb6e2a97951b71cbb061b3da07eb2
-platform/external/modp_b64 6a1af2b157fec9ea8d1731e3dd1ce75eb87c5a8d
-platform/external/mp4parser 392dfb3b7ab4ab78365ac9b8a020643dfe585a83
-platform/external/ms-tpm-20-ref ad7847a224fa842de78d57a293a362205bee6d50
-platform/external/mtools ad4f8bf10905afcea11bbecaa1352826256e217e
+platform/external/modp_b64 113a4586252c3e40bbe093cd158d95b3632a8c2a
+platform/external/mp4parser 5032af3e819cde7c17e44afe0b777427ef44cd4f
+platform/external/ms-tpm-20-ref d10b8593d5daa3ecc3b12cff3f1345b2746935c5
+platform/external/mtools e68e59e35367cd7f7dbcd270a7a1f4372ad0f90c
platform/external/mtpd e4ec3907a94a22d915e87e329f6408d63abd672f
-platform/external/musl 08ff4393c36d3d61c1f0994755b1f9935d08ca63
-platform/external/nanohttpd 4e146526e09bcd61532721a54eb7c8885bf8656e
-platform/external/nanopb-c 987a9d4096838e17151d1a6c6daf1822a4dd38b6
+platform/external/musl 855855312aef444ccac371ad3c767fd31e6c6355
+platform/external/nanohttpd cab514e09edbb16ace9755be70c39bb36976de8e
+platform/external/nanopb-c d3a0ba379949ab07d6e423228c4658666fe84163
platform/external/naver-fonts be181d85b8b600bbc14fb65f6ec0d534f923dc44
platform/external/neon_2_sse 55819c5d414d804c947dbc57922f6a3e9a15a94b
-platform/external/neven f175fc6f580f7e2ee6ea39cf8cad8a7f3755286b
-platform/external/newfs_msdos 2ed49456d3518f5e9aa44365a7391faed047b921
+platform/external/neven b9f21a08a00651b34c6539995a3b2f9dd3bc36a3
+platform/external/newfs_msdos f4768f3615dd1319fcc3f9df3e758035a7abaac2
platform/external/nist-pkits dd749b463ff64f12fdb4606f8ea060e84b884573
-platform/external/nist-sip 1f4f65f73a560505e2ee7e7e0340d103e21a1aee
-platform/external/nos/host/generic 756aaf617edaccaae8cdd90e748fe862348d7e92
-platform/external/noto-fonts 5b44b7a430a9b82d19f090e957016fb95d0f187b
-platform/external/nullaway b343a2596b3526b3f5daf21a809e4b9ad72b1f33
+platform/external/nist-sip 5de9f9492658a836d5d4eb3a334550cd71976fb4
+platform/external/nos/host/generic d1dd2be988066256c482c4047fd5e6c08d93a6a0
+platform/external/noto-fonts 173914aa836955299827c6454a51955e6bfb955f
+platform/external/nullaway 35219a8e342cd985557ed49631ff2fa604a8c65c
platform/external/oauth 09544024e174235981322fa7fbb7ac112cb399c7
-platform/external/obex 2f9e2c65abaa874a5d5001a245dbf19f95498796
+platform/external/obex 8db505c236be4ae377569620fbe728135ef118b7
platform/external/objenesis 294f3f12abd305de1b3f7636f348ca2ac89b48f0
-platform/external/oboe 3467d1787e47afa011a0f03ec68e2d05644c1c6b
-platform/external/obstack 531a37e79c5f690a52d0d55b2824b00b0cdf79de
-platform/external/oj-libjdwp 0a8b0d71c82d669115b3dd51b5fd91ddeb4bf451
-platform/external/okhttp 8af169759bd2bd451c9576181270bc4de02147b7
+platform/external/oboe 25410420eb7935d0b74ac9b6ab3b49b7ed55ff4d
+platform/external/obstack d7e4270c0b4f7af1462c4d4ea19c0997d636c67b
+platform/external/oj-libjdwp 7991dd558994b67f6a1724f0b997bee4513ad79e
+platform/external/okhttp 4902f2eea5acd69fb4f9ef6fdb2941fd1855932c
platform/external/okhttp4 73ae9756098533a6fe58aa1149c88f5304f4124f
-platform/external/okio 9c0beeda5a871b69717d31063f7f90d07fe399d3
-platform/external/one-true-awk d0e7d4e71e426ec5bbd9c5ea36dd5fe1e0cc29f3
-platform/external/open-dice f4028e2bf4f05a83d53974f559f3218031db77c3
-platform/external/opencensus-java 61673fde38876be19856185dc554b3611d9cebff
+platform/external/okio 8f68974e422dc505b63e3605e58d552b078c114b
+platform/external/one-true-awk 20b5e942ab5cc681c2594e18fefc875ef6bf445a
+platform/external/open-dice dcd30097aac85aaa62337ff05ce0f2a8928eff11
+platform/external/opencensus-java 7ddb4e3d028c5af0b76a83fd7810d1c1df1d68dc
platform/external/openscreen ac368af39b482940267745378a5e93d8b136d71e
-platform/external/openwrt-prebuilts 5664beb2726c7d94677064ebc670b0c8ad3f447e
-platform/external/oss-fuzz 116261da51e1760c0ba51811924f134745917dbd
+platform/external/openwrt-prebuilts 9626c0bf4534c388b2f7b4a8ad966fd13c8547cb
+platform/external/oss-fuzz 45792028e46ab7cba95cedc05426af5b1ad4ca8b
+platform/external/ow2-asm 13b25b20d391079dd21ae93b70e38825e060a26c
+platform/external/owasp/java-encoder d86fa4e886eda62c4718b24d0feff83868c72fb8
platform/external/owasp/sanitizer 364933238830f2762654c4eb97bd543b890d1848
-platform/external/pandora/avatar ad4b2261dafe7b87beb74da499fd193960c207a7
-platform/external/pandora/bt-test-interfaces abbd5c6844e974ae6451a88e12345f5d2f84f4c9
-platform/external/pandora/mmi2grpc 2fe5b8408139d28c25c5dcfee5e2fcd1d50b9cba
-platform/external/parameter-framework fd307c620e7fcda41d7ec3f5a746208a410630ee
-platform/external/pcre 2ce5bee26e7647eaf3c4e74643a84f1eff43b953
-platform/external/pdfium 433d10c61ac1da9b9d816744190b8425c0770e67
-platform/external/perfetto 32d6db8d4d5e2a7320fb6c03083c278d30e30f61
-platform/external/pffft 31737fe6b6fa09314014809eadb000eede5f1e87
-platform/external/piex 49a622f51dae121104c4adc188cc2e4690480b76
-platform/external/pigweed eb9bae44671a4991791c2e62a482578a75fb1db1
-platform/external/ply a97ae03d81080e0334a18585d53ae25829ae9da9
-platform/external/ppp df1d8f58104eb3c7a6cda1c5e36d71a342a57212
+platform/external/pandora/avatar 7468cdf7b8db3a0c59d767a62e36303b2b273abc
+platform/external/pandora/bt-test-interfaces 40fe3caa24e4bbb1a90782811f3248b74c15d8ad
+platform/external/pandora/mmi2grpc 3201ccc3a472bb11ee69a0bc04a7a945baa7af2a
+platform/external/parameter-framework 45018f62fb6e7a7df64e558f8505cae7f6ac5121
+platform/external/pcre d5d48aeb62970e614682acddb2fc42fba74cdaaa
+platform/external/pdfium 400b68e7bc10286ff2f3276f157b5bdbd7a91b3d
+platform/external/perfetto ec1e25486e06b8f15be1f871b0b2720a22c47161
+platform/external/pffft 38c8fded9539a747d507ddf71a0c3ba24e4d654e
+platform/external/piex 737f9cbcec1da9b9068c5ed6dd755924586b76c9
+platform/external/pigweed 2553ce1e7154dfd24357bbf89057c7dfc621b3e9
+platform/external/ply 2b44d2d74803e6772274a4af1ea327a0b21eb2bb
+platform/external/ppp 1ad515d565dcb394d5bd5942be6e7090b6447f76
platform/external/proguard 26247a04689a6cb7778dc754e6decc98a5ef0b47
-platform/external/protobuf c68faaff148d4032996c073170dc89f93cce0688
-platform/external/psimd 7ba0124923414592069af8965adead34c584a50b
-platform/external/pthreadpool da992e25609653fe8e6fc758d88d113dc511e938
-platform/external/puffin 483428f85d72ce93a5c246a29019b82aac2c0ea2
-platform/external/python/absl-py f821ce5bada9a697819318d304dcc199b337df4a
-platform/external/python/apitools b3e5b567495e721b314481a541ac0e5afb2ce240
-platform/external/python/asn1crypto 70eabedf1facd5cba2fa7bd879e4f88c35982987
-platform/external/python/bumble b74aa5991d8e79cd26d1e4407cf98a3945a187cc
-platform/external/python/cachetools 47cfdb1500964436f0356995e7b1fe8c5d294631
-platform/external/python/cffi ea89d33bf572311a1b492987bc37c318f9f02b17
-platform/external/python/cpython2 88396a9e7cc2df9f477715bc6b6cba75cd2c6f00
-platform/external/python/cpython3 7a9cf08761c1efbd1072e4bbf7639d9752317aa2
-platform/external/python/cryptography 3fa8b20e4cc6195688e7995dcb17b7c0b43a7185
-platform/external/python/dateutil 389736265db7d0fe6d4a98c9d02cfd57f161bd18
-platform/external/python/enum34 60ad5a8ba65c11f7a1e8dcce4330a812876eaf4e
-platform/external/python/futures 11dd25f3616049c958bb088ca6e55912e7bc2e42
-platform/external/python/google-api-python-client 5e717dc9eb8fa888db6f4aad41c0b84037097f69
-platform/external/python/google-auth-library-python 43c761104be6c7b1c1ff8478a107c834c7e798cd
-platform/external/python/httplib2 b6f3646a29d2f50a7b53e70d53657dcaa4e215ed
-platform/external/python/ipaddress 054c4cb622af64cc8bced83e2e5d59a48191b768
-platform/external/python/jinja e97566db6e106941f618bb4c38831f72387012df
-platform/external/python/markupsafe 9b9669db3b9fad39fe82e38fb6a9e3018f514d35
-platform/external/python/mobly 71b0dd6e7fc8f31a876e051a0c9657f2fcac86c1
-platform/external/python/oauth2client be1f52ddaf02f596d935601db269f4766cf9b251
-platform/external/python/parse_type f6c51e8378dd43bea5d9f75306e15d4db3d5e231
-platform/external/python/portpicker cf0a4e146f9b959fd6f56bd01c52e482cc7b7c46
-platform/external/python/pyasn1 ee5345981ab997758eb32b33e5c85c1f4963199b
-platform/external/python/pyasn1-modules 83be966329ec42cf3c58a115744c69f6b7fa4a1c
-platform/external/python/pybind11 60dbdd03d0de1bc8ca9c674f29d864a22c30d9b0
-platform/external/python/pycparser c2080650fafb32310099110c8e88ee9d2fc8eb74
-platform/external/python/pyee 120ae2408ae9a5f52fddc456e82325f45cb0753a
-platform/external/python/pyfakefs ea1cb62dabb1d9ae7634882101f023219dfcb2bb
-platform/external/python/pyopenssl fb8506f13955b2d0e08fb901b512bca07bd4fde7
-platform/external/python/pyserial b23ac7d8c08dd159ab3060e65d62a6c003784683
-platform/external/python/python-api-core ec4c660388ba11cbbd3af9ececb8bd3a0f98952f
-platform/external/python/pyyaml b0e86c9a1a24aea1a570f07387f59dc03aa5565d
-platform/external/python/rsa ce710d0823c53f141528a2cb394e0ab2db331f43
+platform/external/protobuf a3a81024fd963ae753f70acf75e08e989c84a1d3
+platform/external/psimd ab055c4348c85d289d1c059b705cde6298be00fb
+platform/external/pthreadpool 9e7292856c65f1eff35ee8b98ceee49608e60e71
+platform/external/puffin 06e80242f732093881030c2d9b5eb245a09ca8e3
+platform/external/python/absl-py 4a8480615ea8b48dc6105bf54afc06fa60a3d1c1
+platform/external/python/apitools 70af3004ea8ecb16388f4941a49d966ff98f4c72
+platform/external/python/asn1crypto e83c340f1581821c44806f56a15fcd216c5afe85
+platform/external/python/bumble fde455227605cc0e46cb58f3dea3a07f13bcf71e
+platform/external/python/cachetools 6fe7e081487c903e70dcd2c64250c11d74948410
+platform/external/python/cffi d75827f45a6e3f3616b56de1e62b3fb18f136e63
+platform/external/python/cpython2 6981db38a4d8f04e7d2e4b6a01348dc2e134f12d
+platform/external/python/cpython3 98c0fbae24505568ec588d5cdb9a0c9ce39c4f08
+platform/external/python/cryptography 8a3e655da0ef5138eef77db77f4fb58bbabd9a33
+platform/external/python/dateutil f83b1fe336f3a6cc7efa24601f035ace8c13f183
+platform/external/python/enum34 b9fe1afc806c58824c3839d8d6ee7dd5802a6f69
+platform/external/python/google-api-python-client 2cb60189370df33115b50be5382221ad3596ed63
+platform/external/python/google-auth-library-python 67b0f8112a5947b4397a23003535116ccd4ae1fb
+platform/external/python/httplib2 f9af053feb605f51109db995673e68142cbac758
+platform/external/python/ipaddress 16d3099ddda36fdc42dcf6e47d98b26da57aad51
+platform/external/python/jinja 8661806ec50e1f3cddc61349051a6db5d3997901
+platform/external/python/markupsafe 765ae2b78e0fdbd4f98067408f206ef048e4f4bc
+platform/external/python/mobly 29f59855b4bd06bd4add011fae76098470206cc2
+platform/external/python/oauth2client 5dbf1c7601275d7fed24804040a0afc9516eb377
+platform/external/python/parse_type b93b876f49258eac44901930950441a9df1c6de9
+platform/external/python/portpicker e56ee7f2b1e8fc1efd002841185963481760fe3a
+platform/external/python/pyasn1 daf33c63374f7c3fc9b1190b75a6f1aa04896031
+platform/external/python/pyasn1-modules d74ee479c54c8fc8db1f4bace0074b221b95349f
+platform/external/python/pybind11 7c44fa745d2d22a91fc1b5a060ec55858ea75321
+platform/external/python/pycparser 9ce5b7bca62a956dfcaad781eea50eefcf0dac6d
+platform/external/python/pyee a8dfd1df7a01b0c0b212be3a3645ea26c73817d3
+platform/external/python/pyfakefs 808f2f24f9aed23176ccffa048fd7e00e04354b7
+platform/external/python/pyserial d1a516ae36dda9d81f37e64fc06836c436df553d
+platform/external/python/python-api-core 972f4ca695f730c062a9210684c1d3b0b6c9fe0c
+platform/external/python/pyyaml b2fed93e4c267cc2add204ae5973daff0b657cfa
+platform/external/python/rsa 5282467c2ac7aaff2359a6738bc9f2c3d15349d5
platform/external/python/setuptools 0cd129dc9f31837a11e07f69f228ac7c9e0f8bf0
-platform/external/python/six 4a8c11dfaf4dd8557f8dfa7e66cdf6ef79b38618
-platform/external/python/timeout-decorator 1ed27a90acbab92459bb9eea35f0faf6c296cb47
-platform/external/python/typing 11becec2e7ff19cd809388439d1c2c1598178d47
-platform/external/python/uritemplates 4aa1a11cf1862f2e720ec7abd5b2772f93eba025
-platform/external/rappor 480f36732d67c28c28a63f752e52cc8e59beb6c2
-platform/external/renderscript-intrinsics-replacement-toolkit 1269ed6b6a087ba2637cf9aff037201d784c7410
-platform/external/replicaisland 9cc8e1a0e61d97f70fe8345d8d343036cddc8800
-platform/external/rmi4utils 8685999cdad28a05bd0fa720785dad80ac19c9b0
+platform/external/python/six a5674e8e17bd4d76c1d163314a8f7c4aee3f05a2
+platform/external/python/timeout-decorator a1b12f3f59f2665fb12427b32d651b024eb876d9
+platform/external/python/typing ed0aba5fc5042d178027ccd8c40ef04601fcd4f9
+platform/external/python/uritemplates 53edc33171ceefecc1b0c56bcdf65385da3e3726
+platform/external/rappor cfc248265466249c4125bfc4c326ce1c8a6fde6b
+platform/external/renderscript-intrinsics-replacement-toolkit 14e47216cc12a521f7ee720b858ee696f8d9832d
+platform/external/replicaisland c25e445670c332d7ff4b16083f43d5c1af558e65
+platform/external/rmi4utils 1a61dea47dba9105522b16a5620ec2c41cc22a1d
platform/external/rnnoise ddd1cce3c7649d9af848bafcfbfcb1818f03cf9b
-platform/external/robolectric-shadows eae478e44d3440d1992053e5d93eed80d8d3fb0f
-platform/external/roboto-fonts 7201df4b9a072f718c1678c0341f942a9904d2fb
+platform/external/robolectric 355b07606bb48bb457c7ac90992dc6aaf323eded
+platform/external/robolectric-shadows 88bda4e00754bed4baf23ccdcd3a5df0284cd837
+platform/external/roboto-fonts 2bcb10747d2b16ea57b65906b305c234bcec024e
platform/external/rootdev a2d1e5b0999e543daa9a629f90a17a7eb022cee3
-platform/external/rust/crates/aarch64-paging 34c728d69ef12bef4f675ed7d22df3b93cfe4dc3
-platform/external/rust/crates/ahash 58be56bf7bb319462fc4580d3357658986257206
-platform/external/rust/crates/aho-corasick a832bdbb71594fdd1d264f64576087dd81034f98
-platform/external/rust/crates/android_log-sys ce1e4e7684d9029cfcf5b2e438cd2cfe11ef191c
-platform/external/rust/crates/android_logger 9dfaaf178b22f23ab770561d15d9fc15a4244432
-platform/external/rust/crates/anyhow 3014a2f182e851e96a38442d95c20b835ee9f3d1
-platform/external/rust/crates/arbitrary fa0b67a4b953f33411a1ba2475b81a039908c19a
-platform/external/rust/crates/argh b57191f3939246fd18a9946710b7b07d3ef1b498
-platform/external/rust/crates/argh_derive e80461748d408842932cd747f2b1d00042d3ad35
-platform/external/rust/crates/argh_shared bd91c99e9b48fad451201ee57eb0719aeaa90f24
-platform/external/rust/crates/ash 583d761c35a4a5f66b3dcc12ed1688e90fc7d61c
-platform/external/rust/crates/async-stream 293a5116811048c3fede797b41be17e3c70d39c6
-platform/external/rust/crates/async-stream-impl 3a72e20629a7aca1c4aa3a6000538357f206b1f6
-platform/external/rust/crates/async-task 5dcba287da1600e9901d0c4f2e7b5355ffb622a2
-platform/external/rust/crates/async-trait 782420e715903b216eebab12430e891320171ac5
-platform/external/rust/crates/atty d837a6f29c4a55289b8406ab8b22e3b738477b6b
-platform/external/rust/crates/base64 c14defcb7f549d46631ee6f8d26d02261f7a0e5b
-platform/external/rust/crates/bencher e32f37d412f2ed0fe44d765c3350227a3f480c71
-platform/external/rust/crates/bindgen a4d08d292d6b2742d803740dff6dec3ed6d7fa54
-platform/external/rust/crates/bitflags 886bc465952987c62c0c6b0c3534d03a7e0969ce
-platform/external/rust/crates/bstr 40fbc1e9604d8950ff3fb094646eb3b8ddb5884a
-platform/external/rust/crates/buddy_system_allocator a96c6fba37e7d628c439b58cd829e2af73b665a5
-platform/external/rust/crates/byteorder a3445018110e9c25e20c354744b3bf56f540631e
-platform/external/rust/crates/bytes 057af2a9c279bff4149a2bd7b4d8c572cbedf584
-platform/external/rust/crates/cast 80d9ba7abd6de4eec6faba59c664f1881850115b
-platform/external/rust/crates/cesu8 c9147f50ecb5f1d7ff97bad53bbc650fcae3a017
-platform/external/rust/crates/cexpr 4569315d48115f59599fbeb083d86d62f26756df
-platform/external/rust/crates/cfg-if b99b53dedda43ace2937f2914676553ac860ef38
-platform/external/rust/crates/chrono 047f3d40fd241ab3ef67121075e5e49d46199a6b
-platform/external/rust/crates/ciborium eb5e95097fc8e22a71466b029ff2cca5ff76b72d
-platform/external/rust/crates/ciborium-io b2b6e0199efc31ee0d6d02ea994b024639eba32a
-platform/external/rust/crates/ciborium-ll ab81b015de1256332e52be901e520e750e691199
-platform/external/rust/crates/clang-sys 1b008e9fbe30a96a32884670b3705acb358539fa
-platform/external/rust/crates/clap 57080c6242c23ae00b091233d5ea3bb2a80d25c0
-platform/external/rust/crates/clap_derive a0cef980c52f89b2af351dd635b8940a54041ee8
-platform/external/rust/crates/clap_lex 265156e5d1f7c5c37b33e1a1a21e7330b621d569
-platform/external/rust/crates/codespan-reporting 6af13207f2ebbdb660a898ca445a513420107909
-platform/external/rust/crates/combine 53483fa15ffc787a4bf20329d9006a624d7e1ce8
-platform/external/rust/crates/command-fds 0727977a64ea6cd20f6e2c1d6b1bca4610e4d541
-platform/external/rust/crates/coset 0644b2ed5f24a8cd20ed03fc1628c9849b9d1560
-platform/external/rust/crates/crc32fast a1a71b36dfa537fb2800273d2b7a87b1096a9643
-platform/external/rust/crates/criterion 4173eddeab93d8f7fbc77f62ade79cc973b31f2c
-platform/external/rust/crates/criterion-plot 8e4210b837c3c9dd10cb088c78a224a766c90552
-platform/external/rust/crates/crossbeam-channel 43ce46cb097f654fe074ec62e9d7289ea30b0788
-platform/external/rust/crates/crossbeam-deque 823fe8e2c3187fdb649ff56e521dc21c857f8a6b
-platform/external/rust/crates/crossbeam-epoch b32118f5c3abe3552b3fd8d9af3a50504cfea1e9
-platform/external/rust/crates/crossbeam-queue 322b96be2241b4a063a0d0f1eb72cbfaa417863d
-platform/external/rust/crates/crossbeam-utils 1708746cca80a09c46fba1fe0e0565e1a81f6600
-platform/external/rust/crates/csv e40273ec7b15d25f7051853fd5086f9612126fed
-platform/external/rust/crates/csv-core 51b2cfebb67fb22e5109ccb9d7720b40ae6a09e8
-platform/external/rust/crates/der-oid-macro a9d1cabc879332cd141a796636c54421d04950fa
-platform/external/rust/crates/der-parser 5c133256e268a8350700ce17dec5e5fc2c2d1d7a
-platform/external/rust/crates/derive_arbitrary 12e89533f5a93b65d55ee1e9fcae20eacefb4904
-platform/external/rust/crates/downcast-rs 28ffb3b242e72b054c8d5bce4067a68b7fc7674a
-platform/external/rust/crates/either c1ea669f11ff481d9da08808d32fabec0c883cb1
-platform/external/rust/crates/enumn 3a485e43ef8c1f2156949dc836d51db0d1bee3dd
-platform/external/rust/crates/env_logger f4ff6ae4b211745b6056d3eedd699e069623ef8b
-platform/external/rust/crates/fallible-iterator f9a3bd0a70aba79c31e8765ce99b5dcd67f23fec
-platform/external/rust/crates/fallible-streaming-iterator f52d9e1ad928ac55fb6e69fbc9904246b22c35c7
-platform/external/rust/crates/flate2 89a43407a32e8fe400e7c47f2c2ac6769413436e
-platform/external/rust/crates/fnv e3e369f82a10089f5548ca3fb3db19cfe2911fde
-platform/external/rust/crates/foreign-types a02e02ac68dea2ff0aa229026390de6e873c850a
-platform/external/rust/crates/foreign-types-shared 08c2adccc9af0d26b94db4ae93f4fb135c1744d3
-platform/external/rust/crates/form_urlencoded db3dc2b26a08a0156fa5715f79ac02f09c0ec7b5
-platform/external/rust/crates/futures cf3b411186616614a74fc95a4e0481b4d9294bbd
-platform/external/rust/crates/futures-channel 5da711ae765f255e80f223d59cf684f02060a70c
-platform/external/rust/crates/futures-core 033f168279b53a1691f98b7330683e8c0ea0c399
-platform/external/rust/crates/futures-executor 31b7cfe80495205d027c94d57b8b91d0fda43231
-platform/external/rust/crates/futures-io d3606a0a1702ec5ac25ef325aa22e2b4c575b0b2
-platform/external/rust/crates/futures-macro 0002bac71c73178cec30441a26795792e93c2fde
-platform/external/rust/crates/futures-sink 30d233899a666e8a2bbcbe99d58ea131fcf08240
-platform/external/rust/crates/futures-task e0eab7b691a969de680d04a58ae15558fb5e393d
-platform/external/rust/crates/futures-test 9298c0ab990f8c8b68f09dbbd628ea24f691c2d1
-platform/external/rust/crates/futures-util ce35de2043cba208c51ea73003aafa6d89c1668f
-platform/external/rust/crates/fxhash b2de046043d88089b4deefc36ed97426e7db9427
-platform/external/rust/crates/gdbstub 4a06124a3a488a1aaf72478a55ec54926134e83d
-platform/external/rust/crates/gdbstub_arch c42d4d34372b23bf6c2f165cce88c9cd84cef5b2
-platform/external/rust/crates/getrandom e493f93efbeb9211ad4ca1762f2854351d9f3f32
-platform/external/rust/crates/glam 17aa0adfdcf337c17ca73ed359f9bcf2758928db
-platform/external/rust/crates/glob 73df9a72812299a919893cea70cf2117c76e7376
-platform/external/rust/crates/grpcio 1ec86ad1a69c5acb3d7fad4c15fb37c3ee9c88b1
+platform/external/rust/crates/aarch64-paging b9f50b7bc45c63676229885abdabd42713ad2b48
+platform/external/rust/crates/ahash 224de831eaac1f84e0ec7675f4823d2af2c5ad3b
+platform/external/rust/crates/aho-corasick 2be0719db4725082cdb140d1561f043eb0de5253
+platform/external/rust/crates/android_log-sys 4d45cc46afe7d644ba9308704ebf842db7e380df
+platform/external/rust/crates/android_logger d6802dbfa0d0d1dc7c790e04b02702b8ec25bd78
+platform/external/rust/crates/anes 1026590d704a62274c7b5eb70c1e4f1e63f24ba2
+platform/external/rust/crates/anyhow 36e1910df1d38fa2e149cbf3019177d514322121
+platform/external/rust/crates/arbitrary 9bd19404ea5be0153c7d55678f5e64ab84564337
+platform/external/rust/crates/argh f6f93b9e5f45fb0e8dabb66a55e81e720e61c5da
+platform/external/rust/crates/argh_derive e8975f3de2f8a0bff21fd1c6117a636552a34eb4
+platform/external/rust/crates/argh_shared 15359dd9e0a686bdae4df09a98f015eeada9ae92
+platform/external/rust/crates/ash d82f167659345d066ef8b6d2751629d8dc7c083f
+platform/external/rust/crates/async-stream fb56ea68e07eb1c2ecd045d47feed3642e8d7e39
+platform/external/rust/crates/async-stream-impl a38ef5815c7540f99b8d0afba01f07a35a52e76c
+platform/external/rust/crates/async-task b72437f9e418576feae8fe1eb98d4d38a07bb7da
+platform/external/rust/crates/async-trait bf632b40ca24f83a14e986b0199959a54c853c60
+platform/external/rust/crates/atomic 3ba81121158e500340c214261b71809616ac7a18
+platform/external/rust/crates/atty 1e81650d1ac8985812b14a4551b2629239c33cbd
+platform/external/rust/crates/base64 513725f30e195062759785d72305a50306f7b67c
+platform/external/rust/crates/bencher 9e2081b896d10bd20f30f01f11c79b2860ff6a29
+platform/external/rust/crates/bindgen 5a0018b5052a1ca5ebb96b411c7bb3ab0487e11d
+platform/external/rust/crates/bindgen-cli 3f6f9c291153050862b48bf2a2ccf054fd14c63e
+platform/external/rust/crates/bitflags 76a42615ab39bc48fb4f01560391d634cb48b061
+platform/external/rust/crates/bitreader eef524ed280689478ef7ae099f8f88ad40b6ab1e
+platform/external/rust/crates/bstr 3334c8f15f7626f63e12520046ea7213afc5269e
+platform/external/rust/crates/buddy_system_allocator 4d07bb02ead354a8adca8f5a90ac39d7c9290ef8
+platform/external/rust/crates/byteorder 19d8a7c2ddf63ebc6bf2c05fb7eb39e278deca91
+platform/external/rust/crates/bytes 226f0bf87de01963ce426346a1451c622fff48f4
+platform/external/rust/crates/cast d6ba80ea6ab86961da0f03b430974d85751b14c4
+platform/external/rust/crates/cesu8 c6c0f0fe3369dad8127a51c2ff6d7fa28db6a9a4
+platform/external/rust/crates/cexpr 7456c152c309e17ca5dee80737efcb38749ab098
+platform/external/rust/crates/cfg-if d5bdf5bb3358e9064b2693aab583c021be94f036
+platform/external/rust/crates/chrono d1c2687b72c66144e98332ba02c5e34163e4a80a
+platform/external/rust/crates/ciborium b0f256cd99c102e46b30ffe3db7dd492ebad593b
+platform/external/rust/crates/ciborium-io 43a3a1994a76abc0dcbb3dbc29da6630cd5c1c5d
+platform/external/rust/crates/ciborium-ll 18bb9b7f5163ef9c984003c33e8d79f53c7e14f4
+platform/external/rust/crates/clang-sys 1a5961dc466b74729ab0c5711561fd1b536de8c4
+platform/external/rust/crates/clap 7fa5b088f6c1968638864507512d1d08d335de48
+platform/external/rust/crates/clap_derive 7f4481ffeaac95e2fe409cf872b22cbcebda8def
+platform/external/rust/crates/clap_lex e7f039fd13d46dbddc02fd1357c102b41fb19649
+platform/external/rust/crates/codespan-reporting 278644c7ed0cda2f14a33e713089b984311df681
+platform/external/rust/crates/combine c7fa5ca778073f69f35bfe0a8bbbab55989b8193
+platform/external/rust/crates/command-fds 6170b963e865ca69b3e9782ad1aaf27a7c95cce2
+platform/external/rust/crates/const-oid 0a0d5003d233a4074f6eab146ae935bd4ffe9112
+platform/external/rust/crates/coset 0b4c0ace7ceb02d6a2375771ef4fc1f7a8d13b61
+platform/external/rust/crates/crc32fast 39e8da4c1f9fce79bcf06bdd39f1f18a9fa9a80b
+platform/external/rust/crates/criterion e4625695f8ef7932377ed55c8ccdf429ec856daf
+platform/external/rust/crates/criterion-plot a5d8ce89a559644ae6250cd4ccdc2bb3a0be9a69
+platform/external/rust/crates/crossbeam-channel 874a43995a2d336be5774fa786ad20f3870deb13
+platform/external/rust/crates/crossbeam-deque ab27a8904032e51bded9918dba925717018ba69b
+platform/external/rust/crates/crossbeam-epoch adc9e9eeb311d5a962b3c59a7458e1f42170828c
+platform/external/rust/crates/crossbeam-queue c9103df4bc5edcde10fc6c2c0b61df044683ca63
+platform/external/rust/crates/crossbeam-utils c2785c5fc85d34f7487c342b0bf8094e43563b48
+platform/external/rust/crates/csv 4f316b4d644f204d34765638e16bf1fd9d9784ec
+platform/external/rust/crates/csv-core 6649413ada80734e51f2c4967986a0afafd535a1
+platform/external/rust/crates/der 7790f8408e4893ce3c595a52e203cc1eee0e9b7e
+platform/external/rust/crates/der-oid-macro fb2e85f6e31911978cd6f2b9f584970ef538445a
+platform/external/rust/crates/der-parser d3b2f45fa2c2fb560a45a21b9f73f4a4dba8401e
+platform/external/rust/crates/der_derive 72bc9c5285c5f9517c68a2b4d2ac2f7c7435a09e
+platform/external/rust/crates/derive-getters 3eecc2d93fb1ec3c75d5cf2cd6ddd99a80cc1306
+platform/external/rust/crates/derive_arbitrary eebdf4fe508c2182f453da9215fb24fc2be4930a
+platform/external/rust/crates/document-features 5783ab57a3e376670f0639f210a076f9cc4cf8b6
+platform/external/rust/crates/downcast-rs 6c669365fc3dc3f4016297bd01b5e24c0f4161e9
+platform/external/rust/crates/either 0263b767bba5ab17df25785ac88a19ae8c7af80f
+platform/external/rust/crates/enumn 8714d2d5892eca3cf10a972ffe9e841c7e419112
+platform/external/rust/crates/env_logger 76eefd181faae28faa75c7ded4c681d69a187975
+platform/external/rust/crates/fallible-iterator 46fe24fa521969a10f504eb8f5b8add2ede2e1c1
+platform/external/rust/crates/fallible-streaming-iterator 5ffea6b8b4efbd7e46f849756799e645b1dd4025
+platform/external/rust/crates/fastrand 1d44a6a05ad35aa240ce64668a21bd221e03407d
+platform/external/rust/crates/flagset 3fef76e7f5d43d85ba2ee830841968c41c4dae39
+platform/external/rust/crates/flate2 d626ae568ce8db2b0e7f24b97e282df89f92b862
+platform/external/rust/crates/fnv 3e061937299254031428e00b9a70fe7a90397eb5
+platform/external/rust/crates/foreign-types b7894286a7d56d5abe21d885523a810454a2f3d9
+platform/external/rust/crates/foreign-types-shared fb9e13ee0431f24fca5e1b44fe66b2dca395b5d1
+platform/external/rust/crates/form_urlencoded a43b7ef21d369ce6a235c603ff3d9ed543338ca9
+platform/external/rust/crates/futures 671b19ddb70a73e24de0cdfc90d71a3c4fd66b7d
+platform/external/rust/crates/futures-channel 5aceb3f51fd5044657cafa68c67cc8458867b4ff
+platform/external/rust/crates/futures-core 01183c9f7b4b181ddfd270670a1b6bde3cc5a44c
+platform/external/rust/crates/futures-executor 1c7ce7e0b814012f38688cf3ad38f039e3a246b6
+platform/external/rust/crates/futures-io 3ad48cfca4fd7b61e51d4d906a80bf2d1668315e
+platform/external/rust/crates/futures-macro cf07d598a435c87ce0c105526dc10b5a421797bb
+platform/external/rust/crates/futures-sink 1f9cb4623cd7d5e45c8bd8c4e5c65ccf4284b0ca
+platform/external/rust/crates/futures-task ba22a03c13b5a32f8b2e77f95b3bb1c206883632
+platform/external/rust/crates/futures-test 6683f03ec7253540655cfe961b3e1e5e299aad2a
+platform/external/rust/crates/futures-util 17cb0f3372499438b216afaa57b3f98c93ded5f9
+platform/external/rust/crates/fxhash 7df515983e443b54de83ae2b3160fda1bb109ea0
+platform/external/rust/crates/gdbstub eeda11d36d5febce136c1cc8ae402d752967096a
+platform/external/rust/crates/gdbstub_arch 2119b90d84fd5ba9e5e2585f0093a7ee5ad05901
+platform/external/rust/crates/getrandom ac85b6dfef2dc856bc4eb99fc6bd17f358838c97
+platform/external/rust/crates/glam 36361c0ba5a918a1ad73da801c79007bae29fb64
+platform/external/rust/crates/glob 86b160e897ba53e1848601068000281a370c70b0
+platform/external/rust/crates/grpcio 3baa9f2dae8a40e689222e0a95adb0a5f7685337
platform/external/rust/crates/grpcio-compiler 37eb4729e7d150965c25501d091260ee6df2bfd0
-platform/external/rust/crates/grpcio-sys 9ae9095ffb9025cce746b60f80a49781a3710913
-platform/external/rust/crates/half a5dd257a9dff892873ca430f3d08aa318b97ecca
-platform/external/rust/crates/hashbrown 1a178de92d94683ee12e93f20fd9f8aeb731c006
-platform/external/rust/crates/hashlink f5947a81a84512c87a7fffe2d66a1dabfa58e564
-platform/external/rust/crates/heck e1b53660df11bd10fa0ea6341d6269ea2060ab86
-platform/external/rust/crates/idna f4104880eadd9cd8584ea5f8c7ef3578fd47f396
-platform/external/rust/crates/indexmap 99aea09761d20023154a03228fa1da730e32f1e4
-platform/external/rust/crates/instant f428a8486e334b125e8013cee5a9976a29d4ebce
-platform/external/rust/crates/intrusive-collections e5206e7f4d408e30f83640a1637231eba59cdf19
-platform/external/rust/crates/itertools e71b1eddc7245f80ace20bd2a8d32fbee5396bb1
-platform/external/rust/crates/itoa ddc85cc68824e564a0da73ec901cbf3bbd2d198f
-platform/external/rust/crates/jni 49efdb863c415783053e5b49ae0cb83d78a34510
-platform/external/rust/crates/jni-sys df60767ca73b0b75a86191ecc2f10daa92f5e8bd
-platform/external/rust/crates/kernlog f1fc2251e990c4062c4c43a1cd4c8c29503a175c
-platform/external/rust/crates/lazy_static 0a005839226f1b2affa572505c279adce5c4f803
-platform/external/rust/crates/lazycell 1b5c29bab68f908cb093df1e904f5a84f657a9b1
-platform/external/rust/crates/libc 85d034ded4360591189d1ade138aa63c260eca7a
-platform/external/rust/crates/libfuzzer-sys 6aa006eedb11783d352936f9a705852b4fe7eecf
-platform/external/rust/crates/libloading 9f183ca804cad581a98404ec27e1e1596ca41538
-platform/external/rust/crates/libm 88bda631967eb5462dfc7fac812fce034c0f0a76
-platform/external/rust/crates/libsqlite3-sys f42bf658af85fec5166f5d1aee81d158932f86c1
-platform/external/rust/crates/libz-sys 2451c81ad3f9d9b6e2559dc952315a1a5d4cb1ba
-platform/external/rust/crates/linked-hash-map 7b36ac9bb4d25551bb2b60ebbcfa5a34cfd203dc
-platform/external/rust/crates/lock_api c9c237e263b00239240cabe4bef7d7cb1828ef9b
-platform/external/rust/crates/log 2946f93df06549d0b43c3d3d560110d304aaa27c
-platform/external/rust/crates/lru-cache 8076d3069769c8debbd30258e81528f4de2b974d
-platform/external/rust/crates/macaddr 48de4c19e49301bb61b260f4ab20d8259a3af096
-platform/external/rust/crates/managed ad7622ae6b9a8298cf296fb815fac3740f16127b
-platform/external/rust/crates/matches 2abcb614462f2755fe0867153baa408c5c299481
-platform/external/rust/crates/memchr 068c0856248eff92efa15258bb8fe4d9b57a8bde
-platform/external/rust/crates/memoffset 83f252ad67dfe3109accfb0f76bb122c83874041
-platform/external/rust/crates/minimal-lexical 41cd9395c38afed8b3a210d814b156814a4769fd
-platform/external/rust/crates/mio d1e8a0c3eb42f94516159c8cf936463bcda73de8
-platform/external/rust/crates/nix 790ddc61dba72352e9500ba6d355766feebe3d57
-platform/external/rust/crates/no-panic 42a1ba80c81838166d4bca61852a9ae3b9dc0806
-platform/external/rust/crates/nom a8171f087ffc781623889e922b30209cb2f69717
-platform/external/rust/crates/num-bigint c4999e9e8208b8fef6b3a63ee9a21ff831563684
-platform/external/rust/crates/num-derive dc83c55d060e10799e2d521e170aeed9709f8dd0
-platform/external/rust/crates/num-integer 8fe4dd4ac0c77de464881501fd1970df9dfa9b0d
-platform/external/rust/crates/num-traits c2bc3e26204afafdf0cde3136fb33c6c2f832e04
-platform/external/rust/crates/num_cpus e1179832bf0f1914f88ac4275fda4d8107e36031
-platform/external/rust/crates/oid-registry 38ff691cab30b7cc965bc6b52541d53f68858600
-platform/external/rust/crates/once_cell bb56fb782c228dfbbbfe8e3b552f6e4ad821ed1c
-platform/external/rust/crates/oorandom eb62a8f6d159bad7fbd91ca1903c06f7694e3c11
-platform/external/rust/crates/openssl 2a8eac2e98c69762cd0b4a54deb7a0718988c192
-platform/external/rust/crates/os_str_bytes ae594f2f68ef392240e0f91dee613fcee4f8c8ae
-platform/external/rust/crates/parking_lot 71aeb29937ec2c6634bcde2a8f5a315284d370a1
-platform/external/rust/crates/parking_lot_core 8e8a26d918f9f441b5e4ba730e55cfe746740f10
-platform/external/rust/crates/paste 860ddd0aada8ef46d06fb964e14b47c489b4f0ed
-platform/external/rust/crates/peeking_take_while 78e84f5687def321df3942bd4fec4af019067ae5
-platform/external/rust/crates/percent-encoding 74363ecb885e91fb2bbdf95e779e44ba8be497c7
-platform/external/rust/crates/pest f5a9cf663738faf4bdd3633bdc8d03fe0f882e1e
-platform/external/rust/crates/pest_derive 05774595b61807a5c8dbc8b83651ed0e8271405c
-platform/external/rust/crates/pest_generator f45fd30732cf666cd3c6953722a809bf09a4a8e1
-platform/external/rust/crates/pest_meta b5fce1755c3a93c97e3195c5811794e977837aa2
-platform/external/rust/crates/pin-project b557242d4c8a1a42aee650a019b726cbeafa7543
-platform/external/rust/crates/pin-project-internal 28552c50f8229a7cbf97754fd09799ca890d9a94
-platform/external/rust/crates/pin-project-lite 3dac5cc05551cc79a69ef8de9b787d4dc4630c0c
-platform/external/rust/crates/pin-utils 662e513247adbd3275d2054eed0176c8a20fd6c0
-platform/external/rust/crates/plotters fa89578d625cc999ba5d096dfbfc095cd7b1a70b
-platform/external/rust/crates/plotters-backend 7eb6bdf7bb45d51a10d8c5c0456d45b9bf290443
-platform/external/rust/crates/plotters-svg 720f1da48c800e11e8868c93d7a5668e0c05c81d
-platform/external/rust/crates/ppv-lite86 1c83d4067e469b5be7c1d03893e557b364fd3516
-platform/external/rust/crates/proc-macro-error f980f58b1bd31c362f7e01b1c08ccea5f0d3b5c2
-platform/external/rust/crates/proc-macro-error-attr 81b19ae76597745a4beab6c97342a0e5b80c07ff
-platform/external/rust/crates/proc-macro-hack ce77babcde4540049e59d704b7ad91683f8664ea
-platform/external/rust/crates/proc-macro-nested 6453e19b1421649b548402dd4de53d6e9511283b
-platform/external/rust/crates/proc-macro2 c69551374e9e4b45cf90e60fe3c6449d0da8826d
-platform/external/rust/crates/protobuf 93f37afa023dacb77b128504a709e5b6d1ab7938
-platform/external/rust/crates/protobuf-codegen 93124b725db123728fc7acee00bdbd39749c01e9
-platform/external/rust/crates/psci ef98d36b51f21f841a5c0af523b2e4a4902ba556
-platform/external/rust/crates/quiche 8ce17ff0fd1b6e9ebc4b02c3e14d6d611323df50
-platform/external/rust/crates/quickcheck 0fc9373ecc265199a7ac44fdccf357976ab442a2
-platform/external/rust/crates/quote 309573108f144cd5e7984aad134306d158823bae
-platform/external/rust/crates/rand 393edd7053594a5fc748748d427629be47be9c6e
-platform/external/rust/crates/rand_chacha 2bcf5f9c5e3058abbd962c6d266e3b44c370b916
-platform/external/rust/crates/rand_core e4472743c0478189e1c9a4495f018cb7f9d4a527
-platform/external/rust/crates/rand_xorshift 540c3b818362930411b25db27d5c5c473e42c5cd
-platform/external/rust/crates/rayon 2ff310e20758b9fe113a06b7aa9ed53ddd552fde
-platform/external/rust/crates/rayon-core 75b7abd511344f9ce578d5c1906bc5dc4ada48f2
-platform/external/rust/crates/regex c1d89927fdf6535d134df5a5d46a4f7c1d6aae23
-platform/external/rust/crates/regex-automata 2d7ec7b5777c00ddf0bdb1f788fde3347883658f
-platform/external/rust/crates/regex-syntax c4a6f94a5e60ce3ae37a899f988a1b0403c172c0
-platform/external/rust/crates/remain 3f7187d937a23c9ff2a27a7d9c124b785034b2cb
-platform/external/rust/crates/remove_dir_all 34e782e0991fa52db2e8793089ba0d2739c138b2
-platform/external/rust/crates/ring c6f989506068b028210d82e3d7bc23ad1c19473d
-platform/external/rust/crates/rusqlite 095c3985342ce49e873d66662347c4215762de26
-platform/external/rust/crates/rustc-demangle e16a727f4509b23a58b61b2d275918c5ca433f02
-platform/external/rust/crates/rustc-demangle-capi b492d80a6e5b1ee9c42e0f23481224ddfd18e942
-platform/external/rust/crates/rustc-hash c87597f8abd37f3dd26562f71f3cdd77fc46fd12
-platform/external/rust/crates/rusticata-macros daa945c22362a2aba4161f8d3e311f04e80edd2a
-platform/external/rust/crates/rustversion 4f259c61e6630fa52cbdf359d09e30f80603314c
-platform/external/rust/crates/ryu 0a88b60eb2b74a419159bdc082a0e98e3dd21ba5
-platform/external/rust/crates/same-file dfca92f9707a19f97b8c04a543d04dfe6b22a186
-platform/external/rust/crates/scopeguard 3f9b54a470f7ba36f97bd37f4d085d76723da906
-platform/external/rust/crates/semver f6965144f4c5efd8e31cbbdaa2fc4af50b55a69d
-platform/external/rust/crates/serde a81d704a5d423281dbbbf12a8042ef8e247b1aab
-platform/external/rust/crates/serde-xml-rs acc79a799b91d8345c50ab682c906a56533c5b92
-platform/external/rust/crates/serde_cbor 6be68dcb1311cd7b942050e9bdd271c14e268068
-platform/external/rust/crates/serde_derive d36d3ca78494a9b179f9ff4ab85a361e4b107c52
-platform/external/rust/crates/serde_json 92aaba050e748739473cbd2cccfee43007295366
-platform/external/rust/crates/serde_test 1e68b62020487be49d071aae36a35c54f0fb3506
-platform/external/rust/crates/shared_child 3bc8c1ae06568c8d73569381b700bdd7e286ea5b
-platform/external/rust/crates/shared_library 88357b14f5dc8bdcb954c518cb3ca011c716adc2
-platform/external/rust/crates/shlex aa2ae4380dc3ac5b2ced3e9ab2bcc658f39817e0
-platform/external/rust/crates/slab 111b369755ac82148e24f8698a4ea3f4abda8ea6
-platform/external/rust/crates/smallvec 7629f9d4552414cb058d12ed22f46b7788c18041
-platform/external/rust/crates/spin c7713a23f03055503b63259fdb38a2c2129aa78d
-platform/external/rust/crates/structopt 31c09f7e2588924c834780b12fa76b2ac3b7ac57
-platform/external/rust/crates/structopt-derive c1af8ee446fbf788a9f0abed6939d973583c3e6e
-platform/external/rust/crates/syn 349666b7e5e4593c4aa1876ce3a6c821333d943e
-platform/external/rust/crates/syn-mid 1f324515071d779ced61c5c9dd1601dec1e8a88b
-platform/external/rust/crates/tempfile 88624a95450be32063bc1967512c177ccc414a81
-platform/external/rust/crates/termcolor e159fd3ea0c4f751155537eb46e768563289e6c9
-platform/external/rust/crates/terminal-size 427d44546617e3beabb2c5347655daa235bc4520
-platform/external/rust/crates/textwrap 4a5b518a541bf2a9f9b052666d158cec089473de
-platform/external/rust/crates/thiserror 8997ece7763abc6a4d008907b593d9e1e6d106ff
-platform/external/rust/crates/thiserror-impl 844db074a8fdcadebdb35b87dd3d517973180410
-platform/external/rust/crates/thread_local f1fcc033f8298dbf158df70ca45676470697f76b
-platform/external/rust/crates/tinytemplate efd78dec2a34bdf4b70e0d314ba38d4713103b99
-platform/external/rust/crates/tinyvec 5fb29446d6ce34e5d8ddaf0e4505ede9d2e77513
-platform/external/rust/crates/tinyvec_macros 2e1a760e7d15b4747352bfa5bc8136d684b0516d
-platform/external/rust/crates/tokio 9155cca970887aec58102260bc188443e657c86b
-platform/external/rust/crates/tokio-macros 6c41c55cc306cef7bd9669aab75b50a6288d048b
-platform/external/rust/crates/tokio-stream e404b076d16c0e1b6c0384609041ee6fc5c7aee2
-platform/external/rust/crates/tokio-test b9af881e9f2b7838c0b391f06975f6ee5d10e159
-platform/external/rust/crates/ucd-trie 5a2dbb97033b3d34791438952d2d33077b36f102
-platform/external/rust/crates/unicode-bidi b1e02faeb4e4fb7d52fbf7834abcb9328345d305
-platform/external/rust/crates/unicode-normalization e94bca466300b5b1dfeec3f575fc05506160ae94
-platform/external/rust/crates/unicode-segmentation 66be53cddf8146aa63cafac671de228e317685d3
-platform/external/rust/crates/unicode-width 6922311dda7b28bc1fe9f295ce0f1bced0b2e91f
-platform/external/rust/crates/unicode-xid 10ad7fbf45c66545cc852c8896b5dc055c004b6e
-platform/external/rust/crates/untrusted e6e8abcd041a13b5a8b2cf8bd62510f60ce8c892
-platform/external/rust/crates/url ee1184d518964299fbf407f286a3a5e49ed7d309
-platform/external/rust/crates/uuid 0379ec46723e2807fe741fd73dd1a713b0a51487
-platform/external/rust/crates/vsock 45dc8f0a3a0be291d4c9040abb2abf7e579a90c8
-platform/external/rust/crates/vulkano 14f8acaa90b7ffebd67d218949be51028517c242
-platform/external/rust/crates/walkdir 724387554501886abb78c3188bbc94ec740109d7
-platform/external/rust/crates/weak-table 801008f9a9a23b3550156f9d6b358620aa2a0425
-platform/external/rust/crates/webpki bb2cce8dd842a54171f1c1becda481e56b200fcd
-platform/external/rust/crates/which bf54af816d6b9a6f6cd0f208312c7a7d76e5945b
-platform/external/rust/crates/x509-parser a283ef6282dd6b48e0cc11094527a192f8de2a8a
-platform/external/rust/crates/xml-rs 5868cf0cbed2329e2417295d0e21da5714f34b97
-platform/external/rust/crates/zip fb5579f27eae8708999a4cf5868a6cdf3d8db5e4
-platform/external/rust/cxx f2cbaf1b5c38f9975a9aed44cca4c48fcecfe7b5
+platform/external/rust/crates/grpcio-sys f1cbc7727b4092b23973ab70190d456d4f6b9a9e
+platform/external/rust/crates/half 251c6d4ccfba08c43cd597e0164fb8010397815a
+platform/external/rust/crates/hashbrown 714bc3fac3089cc1a00286c8decc46803022ee98
+platform/external/rust/crates/hashlink 0f58b240318d0bbdfcc866c1d1f28de9b31a943c
+platform/external/rust/crates/heck 503488fb197c71fe686fd22ff6fbbff814601b86
+platform/external/rust/crates/hex 4d712a0a38750749405da6a139909b8bb7df4917
+platform/external/rust/crates/idna f998ac7136f9cf53b7ebab7bc87cbae0322dfe70
+platform/external/rust/crates/indexmap 0c1e7c2fd33ecf424fede9238b482215393e1112
+platform/external/rust/crates/instant 9026284abf126b84b3486ef08752a4561d82aa59
+platform/external/rust/crates/intrusive-collections 8350dd974c68f18e8e456a51e475ad9d5ce924bc
+platform/external/rust/crates/itertools 47d1593ac4c2d7a16cde3e805f384d5797b54565
+platform/external/rust/crates/itoa 204ff93db3295a5169c16c823083e79e2c479f8b
+platform/external/rust/crates/jni 9548cde5068b052c66a985dd19a0bc59ef7c8796
+platform/external/rust/crates/jni-sys 71320a468b3ee4f8a7f60f2be16c2d828f5a83a3
+platform/external/rust/crates/kernlog f772f1674f2be288f8a57fa738b1398d80fccbf8
+platform/external/rust/crates/lazy_static 5f5d21d8642eef506e90bf7797f6ade00572c451
+platform/external/rust/crates/lazycell f058703540912042a34050bbea7d9db140d3f8e6
+platform/external/rust/crates/libc bcb23b6b7a1f9487a501dc8cee30168c793615cd
+platform/external/rust/crates/libfuzzer-sys 5598687ea707beb925bde07606afdd84a9bce9ca
+platform/external/rust/crates/libloading e3e14fa5e1cc55bd1fa8e794e57e7553d6486821
+platform/external/rust/crates/libm 5cc613e153a16dc0263b01094d843c8721224c5f
+platform/external/rust/crates/libsqlite3-sys f817767a9dd6364736791719002c988825c12f6e
+platform/external/rust/crates/libtest-mimic 5fb38dd8ad881e6d177fa38be6bb303604d55609
+platform/external/rust/crates/libz-sys 4b1ce8cd54d728288121e1dab5dc5e1d60572337
+platform/external/rust/crates/linked-hash-map 22b72a651823c59487707c098f4845825faaf616
+platform/external/rust/crates/litrs 4e10cb2e37a6aa8d9b27f77d93c6a18bf54d0130
+platform/external/rust/crates/lock_api 81c651eb5aa1dbe5914133a92ef8fb1bae78b812
+platform/external/rust/crates/log 98397baea7e0eaa30c5285a4192e5b45557edc4b
+platform/external/rust/crates/lru-cache 6f6428526bedb5397fa4cd29f48610f03d7dc661
+platform/external/rust/crates/macaddr e58d97ef7698a95667ad411c3e03f8cbefd0c074
+platform/external/rust/crates/managed a5d4c6595fa1ed1eb6c0af23766821dc709b8e87
+platform/external/rust/crates/memchr d2b2dded2423fff303e91be2a49444134b0ca35f
+platform/external/rust/crates/memoffset be1aec54ae0e4e923b3111a8000d57b27f432558
+platform/external/rust/crates/merge 443e883a0d47d9b1e42e6fd8b9456d1b9e04a5d3
+platform/external/rust/crates/merge_derive 9115799445a1cba9b67b56d6388f5abeae25185d
+platform/external/rust/crates/minimal-lexical 5aff5bcb76ee33c158f28fe518cb9649581954e7
+platform/external/rust/crates/mio 9dfdfd066edf2d8efe7ca63a423a5c04b44d03aa
+platform/external/rust/crates/nix c342ceab6d8637f3421e00d264fbf98ac3fbdb5b
+platform/external/rust/crates/no-panic 334081005dc70dd50ef360046d75bc91a0fb9c99
+platform/external/rust/crates/nom 23405602c0ec8b36aeb3180ff450b22053b79c97
+platform/external/rust/crates/num-bigint 8f08322410af39e0e3e854694c49850106927b2c
+platform/external/rust/crates/num-derive ef880c2a91127846cb9edeff44bcdf1c1d5ad2f6
+platform/external/rust/crates/num-integer 42ba40350a7e074165b2ac0774e39ed2cd1ce08e
+platform/external/rust/crates/num-traits bc639f624877d90bffa38b96e9c7262004993b22
+platform/external/rust/crates/num_cpus f5e36fb5387721848f3106b1c53eccd58455b5ef
+platform/external/rust/crates/octets 2b5b138f8e584b9672044adc3f40d46f2f8b2324
+platform/external/rust/crates/oid-registry a316eb2878645a9c4473425cc7d9be434b7baf81
+platform/external/rust/crates/once_cell 6b626176123050120d67172ee1f0b9d1c376b80a
+platform/external/rust/crates/oorandom ea68dd5a3e1be1aea60a88b914e8d8c10881fe51
+platform/external/rust/crates/openssl dc0d7bb3fb3f5d12743199c547df6c9a5130ef9c
+platform/external/rust/crates/openssl-macros 235dedb203c2e394e3b533757ba65da645510f82
+platform/external/rust/crates/os_str_bytes 0dbb8008b5e2a27dc5ec7f3acd80f248d5c88c69
+platform/external/rust/crates/parking_lot d2f69a0957fd63c04eef88223663543aab7d13f2
+platform/external/rust/crates/parking_lot_core 37877a963beade463c2822a540fbe94329749ffe
+platform/external/rust/crates/paste cea16d9e49b27b502cd792d6e364ced0a5ca105a
+platform/external/rust/crates/peeking_take_while 37d0fc97b0660cd248e001f227577b68cd6fde8f
+platform/external/rust/crates/percent-encoding a80f927abf4ac30ad547959d361a516ae5b63133
+platform/external/rust/crates/pest fbdfea677a5f337dd280bd1ad047943d94469f87
+platform/external/rust/crates/pest_derive 7e3a5eddfba82050bb15916b58dc0410df256004
+platform/external/rust/crates/pest_generator 6cdcf4f7e0e4dc8bc877b0d6ef1ad3b79c59273a
+platform/external/rust/crates/pest_meta daa929ffce565ef7e7cad5bddf690d3801bfc023
+platform/external/rust/crates/pin-project 3bcbef2958c3403cbc75e071f777d9b54bc01dfb
+platform/external/rust/crates/pin-project-internal 846bef23f65c8b5a327b15cc9a17c494d25c7388
+platform/external/rust/crates/pin-project-lite 5564e14e3ff9e0661d2bfd37e21d25d78a8bd0fb
+platform/external/rust/crates/pin-utils 0308e83a1a5e274e80239b4887ef07bf60fbae50
+platform/external/rust/crates/pkcs1 790b8af13d2da3fd9c797488122c1a2a1b8f96e2
+platform/external/rust/crates/pkcs8 61ab7879ce3107033ebac9298543193078d60283
+platform/external/rust/crates/plotters 564c16343538a0ba36c7ca4c80e8189d2669ae8d
+platform/external/rust/crates/plotters-backend 2e1d769c5a089ab0cff040488f7c8227d782abb0
+platform/external/rust/crates/plotters-svg e7c4f6d4e67fae7e1712cf9347e9af78cfee9d8e
+platform/external/rust/crates/ppv-lite86 222f742a78bc01926c77df0360244acdde894d4f
+platform/external/rust/crates/proc-macro-error 794c97acf88057ab91fe02e6f532b0ee85b14d57
+platform/external/rust/crates/proc-macro-error-attr 43ac89266c75437654b946e407d1810da33cecaf
+platform/external/rust/crates/proc-macro-nested 0a3dd241a21d624a596f5f4c965ab85864cd38a7
+platform/external/rust/crates/proc-macro2 8c17326962820b1c8a1355aa41627801f87efcd6
+platform/external/rust/crates/protobuf b359c6a24c5e955ba98ede214ae253a5acf732df
+platform/external/rust/crates/protobuf-codegen 555b148eafb040587b2da3fca77992b7c7c0d3e1
+platform/external/rust/crates/protobuf-parse ba3fbb8de31d869a7c46ab26aadef3a3b9a56827
+platform/external/rust/crates/protobuf-support ae3bfb6e232d7c8753c197e2bf4c24d73537dca1
+platform/external/rust/crates/psci aef5d8343c52d1dfb9515d777ae653c32c885b5f
+platform/external/rust/crates/quiche 7ace20c5b337a3b0c4cca777db1942dba88ea70f
+platform/external/rust/crates/quickcheck 984eb86f26e45ef3d3bfd9c9d343d5d590c078b9
+platform/external/rust/crates/quote faf35617b12d279d4ff3bb17c8970cf74142b84e
+platform/external/rust/crates/rand 7f968c72caf3e12a849dbf3b9ec6f087c3befb36
+platform/external/rust/crates/rand_chacha 02fd71440ad20d9ca7a5af0b1024a41149354e4d
+platform/external/rust/crates/rand_core 9ddad9a79b5ae5814f3fd5cfcdf73668507d4fa1
+platform/external/rust/crates/rand_xorshift 940d1c10981deab1c569f09ea6553ea72df3d252
+platform/external/rust/crates/rayon 9a4e2d5fa6b6a366ebb9690d2dacad29baf3b569
+platform/external/rust/crates/rayon-core ef2d76b5af40b73734766fe05e0f7b1f383de3b3
+platform/external/rust/crates/regex 0b570678289f8b4470554da58037e615d348cccc
+platform/external/rust/crates/regex-automata 1e736ca510af445b8f4a4f059362da3aa55e4a95
+platform/external/rust/crates/regex-syntax a926bb621db9a1ead10dbb436fd7926bb297a296
+platform/external/rust/crates/remain 24a941d3229ebe148aa6b2e55e152558579f4457
+platform/external/rust/crates/remove_dir_all 2a5de32720529e836f2ac62cca806cfe11b4cbd4
+platform/external/rust/crates/ring 511a199b62ddab438cc4fbf563239e5f4284730e
+platform/external/rust/crates/rusqlite b5556e1c9a5a59b4a45c8d88de58dc1405a900dc
+platform/external/rust/crates/rustc-demangle 33a197f32916f04fd0aaae8a392974340e27f7d5
+platform/external/rust/crates/rustc-demangle-capi 17a52580b85f55518c4a33755e1ddf04d4f2ca2b
+platform/external/rust/crates/rustc-hash 6cf30a9c221696bde370304abcf530c85ab9fc03
+platform/external/rust/crates/rusticata-macros ce1a302416468bd35d9f7bc560c8adbd498f46b0
+platform/external/rust/crates/rustversion 8e373c6c14db8662f322e92c1dbf8845b1a8aa20
+platform/external/rust/crates/ryu d68e0597a2858314a08d1df01f6d78727bd10bbf
+platform/external/rust/crates/same-file 715eec2c158a7eda741eb11e363704a5aa0a91d6
+platform/external/rust/crates/scopeguard 38a7fbe4b038aaf15f349e75475b83acc61d0457
+platform/external/rust/crates/sec1 09799a8406ba35d48be1c5d5c0da150acb040ad1
+platform/external/rust/crates/semver 06cf52ad123d66e05e21688ca13ed4a27b654776
+platform/external/rust/crates/serde fad912abf31d36b4409d7c01d6f34ccf8f7dc5a0
+platform/external/rust/crates/serde-xml-rs 3260038a931064b07a0d46db460e86842fc7bcc2
+platform/external/rust/crates/serde_cbor 34631826968c1b45fc4b07ad5eacecd4002391d6
+platform/external/rust/crates/serde_derive 95b629c31ece4f4477d9f3fdab41f5669d80d38f
+platform/external/rust/crates/serde_json c8d4368b5464acc6cb37ab517fc5254d924c6c5a
+platform/external/rust/crates/serde_test d972316ba608217df6ecfb9d624f9b27649d0551
+platform/external/rust/crates/shared_child c87fc15cddb78413004b3ce2e484e57707f2bd5a
+platform/external/rust/crates/shared_library db652cb25d61abe8800ec76577ba5e47f3e3bd88
+platform/external/rust/crates/shlex 7f7e7af6102e3481378f107e3a4112435ad2c960
+platform/external/rust/crates/slab 0ab261a0391e2e3b697a7e190f40409445240976
+platform/external/rust/crates/smallvec dedf93b955f425dc8577dcd8cac8340cdfd686f2
+platform/external/rust/crates/socket2 55bffcc1d8f0e8da37d5414102a95ac6c293f9f7
+platform/external/rust/crates/spin 98c9f362903ec824b152cb75b7049e0a94d3c967
+platform/external/rust/crates/spki 86258102a4b2cc78d3e070cce8809e6b2d0a0187
+platform/external/rust/crates/static_assertions c205eac69eb98f3e603bd46940fbff2dff850510
+platform/external/rust/crates/syn 56a88a0028f45c28ffb2f8b7db82b84ba3c79400
+platform/external/rust/crates/syn-mid ab520c4c92c95d855f5e0d43f32c811abbbe9a91
+platform/external/rust/crates/synstructure b5c2a2d04f7f3a884e280f67b8c9e88f1a6428bd
+platform/external/rust/crates/tempfile 71361b8c73ddfa85d262e741bd4a1626f627815e
+platform/external/rust/crates/termcolor 204377a67cc22aac8774fc93a39d0f2ace450e8a
+platform/external/rust/crates/textwrap 0fceca5fd2ca67e57fa3bbbf49859f969c06a8fe
+platform/external/rust/crates/thiserror 7287a54ac56a549e5f3bb7fd9769df73e46f3fa9
+platform/external/rust/crates/thiserror-impl 054ac805c41ae346c5f5c958a16300279cf795fe
+platform/external/rust/crates/thread_local ebc472f104dd879bfa96f5ed4fc886506fc3800f
+platform/external/rust/crates/tinytemplate d7b96e6072a0d7684c3ec74a3ae0a076b61177c1
+platform/external/rust/crates/tinyvec 74a17ffdc64d277b018d0940de4165fc2259ade3
+platform/external/rust/crates/tinyvec_macros baa85e87c89872253d7070180829fef22253a6e9
+platform/external/rust/crates/tokio 35aa5f34551c4fb9d30e876b043ac58bc9d60bd2
+platform/external/rust/crates/tokio-macros c6a2d521eca1a9e5fd13e42f0044a1b1bf74de68
+platform/external/rust/crates/tokio-stream b6486bcfa854ecf419ee12a5f86dc9ec27762896
+platform/external/rust/crates/tokio-test 420f7b1a5bfeb9faaf0f8b8a3d52081188c355a2
+platform/external/rust/crates/ucd-trie d7008de02e7678daf0170abf7392e0d63e8bb86f
+platform/external/rust/crates/unicode-bidi 84ff5794081a6263e536621fec66fda80b6435a2
+platform/external/rust/crates/unicode-ident a3a87315e61958a69c801d8f95176e9802ca65d1
+platform/external/rust/crates/unicode-normalization 298525197efcf8bd3ececfe871d5107869ec0eb0
+platform/external/rust/crates/unicode-segmentation 3f3cc1c6ac0cb18b749f41c224cec8f5a6ed24f6
+platform/external/rust/crates/unicode-width dcd0cf855b1fbe64fd9935e2cb517ab64726213a
+platform/external/rust/crates/unicode-xid ff55ff12a49be076fe03120655abc7caea485872
+platform/external/rust/crates/untrusted 8e2b4d174e349883020dc72fb7b98e97d27faddb
+platform/external/rust/crates/url 5ba9e29e3ee9ac014146323bd702492d53dc7b4e
+platform/external/rust/crates/userfaultfd 82a8d750192c1aaa803aaa6731b6c0186d5bbce9
+platform/external/rust/crates/userfaultfd-sys 7dfa90c45ff3ab1471f6cf6a87e6a0fbba014ef3
+platform/external/rust/crates/uuid c7d453e17ba09b346e18f80e1c92b331b6bad45f
+platform/external/rust/crates/virtio-drivers 0b84d06c73c66284990886732ac61f5ceb1106f9
+platform/external/rust/crates/vsock 6e3d85501721c055638a2a8207d560a1a885065c
+platform/external/rust/crates/vulkano a9ecbf0be0d31f97bed44452d39712a09acba9d0
+platform/external/rust/crates/walkdir 8b31b35a62ab2c94e3d5d2ef63d45d1bce06e854
+platform/external/rust/crates/weak-table 71e75dd8c6a615713f88bbf2a219ef9693db82ae
+platform/external/rust/crates/webpki 6278b23c14360c008fc911390b828c213832df9d
+platform/external/rust/crates/which a3e429b6608214c43ef6112f97138f9274a15d90
+platform/external/rust/crates/x509-cert b8eaa02855a7a553566f27ee88ffadb7cfb41f6f
+platform/external/rust/crates/x509-parser a40e794be5e820414a950654c7f9ebb3bf79c84a
+platform/external/rust/crates/xml-rs 2a37deb65566029cb442352763fa1700b927a924
+platform/external/rust/crates/zerocopy 231010b20bab2c8c96835b5bcfa25ad8ffbd06a1
+platform/external/rust/crates/zerocopy-derive df01df70e5b70a777614a436a0a9c188647357b5
+platform/external/rust/crates/zeroize 0b19878493be5f86d41ee72c6a2a648677b4cf3e
+platform/external/rust/crates/zeroize_derive 030d8a2534c130b056a0d3bdbc0b74bbef0801f6
+platform/external/rust/crates/zip b5f7ba08227ecfb403b96ca42601a026a760104b
+platform/external/rust/cxx 7087a7380b689240871b96e1333c576c56274ccc
+platform/external/rust/pica 394d28572d67c038ba5ed78ce8be4bcfd5c233b9
platform/external/ruy e594be3530ec39f4d0ef1911a558f092f0a2d3dd
-platform/external/s2-geometry-library-java 5dc820c22279a46f88840192bee3351709916995
-platform/external/scapy 1caad40eef4597d3dcb2211af4e61d7e082098bd
-platform/external/scrypt da1d9502ded778345927d39dc4f1a383806521ca
-platform/external/scudo 1cf417b14ae7957aa309d7bac2eab2e8d6abf4a3
-platform/external/seccomp-tests d25a4532252c9fcbfd02d7991a3f71256a947e89
-platform/external/selinux 0f83ef6ef6ba1da36706b75c3ff9a8d218814e77
-platform/external/setupcompat f3510d445140a8733eea87aecebf40f34599c359
-platform/external/setupdesign 9c419a100221cbb1b4585dcf76798acf1ca2056b
+platform/external/s2-geometry-library-java 0e573d1fcc8c63db367edcf4c231376f42e00cf4
+platform/external/scapy 8333f103c6c6ae2b9859e55e7f1f5ab6571564b2
+platform/external/scrypt 551208ea8e8a571d433b77ca3782173f7949ccf3
+platform/external/scudo fcb06c186d68a33eda45f94323380b8f91f2b5be
+platform/external/seccomp-tests 6dabe3918ff9797490d62f28189ea68ee362508c
+platform/external/selinux b450056138210e94694c6a9cadae3dd311751507
+platform/external/setupcompat a8f2868cb2a386835613fb3b9528b656d87c4c79
+platform/external/setupdesign e899402cc861b47a05d1f5950d516b6a8b5b39a2
platform/external/sfntly fe29392acf34417778604bf77ca57aa133a820bb
+platform/external/sg3_utils fd06d03b41ff88adc00da0246b93e220bfb33b2f
platform/external/shaderc/spirv-headers a03f94d43f7dac9f54bcee8e69724ae91829bb60
-platform/external/shflags 4df078db18a0423b2c3a3ca9ff8715e78588674c
-platform/external/skia 196e52e772e6a00db06a6f062b57ba6c5a6b7a3e
-platform/external/sl4a dc170a5e07ae803e7189c254f3cf87c66f08f78c
-platform/external/slf4j 75ef46272de515a84a87e6919d83b352a507c30a
-platform/external/smali 39cb1fa1240dd9a2fe0af6bc0a3a1db6e2ba1a8f
-platform/external/snakeyaml 7e076fa567592a9e18e34b275beedd9927c44b3f
-platform/external/sonic 55f4c9a15ca3a26cb9b20b8399f6be08689987ba
-platform/external/sonivox f04a79542da6d9d9a0fa6562e2077d2e77344938
+platform/external/shflags ad1ee02d5f85f1bbb068076dda521e82f2a713f9
+platform/external/skia 5ac1668013da3618f65fbdc8bb6957e492f64fb9
+platform/external/sl4a b3ee7bcb563feb661de4c974ac070a870ed48a31
+platform/external/slf4j 15241ce9ad84fb1f17b93bf885c173a0c0b3cac4
+platform/external/smali 70958d60f32aa50cc5ebcd9d740bf463986f8213
+platform/external/snakeyaml aa8c37367c27e3f63d9dbcdc2980891ddd40849e
+platform/external/sonic 9573b4934ddff17fe3ff308ea551ca82b680fe70
+platform/external/sonivox f8f43222141a8dc1407cbe3c5e15539b7e94b54a
+platform/external/spdx-tools 18c78633ac349c203fa5d8a722089007eaa87b11
platform/external/speex 6e12ac033c672e180a9f3b8346001eec6d60cee4
-platform/external/sqlite 5e3ce2ccb569478172b5211c6e452fb69f8a8603
+platform/external/sqlite bfb0adbc442f56a4ca2aab027b0437f4fce65cb0
platform/external/squashfs-tools 38188e278a68fb71579d199d4e7b9dbdd32935fe
-platform/external/stardoc d74c5bdc91d16eb1ef48111bb7bcc94aede94743
+platform/external/stardoc b602f1e6a06273679058f7ad9d4f9a7ba6776e95
platform/external/starlark-go d7963ebcba6eef5571217a2cbc42d170c2b26020
-platform/external/strace 18c2a01bef7326bc16ff92e74d2b1da6c3db8450
+platform/external/strace 8deaba18636db5658c50a4aba79e34a76bdb7808
platform/external/stressapptest e8cbf6146f67a9d3f68a771098082f32e3b0e461
platform/external/subsampling-scale-image-view 9a0feff0f68b02798a332c4a42b1b1c02689ed58
-platform/external/swiftshader bee6e7eaab7282136ceada632b92528496c7706d
-platform/external/tagsoup 88af258062917359421f7e51880cefb971d45569
-platform/external/tcpdump 9138ea53ecd5b72cb12b4a13f4bb6663e3380961
-platform/external/tensorflow e683249df7a9e324840ca1751149a5aba123550f
-platform/external/testng ee38cf0991d78698acd85e18b4632a5ae7e939fe
+platform/external/swiftshader 9af3941307ee48b216f35a4be71bc365d02aa182
+platform/external/tagsoup a3f00b2e91e8cd32ca06193adac4da306e30a299
+platform/external/tcpdump 4d054ff7fa61e634121d82218c5b7e7b3cca5ce5
+platform/external/tensorflow ab3a68a394fc7d235e7a3f104a2541de98b5a6f3
+platform/external/testng f93ffccf9fa92e8f071ffa46a72a3111fe837a30
platform/external/tflite-support 4d91ae300ddc9a388394b8cd20008c0f160ff306
platform/external/timezone-boundary-builder f2ff4b4b75da9aba73bb390291c5ec8158ebb28a
platform/external/tink 8a0f8471938bc55d080bd327f4aa35105b972716
-platform/external/tinyalsa adc061ac79b7ab5bacde1d1d4ef6418f5ec41ecb
-platform/external/tinyalsa_new 994b8dc1ccf69ac4a0006dbf64ef4f90b2dd368d
-platform/external/tinycompress 24ff242f7473fdd760c769fc898d71a427dbb660
-platform/external/tinyxml2 43075ece36a2bbdbf04a6dfe90de905878a6b7df
-platform/external/toolchain-utils 1335f350d986bd71c0308099f56046e2e59baf1a
-platform/external/toybox 3a36b241ae873f7f21539887c03a593e9428ceba
-platform/external/tpm2-tss 11bf709388276bb3f96ec67be0b63aed79336b4d
-platform/external/trace-cmd 57b8940af53bceb02dcbe41640d2d9e4de3c3210
-platform/external/tremolo dfc76214fdf1511c884e3265e4df68ade0d5f98e
-platform/external/turbine 4de1bc96b993b4e62a5c809da111d18155498a95
-platform/external/ukey2 d3b3750a51d7abfa2d43bd142c24c2a1a561f9c4
-platform/external/unicode 1d00e277b47a57de291472504be0aa3eff8f4e89
+platform/external/tinyalsa debc7ef1fd705c162a631b1d86f04736ab41b9fc
+platform/external/tinyalsa_new 2d7bc490c71e47eac3d32269272059d2ffad0693
+platform/external/tinycompress a1cd75a4bb0b2ddffa92450c89cd972762be1a5e
+platform/external/tinyxml2 5bd4e543623434ff2d7e3ffff34b7ff8994f6999
+platform/external/toolchain-utils e44050c792ea350759be80929afcc1aa849e2afc
+platform/external/toybox 1fdfc743e0395c27a20dde59725b9144a9a211e4
+platform/external/tpm2-tss 6065318eb6c55eb176c935d3f04e79cf011889bd
+platform/external/trace-cmd 2c7791ac7fd34c0f8887a42e933e9261aa7e2e1a
+platform/external/tremolo 30b843542f0a242e7c8da62323bf63910f2bc5f8
+platform/external/truth 7308deb2c084ed06ecfff83d8b9190ba9f217806
+platform/external/turbine 00eca43939000481b0d3235f78a23c32ee340f49
+platform/external/ukey2 7552efb7b5ddddfc3e55d18db7a044bf7f013f7d
+platform/external/unicode 33642e99ba1bdbde791906f459ac9d5d71bb900a
platform/external/universal-tween-engine 54967739025d3e6164a5124f79d43aa8c6298748
-platform/external/usrsctp e30e898c87096f57c6a4583537c0225ad082f78d
-platform/external/uwb c5bbc04de14c2941d3941c0719fe39bc4df7de9e
-platform/external/v4l2_codec2 65f9c214c69b3778452db64ab0215f0c3f5961b3
+platform/external/uwb 80cb68266e7553a33d16880c4685a5b3a6ce2411
+platform/external/v4l2_codec2 79de531dfdf642c593148db255a74190896a222c
platform/external/vboot_reference cc0d5740d63b2480f043f22de2bb6b80d3c44164
-platform/external/virglrenderer 7aa78ae6dd6c1293e255b89be64ea9a5fc8b3e54
-platform/external/vixl 45425f14d17269196a331ba224749c9478827e5a
-platform/external/vogar 71f73f243858c9b488e0e72c97b5a5a2ff091123
+platform/external/virglrenderer b444c3649df11d006b077578be83857d7aec6700
+platform/external/vixl 0d844d424db14483c1cf41525a3b9f3e2af84c52
+platform/external/vogar ff9d1dfc5c74ad19cd27a5361531cd2da8bd76c0
platform/external/volley e688e54d45f04974ec0ddbdf0915dc188e7a433d
-platform/external/vulkan-headers c59b8725f3a90318c029d4e0f46a5a099f6804b8
+platform/external/vulkan-headers a789f9ba94364d09b0c5251da2a3b3201b3ec803
platform/external/vulkan-validation-layers d7e61e7e290f75bc7bfa1554d0378c5e8f06b43d
platform/external/walt ae9b4a7898b28c5fde303fd9579043eef3389f27
-platform/external/wayland 72f5657564d0da8e26df30b27f7843b235712ae5
-platform/external/wayland-protocols bfc3e44e27ca2216b85db23e1bb6e6748ac0e038
-platform/external/webp 41a8e643418e9d8a12b051de2d6c0e7b5cd53cb1
-platform/external/webrtc 64921ab65ff607677f5abcb9e0c0b4f5fd135992
-platform/external/wmediumd 8ef58b036fe51b61d14353e55df37987d1f002f0
-platform/external/wpa_supplicant_8 88e9998b69796c1df1bb8888235715b2e616b879
+platform/external/wayland 6ee7b087d8051bd335359ebb0f9eb6bb3edf94e0
+platform/external/wayland-protocols 4f8c3ea6b97ff834651728f4a4459bc405819dd6
+platform/external/webp 3e4a75a60df2d3bd3bf4985569c47c05e8c7df1b
+platform/external/webrtc e311b820a13ab9590ffedadbbed010ec988279a2
+platform/external/wmediumd 84c379565dbbedefe1dba03f58612f975ea817ba
+platform/external/wpa_supplicant_8 5b26dbc42c4ac02b9c304d416fbe4e6448379cba
platform/external/wuffs-mirror-release-c c819655d679360d40468a5fd38863263d1be49cb
-platform/external/wycheproof 0942243a6449b787b2b27423e7af3e482c5721c0
-platform/external/xmp_toolkit 6f82fbea7e16a1cab6dbb169c6336aca2f10b71d
+platform/external/wycheproof 080ecedef102027a75e05eff0f0ac3e1cef39abf
+platform/external/xmp_toolkit d0f0fc44f62fa0720bd88dbd525e8ac3d52801c6
platform/external/xz-embedded 0d14b6db5411887125a83f1a95635aeb53f2958d
-platform/external/xz-java fa6015bdd1671565da7fb76f4648f4141914d187
-platform/external/yapf 699741a8380f9fc9637f72359317be58d8460677
-platform/external/zlib cd9bf70e6baea95c970fe420522255846a9c7c17
+platform/external/xz-java 3736a4e542c163b85b40048db57d608adf15f658
+platform/external/yapf 322269168fad57b17a3dbe7923efddd9a58ba8cf
+platform/external/zlib a119f7d072ec5add20cea72a568cea2caf8d4b44
platform/external/zopfli 9d2f06a9600c4dc4ff77d639ccf2bf36be25ec61
-platform/external/zstd 523d3579d1af962ff082ede18cfbc1a17282b90f
+platform/external/zstd 32ed12e6122d805ec39aad8e91881dcaafdfe5dc
platform/external/zucchini 0b3b142146b045f60fd63e7c98adfc9d1b961ae1
platform/external/zxing 29b657007e78e198bef3c129293c6fbcea687e00
-platform/frameworks/av 7da69b36a6fc3455a5abd62d5ec13bb1606d7615
-platform/frameworks/base f67faf516630ef17f942eb5d8f11a81ebf423575
-platform/frameworks/compile/libbcc be506f8638955170c40becf36367ebc9f551e421
-platform/frameworks/compile/mclinker a84732f4b16a922b22fc73e954678d58afe7cdf9
-platform/frameworks/compile/slang 8df5daf0b3b92c8c90132633dbeb71bf9e4591c1
-platform/frameworks/ex ab29ad29fa8d1b3a386877eed7a20dc249af7f3a
-platform/frameworks/hardware/interfaces 5426f67ca021446832d7e0063d2073363102fa0b
-platform/frameworks/layoutlib 960a4f0a7c82fcb1c3e551b9e4e98ab5693ecd14
-platform/frameworks/libs/modules-utils b4b1650cbbaf21e3abeefca5027e227661652ce3
-platform/frameworks/libs/native_bridge_support 43565d47e8dabda59ef61ce1b165b583a7cfe626
-platform/frameworks/libs/net d11a613cae97ffbee0d94e1f3ea12f679c8ff3ac
-platform/frameworks/libs/service_entitlement 0526f8fd3b0dbbed4e53f2454301950eb4ea90ce
-platform/frameworks/libs/systemui 7725c09a48813313e270739856e5a543178943eb
-platform/frameworks/minikin 57f234a711212f2f5872fc223792bdd964350673
+platform/frameworks/av 6bfba1b0c499feb76e8fb982c70c8ce24730c3c1
+platform/frameworks/base 40500d79343f05d77a0a51ff962068d57b688dc3
+platform/frameworks/compile/libbcc 6525b3226c76cf11652c0a62e148414974a26d2e
+platform/frameworks/compile/mclinker 3620992766acf27b471d41ba937a9a292fe3a100
+platform/frameworks/compile/slang d015172e7a48fd277e7360c81a6810120ae444c4
+platform/frameworks/ex 1469f165aeade3b9cf70ec92a9506220f25bb6d7
+platform/frameworks/hardware/interfaces 6f50a8591ab8766bbdc7d1be1d2bdedd1f7b423d
+platform/frameworks/layoutlib fc607d67f8491c16cb6c341215fdc2bbf68b7a71
+platform/frameworks/libs/binary_translation a5ec09c7effc2d9b98d3708555173046bafc9a86
+platform/frameworks/libs/gsma_services 153e589575df0946b748bdf74fdac0f042e6c5ba
+platform/frameworks/libs/modules-utils 59552b1f77f2f0c865fe64662bf28eef4d6d059f
+platform/frameworks/libs/native_bridge_support afd00d4af4704370e7feda4c56de903b90bfd58a
+platform/frameworks/libs/net af83ca23ad6bf192957820c30482a8d304962861
+platform/frameworks/libs/service_entitlement 3f0b23481ac57d7f90c69a6255ef5e6f934293fa
+platform/frameworks/libs/systemui e245563864774abf36a3488c748a5271e48d9462
+platform/frameworks/minikin 4186d473ca2c0231b4475120cff791cc1c1210b9
platform/frameworks/multidex 11c3539693eb636c5b29ae7bce95f036c1c89f4b
-platform/frameworks/native d6976abb975faf64a698a83cc67594e856b92154
+platform/frameworks/native 88d2bfabf36981e6241107c608b187d7c8ba191e
platform/frameworks/opt/bitmap 0f6807f5ae1420dd9e6efb7ca897e75bf0768167
platform/frameworks/opt/calendar 21f0c7b946b67f29c94230a4628baf23070e7f81
-platform/frameworks/opt/car/services a913216afc95c3fc87c55ea399f5d4f2082c85d3
-platform/frameworks/opt/car/setupwizard 31617626405c59314e888ed3d440ae853d9ec5d4
-platform/frameworks/opt/chips 2c6b0d83e304fdc66bb47d86a04ef97c7a54e90c
-platform/frameworks/opt/colorpicker f0787d953cf9342d17e75885ddbf32afd8eaf164
-platform/frameworks/opt/localepicker 2d32d47dfc083c2094865d38acd7d3c59a9db4f1
-platform/frameworks/opt/net/ethernet dd3c291369b652efb491c59b2933155e1414b370
-platform/frameworks/opt/net/ims 95de6f184214be06a5699080befc125b6dd40fce
-platform/frameworks/opt/net/voip 45f47723452db6590404326fd95a2c7aae392b46
-platform/frameworks/opt/net/wifi c9cbd85b936be1ebc2e458552d87fa8e7b675e62
-platform/frameworks/opt/photoviewer 034944f225c92c47d4f5bc34e0e1dd13d701904e
-platform/frameworks/opt/setupwizard e1c19bc45e19aa0d2193a698b5faed048159b61c
-platform/frameworks/opt/telephony 6f7fb9729a859774c3ca021db166870ed90dcc30
-platform/frameworks/opt/timezonepicker c7037dd9637b77720e560f4912dc4a8b4cadd6cc
-platform/frameworks/opt/tv/tvsystem fbf92f2ba045e8857d7e94c67a8f781a9ab7f091
-platform/frameworks/opt/vcard 2ddc843547da31b6a1267e0ee2725a67a2572b83
-platform/frameworks/proto_logging 523037363895c7fe7f5cce0243c0a35183c00fd8
-platform/frameworks/rs 985b5a82d61c35a2a8df187bb7237c05c1b8ad2e
-platform/frameworks/wilhelm eedcaf1c5c1542387d8e953e11de8d3e3836813e
+platform/frameworks/opt/car/services 9ead00a60dd1460f87dded025ff582ea7b93b43a
+platform/frameworks/opt/car/setupwizard 6be50987518c9598bb107183869586f98e7645a1
+platform/frameworks/opt/chips bf22de240bef5503d75e122411e7f07fd13c9a61
+platform/frameworks/opt/colorpicker 7e809008401a7db54048043c8145325c73f9827c
+platform/frameworks/opt/localepicker b1cb8e7154327e3493ad727c34773c4d408914cf
+platform/frameworks/opt/net/ethernet cd699555b201b37ccdf52d2f80d58a8532a673b1
+platform/frameworks/opt/net/ims 74c8f6ad814f52b6524f7a8bb5ff0bb77f1eadc4
+platform/frameworks/opt/net/voip 749184ef243224e4bdfbe7de13d236884500497c
+platform/frameworks/opt/net/wifi 74c3b48aa7614153cc4dd95825ee62d88a540892
+platform/frameworks/opt/photoviewer 5b1764a9cf515aca31ebc58cf6da3c9169b830bc
+platform/frameworks/opt/setupwizard e52c3822d8733d6bf2b5ecc6c39b32b9cebb5bc3
+platform/frameworks/opt/telephony 2c361a77de72832b9498acf5e18f138c65076163
+platform/frameworks/opt/timezonepicker 9891db68cba52a1954415192d0707ce6785dc454
+platform/frameworks/opt/tv/tvsystem dccf1cf27d3471d50976b442b25a0d54e90cd256
+platform/frameworks/opt/vcard 7c9c476241fccc25879e29a9cf27529b54195bf0
+platform/frameworks/proto_logging 96b934def96203527ca1cb1f9a5c3e3b6a0bc028
+platform/frameworks/rs ef16c707315bd995647a45ed5217e0cd550ba709
+platform/frameworks/wilhelm 998ec739d5827dca5c7c8ec7f27be30bcca5effc
platform/hardware/broadcom/libbt ffb477dd2e0b922666a290eef4266ddd31bc2550
-platform/hardware/broadcom/wlan da343d8efc34ac42b9c72699331bf17806ed5bd0
-platform/hardware/google/aemu 43598115d55365b94f240668695605889cbaf14e
+platform/hardware/broadcom/wlan 908c98927b7ccf5972d6530e6eb471bc116660a4
+platform/hardware/google/aemu e05911f6d4419df10d0ca3ea58aeeddfe4b63518
platform/hardware/google/apf 8d3c579afd52a88c14794a6d9ce4a4869eaa8668
-platform/hardware/google/av b942e3b3bdafc230a766aedae74c02b53252ef74
-platform/hardware/google/camera ec6d03ef058935431f100293b27a6c393cbc2e44
+platform/hardware/google/av 983270dd08ae46b15796010b4728cad05a26a524
+platform/hardware/google/camera 795563a54951a6983f03213a85e38dbf9d8c57f0
platform/hardware/google/easel 9cedd8c51e2651015df54607a7b019bd7a038200
-platform/hardware/google/gchips f6ec0168d7aa2b4a05e1b3fba01472cde17f4f77
-platform/hardware/google/graphics/common 1359c9c3d2686c49f1cb4eecb814a37ec6af6d84
-platform/hardware/google/graphics/gs101 e369807e08b5fc584a31b8e8dbd33343d1b064d3
-platform/hardware/google/interfaces e49df161df969a2bdd2e220c450e9cfc94227ab5
-platform/hardware/google/pixel 3bb48d938f8cb7069c7a37fd66c4d03fb8dd187d
-platform/hardware/google/pixel-sepolicy 4026147c8d1b65f1cf85e163d1e5abe129c1ca96
-platform/hardware/interfaces 145ae194666abb2d40206520ca3209a581c1f014
+platform/hardware/google/gchips 44e06c4cbfab5377b73dc12aa4612876abec9918
+platform/hardware/google/graphics/common fc1bfb76f2f8751d911b577598444ccf9550cfb3
+platform/hardware/google/graphics/gs101 c2e2b8400d8b6ef2e9dfcc3cfab2f58f3bb2ed1c
+platform/hardware/google/graphics/gs201 d00cb41b4fa1644aec7adbd44887383c544000b5
+platform/hardware/google/interfaces e709400cd91521b1b2454138620d4ec17b4e6085
+platform/hardware/google/pixel 1da3272a4d425cbfa808e1d79d82b38a9a75b22a
+platform/hardware/google/pixel-sepolicy c9f69a6c1dc9208453dac1ff901df65444fef176
+platform/hardware/interfaces 2b08791403f31a12eac78dec0d6c1506e07bccf4
platform/hardware/invensense 899d1e694318198cb2b550132df3ceb918b876db
platform/hardware/knowles/athletico/sound_trigger_hal 5b2f80ee4ae73502d2cae463ffed07431b724b59
-platform/hardware/libhardware 49142c9f7021d7d77b85d5305131c7dc3c299e12
-platform/hardware/libhardware_legacy d4e96bfd2fb2bd911b8608b9021d69e4bf0b23f5
-platform/hardware/nxp/nfc 7871ca10198e1a8335309782e38be1d4327182a6
-platform/hardware/nxp/secure_element a5a26b0a5fb1a288375813f2efe75d6f75112e57
-platform/hardware/qcom/audio bc1332499028df8ce8f945b27cd45e858811bc4e
-platform/hardware/qcom/bootctrl ecfd0ef0a9b72f0651069a461f9e8737baf1578a
+platform/hardware/libhardware 08350401dd803c8a58602255e8c90f2929ac950c
+platform/hardware/libhardware_legacy 1a2f675dea4a522190834f5667f9e85a36125674
+platform/hardware/nxp/nfc 08da6d2d169258abf036833455cabe76709a33a8
+platform/hardware/nxp/secure_element 5d0156345494c43d9f3d21b35bdef8f896f191b3
+platform/hardware/nxp/uwb b4a887085cff8a80d9888b898c3877229b26f7fe
+platform/hardware/qcom/audio de6b5b71f7e992486b1b5f03214baf8a9ca04fd4
+platform/hardware/qcom/bootctrl 8178637f189b29d19c3eb9b1e185e93afa626d46
platform/hardware/qcom/bt 9e083335a0d870cf9936632038e324a8854e6d99
platform/hardware/qcom/camera b6c1c75441e14d3c2e65ffb45d7d2016b126b4b0
platform/hardware/qcom/data/ipacfg-mgr d1fe2e16542f72fd4e20e326d73830863da2ec61
-platform/hardware/qcom/display c7e5726572cc982bfe1c9f424b8a87ee435f82ce
+platform/hardware/qcom/display e6a4d092a84892af634c2f7e042e6a94af633e06
platform/hardware/qcom/gps 38bd8ff96a51ee33a132bce12d6895e4dea67579
platform/hardware/qcom/keymaster 8d4640e72b7b2d66d0090e9f6f689310d1883046
platform/hardware/qcom/media cd13d3df2f65533e12442800be830e4d52729648
@@ -832,319 +890,323 @@ platform/hardware/qcom/msm8x84 11807702c114ba029cb5a2c2b7826604dce62996
platform/hardware/qcom/power 063ef35767f707337ab5ad82dcad9028bc6231bd
platform/hardware/qcom/sdm845/bt 1083dc7a45a9c8e807c227b3258caafbb4f70c4b
platform/hardware/qcom/sdm845/data/ipacfg-mgr f7c7f21276969fbfdfc871d696258c358566f066
-platform/hardware/qcom/sdm845/display 43936939a24cef54869d0a6b969e683a8cdcd45c
+platform/hardware/qcom/sdm845/display 10420b9ad1bc50bd4da7e8c1681fc0995bec386a
platform/hardware/qcom/sdm845/gps 6106240cee4b9b47efeda1569a7e12336811d3ca
platform/hardware/qcom/sdm845/media 3e68d531b0f8df0ef4f18ff47acf255d8bee7579
platform/hardware/qcom/sdm845/thermal ec49f13eaf0bc280dbcaf11e7783bb95d5eb1491
platform/hardware/qcom/sdm845/vr cbf1cf93698aba49e16ef70554dc9978cf6b3244
platform/hardware/qcom/sm7150/gps 31e3d4c5dcd29b66f46cc10d561e89e465b2fec3
-platform/hardware/qcom/sm7250/display 18c9db264eb37dc557bac4aba44f8220967d3962
-platform/hardware/qcom/sm7250/gps d546bdc603371cd1a87bc68948df017a3ef03e58
-platform/hardware/qcom/sm7250/media f541eefc63646243398d874ba671a8cc1dd851c6
-platform/hardware/qcom/sm8150/data/ipacfg-mgr fc4ec6ec4b22bf38d8c630c94cd2e6835c89b030
-platform/hardware/qcom/sm8150/display 39f75af5915ad635be86c6a337497ddd9e11e56a
-platform/hardware/qcom/sm8150/gps 15a36a5d10b08f4a6b5a04f20ebf4f788fd7e5bc
+platform/hardware/qcom/sm7250/display 8a1ed7eaf3994d895cff9a1cabb693c5b019b16b
+platform/hardware/qcom/sm7250/gps ea07d173de7ea6121136b5bbb25ff6baeaf890c9
+platform/hardware/qcom/sm7250/media 15327faf31ca571b42f4402dd7072f90b1f7124e
+platform/hardware/qcom/sm8150/data/ipacfg-mgr 5e98f1cfa1bdcd520398d777d64d13086d75fc34
+platform/hardware/qcom/sm8150/display cbcc63037d5663bbf36e0673bebd29507406f6a1
+platform/hardware/qcom/sm8150/gps c59c5a038ca7eb39f6f7fa525fda9591a0403b24
platform/hardware/qcom/sm8150/media ac03f56055051aee0850951ffe29f61303e1c701
platform/hardware/qcom/sm8150/thermal a83238342f9bee6bde3a869c3fe82218a076cd94
platform/hardware/qcom/sm8150/vr 86508c8138684b2b240cfd91c7f63782b161ac54
platform/hardware/qcom/sm8150p/gps b1f379d513b63e2ef2065b9e7f860a4eef20f383
-platform/hardware/qcom/wlan 6c07aa824492d9b1237d0791dcc26e818ba8026d
-platform/hardware/ril d54ca3e9d22f1e0b2de0a791e8d0f4ccb9003596
+platform/hardware/qcom/wlan 928b648a7930b39e222d9340860ce6c6c7baab1a
+platform/hardware/ril 18cdd261b17bb69c94c7d8ae5e74576ddacb01b1
platform/hardware/samsung/nfc bb4f60ee812932569775f0db0da544c5f2af40a7
-platform/hardware/st/nfc 282b832c17ef0986a9f033be9d43ef90fe30451c
-platform/hardware/st/secure_element 3b7769c690f4c280b013ac08484f95fa58ddf9f7
-platform/hardware/st/secure_element2 350ff5890429080e7ba93ee5c0c6cce44721691d
+platform/hardware/st/nfc 64cbf172af18711afc0577add529adb63e3ee08f
+platform/hardware/st/secure_element d511276ea865a5dab2203e81cd04cd89a5af14bf
+platform/hardware/st/secure_element2 f385ddc6d36e319fccd71e274d620194276a52aa
platform/hardware/ti/am57x 3b9a67372dfb7e3f9697d4c8c742fa26c8fba0eb
-platform/libcore 4e753d6957352a46951b1c5c1f62e8795fc2d34f
-platform/libnativehelper 7b041c53b7945ea0daff8c9d8d2f9ef1680bfe6f
-platform/manifest 2ed4c16a245870edafaf560dfebd3c9f58d02456
-platform/packages/apps/BasicSmsReceiver 03b9d502359a9811f6b883511429e6b4211892c3
-platform/packages/apps/Browser2 0859a695c4f4c640d24cff65e93fb63f277753bc
-platform/packages/apps/Calendar bcd0513df6eb1169bc1b96ce74ba76882c0b7775
-platform/packages/apps/Camera2 63552e2f97f543c194e118a4d312c3a9897ae8cd
-platform/packages/apps/Car/Calendar 72ed0cfd2563f3350b95c5cc9d0bf7a58bdbadb3
-platform/packages/apps/Car/Cluster f00415f523ef900056c06515572f0353eb706eb6
+platform/libcore f036b43b38da6b6ff997dbe8fb597ad360f895d7
+platform/libnativehelper 91675a647d7e6529a9e280e07dbc8faf704c413f
+platform/manifest 0afed90c8a284818909be198a372d8cc95ca74dd
+platform/packages/apps/BasicSmsReceiver 5285d6d15ec297d0a412e6f6bbac948da3525fe4
+platform/packages/apps/Browser2 927f361b4a93b77b19101b1bd4cf7d9428ce2a73
+platform/packages/apps/Calendar a067b3bdbc735f614c075cdd33212a83782a6c9a
+platform/packages/apps/Camera2 4b6f10908dcaf5fa2a1620a965ca355279d90777
+platform/packages/apps/Car/Calendar c3eff3da9806139335b4059300b318a1dea82e95
+platform/packages/apps/Car/Cluster 95fcc12144ab94b8075a22028a8ed134bb1638f3
platform/packages/apps/Car/DebuggingRestrictionController 1d41ecaa75a38ff966ccbd946644f2ea1f9a5859
-platform/packages/apps/Car/Hvac 5dd24ff5273c91f80339cb25937386fae434dad8
-platform/packages/apps/Car/LatinIME 44ec9051e6223ba18a5003221e8da7b8867f5042
-platform/packages/apps/Car/Launcher 66ab1da6bcf6f805c5110a7276c53dd44e9bd6de
-platform/packages/apps/Car/LinkViewer 01915269455f38ac97730ab95f125f16b401240e
-platform/packages/apps/Car/LocalMediaPlayer 1c621fc223a258c7063bb915ec10a0307c71cdc8
-platform/packages/apps/Car/Notification 8cafffb7eacbb8d87ba7851c14cf16167845d2b6
-platform/packages/apps/Car/Provision 477a37079c0e21d86263bc5b8f2c935c3e51385c
-platform/packages/apps/Car/Radio 9ec95bba39e2c0f1bae629da1a6f06412ad20b92
-platform/packages/apps/Car/RotaryController c3dc76c997ed44c052259e5825a7f83fb0823dab
-platform/packages/apps/Car/Settings 1bfc906265e3105020bb4531cd94c8e0cd09dedf
-platform/packages/apps/Car/SettingsIntelligence 5f97eaa11b8c23a6c9ca4e6ecb25090a103c5873
-platform/packages/apps/Car/SystemUI d026ca3b35c05476c2062c965897762fd7229048
-platform/packages/apps/Car/SystemUpdater 5393d858e3cba8f7be1927ee2760fe3bcc796288
-platform/packages/apps/Car/systemlibs f7b022300f4007f3f6661481f3b27cacf293605d
-platform/packages/apps/CarrierConfig aad9c079a101b48a72d3b612ab7c03d19cf62ecb
-platform/packages/apps/CellBroadcastReceiver 790a5ea17ae7e1f3cf3318e2ad94efdfaa1f43f6
-platform/packages/apps/CertInstaller c6151f9d9a718685c73cae3980846f3a82fd5d1e
-platform/packages/apps/Contacts 16a1e66b5be41b91e1a1510e21eda3c5ab32e86c
-platform/packages/apps/DeskClock f07ff9e4b90052688e8d9b8d28db951e35603b97
+platform/packages/apps/Car/DialerPrebuilt e59cdd4e70d9515a46005bedb075eaab91787b1f
+platform/packages/apps/Car/Hvac 7c3c7fe692da31e42c8e97c9555289d2cce1cb50
+platform/packages/apps/Car/LatinIME 8be7f8faf501ab6b55353a8c5a852981ab818ea8
+platform/packages/apps/Car/Launcher 07b9c86cccb31d6e38c9876913b2b10432278253
+platform/packages/apps/Car/LinkViewer 801626c017ac51fdab06449b03268056c82ed9f9
+platform/packages/apps/Car/LocalMediaPlayer bb7fe44afda522de6ce70c45fd28c3dd74023061
+platform/packages/apps/Car/MediaPrebuilt af48dbc0df53731c86f54aa375167dec85ff9dec
+platform/packages/apps/Car/MessengerPrebuilt 71b1857c5a551b5832b5f80fea076be0b4da30b0
+platform/packages/apps/Car/Notification 7f0bc7d34bd85348656d46fc61814e8e436bd799
+platform/packages/apps/Car/Provision 318c1493e4cdeeb9f835c84cc4ef41253533b15c
+platform/packages/apps/Car/Radio 967e5d5ef7245c7ff00ec89434049fab16fc2a97
+platform/packages/apps/Car/RotaryController 185955741089eaa9a0d1df8cc6e9eaaff71564da
+platform/packages/apps/Car/Settings 61face35b59d08fb67bdbf7d711dec953d4a5904
+platform/packages/apps/Car/SettingsIntelligence 23ae4848898642ce27089bb67c4ad5e8f4a82a70
+platform/packages/apps/Car/SystemUI f5de081cf3db0c7cf8f38d85b445fb3d5cabd968
+platform/packages/apps/Car/SystemUpdater 9089c226c3ef94b6f960c8d895f6d20ba8295dbf
+platform/packages/apps/Car/systemlibs 921f6fd8520d0980c30af2897dd2f26be8e5bc4f
+platform/packages/apps/CarrierConfig f294f038e5e6274c75c03040ad63bdc0ddcfdd68
+platform/packages/apps/CellBroadcastReceiver 91b1e87f52335edfe8ddf277cc6dbb1d5ca371d7
+platform/packages/apps/CertInstaller fa842c980792bd6e22478cfd5b3f0338beb50d39
+platform/packages/apps/Contacts 8c585c5c648c1c736c23280cb4e1af840e489a94
+platform/packages/apps/DeskClock 3ddbecc8292ba0e9232864b34c2fa2f5041e9f08
platform/packages/apps/DevCamera 7965e16f438138eb77befa3980ab8d6978044266
-platform/packages/apps/Dialer 43e00190afc3c320b3034de416afc4bc96cc9de4
-platform/packages/apps/DocumentsUI 8972102f70df9568e4cde6f1e3c5d0e38d7df4f3
-platform/packages/apps/EmergencyInfo 5279f99c60dac669fe4ca463c8f3247a6be9b9af
-platform/packages/apps/Gallery 9b32ebbf5962494bae592a3f786c8423bdbc0f50
-platform/packages/apps/Gallery2 870ded823f6d38713da423a33ae07b76d7226cf5
-platform/packages/apps/HTMLViewer ec4f0addc90d717cec2a3bbab8f603cb2548bb00
-platform/packages/apps/ImsServiceEntitlement c5fa2e6451b1758bb6609c5e4aa48c8340f4aea2
-platform/packages/apps/KeyChain 96abfdf4b3272c4c2112402c49ff21f6540e2fc2
-platform/packages/apps/Launcher3 e30da4fa33ff501ac659e9edf33d1cb62e6fb8bc
-platform/packages/apps/LegacyCamera bf0d5792740348e68022a28710db10d4285cf7dc
-platform/packages/apps/ManagedProvisioning c57c5a8d5d9982377870f6eeceb1200d199f98fb
-platform/packages/apps/Messaging 198da9d8ed0e391fbb776e695d906815ac022a2c
-platform/packages/apps/Music fa8bda932cfe6c0c881f81b23d27f5d7070d39c0
-platform/packages/apps/MusicFX 12902e7e7b22f847bd12438b2cde645b99737483
-platform/packages/apps/Nfc a0ac812e448405c724e296bc4eb7f00b5f0c872d
+platform/packages/apps/Dialer 64a9c1a9eca8c138e5290947f8b9f8b970da7c8c
+platform/packages/apps/DocumentsUI 0ef9f7822e4a374b3448700f2d52b9882880313d
+platform/packages/apps/EmergencyInfo 07546db50064fa1c07197c52813a1070d8af6890
+platform/packages/apps/Gallery 8acb85eda5f6d21db187213d9f163868c16e67e2
+platform/packages/apps/Gallery2 e4466883a23f04e00f6969be3de5da48bf22abc5
+platform/packages/apps/HTMLViewer 9d7c79c3cb8af9617a8d5d38b1f01849e1d75c6c
+platform/packages/apps/ImsServiceEntitlement 91b8140ae68c2e708bcfffa140220c87f40e8003
+platform/packages/apps/KeyChain 09661dc2e4375eec4af50a6db2f2a32a46eb6547
+platform/packages/apps/Launcher3 44dc3e9e45a7dc655b42a35de2ead35ec4e72229
+platform/packages/apps/LegacyCamera 186a9bfb78f2beba39cae836974bfe84e8126741
+platform/packages/apps/ManagedProvisioning 31a69bd50dbf0a8feef5daf310ec2d7536cbcc96
+platform/packages/apps/Messaging 8094b09a1196fa574bd6afc276e81789f8705e8f
+platform/packages/apps/Music 764acffa043f4951627fdefef2276187f7c2f4a3
+platform/packages/apps/MusicFX eb2a965d8493d340891e55aa06a2abf4575a4a66
+platform/packages/apps/Nfc 0c45bea5a677a0278d6f7f26978ecb2945182653
platform/packages/apps/OnDeviceAppPrediction 4253830a1f77f3418861dfb207bcf4375efa67e4
platform/packages/apps/OneTimeInitializer 9d2ebf7eac79a62d8396df0fcb1481801d6b0e43
-platform/packages/apps/PhoneCommon 1336657c957f6c8a636368c016181317db26e5a8
+platform/packages/apps/PhoneCommon df78f5eda6fd77369d2f67509fa16d16bc640a1d
platform/packages/apps/Protips 85fe46f8b3b9fb8bd4286fecfcff0b86301f64de
platform/packages/apps/Provision bb1e8dd120f3d2ebb6c76b8fd370c181da8b1c75
-platform/packages/apps/QuickAccessWallet 3a6205263f1f51e0546c356d20512b08dfea5542
-platform/packages/apps/QuickSearchBox 98c6384cb5fb78cc1b79c71fcbc6f9a81ffabca1
-platform/packages/apps/RemoteProvisioner f93f4414ccbb2dc766cc6715a2ee5805edadace7
-platform/packages/apps/SafetyRegulatoryInfo 0403fc77f9f3b670f4cb06b9c7deb3380af5a0d5
+platform/packages/apps/QuickAccessWallet 8c77e2fd40ccb0ba7030214e4138c70f01cfa2b7
+platform/packages/apps/QuickSearchBox 277824f231a00619199a62b7722b34fb11b7a02c
+platform/packages/apps/SafetyRegulatoryInfo ccf27ff0e6d758eaabd7231df340d0e46b010a84
platform/packages/apps/SampleLocationAttribution db4a2ec782b67953019f5be6c33c8cf7982fc4c4
-platform/packages/apps/SecureElement 2ce6fdc474d0066da879bb61f8f7beef1fc924ab
-platform/packages/apps/Settings 100e04fb6fbc5e1e1dc7dbec33e723227571f937
-platform/packages/apps/SettingsIntelligence 27f3d15f367b53fd863bb3bb311691ad685acc1a
+platform/packages/apps/SecureElement 740ff73636ebff48f0576e568ce1a1eba9879e7d
+platform/packages/apps/Settings e31eb8e4ae57a3476ef0e13cc7abda034660943f
+platform/packages/apps/SettingsIntelligence a13667af0af1eb793166cf0cc928c199b1aa35f8
platform/packages/apps/SpareParts a7171e8a15ab484b81a7bbae714abcbf62c10f13
-platform/packages/apps/Stk 962311ea8b76d31e9291ff9c3a1f28ff5ce50027
-platform/packages/apps/StorageManager 746dcc4a56317b8d7b3c450adf61f4592c7e5e98
-platform/packages/apps/SystemUIGo 856b913b385d2a0aa976ff302bb8e76c03b6d358
-platform/packages/apps/TV 2d3852a162c7900abdee31e3081729a0f5371b5a
-platform/packages/apps/Tag ba34356f05b27aed178e9a7d269769f60574f3bc
-platform/packages/apps/Test/connectivity f26dc70516e9f6084f4580812cd73f35ab39364f
-platform/packages/apps/ThemePicker 521d50ca6b9e55f53222800a11ce52d744f58252
-platform/packages/apps/Traceur 94d3a90a1c903ca5052d96a893d897d2a2523b54
-platform/packages/apps/TvSettings 05c904c2e1e8befcb10b1c042e4783c11edaaea1
+platform/packages/apps/Stk c356807c662caf273677bde7f3729c42dcc63fad
+platform/packages/apps/StorageManager 9ead17fe5864341570b773d1b05979fab80c0698
+platform/packages/apps/SystemUIGo 33d19bb0e086a0513b134e80aef589d31e51b561
+platform/packages/apps/TV 2fb0eee71551b6cdbf3fa22483064091ed6d562f
+platform/packages/apps/Tag 2230877f669f27bb9621c7b6be5629a31d5f34a5
+platform/packages/apps/Test/connectivity 08c4eeebd042964669aefa05001b613b71e290ca
+platform/packages/apps/ThemePicker 44e735ea639adba82ce60bf8b1f462598c85b97e
+platform/packages/apps/Traceur bfce33f29bcf8ebaa2bb8a400d07cd1d627506b3
+platform/packages/apps/TvSettings 68fc0d0285f3d6aac9ddaed26eed7a17efece11e
platform/packages/apps/UniversalMediaPlayer 2ac7dd2e45400faee37b16b437c8982e7c48568b
platform/packages/apps/WallpaperPicker 458e181bfa5c18d8cb6dbab77192c5d261ae9c4b
-platform/packages/apps/WallpaperPicker2 4566424c4b8004f94e3d1ae66a8361f4e7fcd2bd
-platform/packages/inputmethods/LatinIME 7233a746e56bab03e6a7f40e3f674122842306f4
+platform/packages/apps/WallpaperPicker2 164be6d43232715c9b494cb7e0e72f4d556dadef
+platform/packages/inputmethods/LatinIME 5bdb975e2a29a2f8e1c2a3e85b42a92a15d50af9
platform/packages/inputmethods/LeanbackIME 28b6f6b0266e0ff8cf672810fddfe7f686d777a7
-platform/packages/modules/AdServices 7be5fb5df3524927ffde9d09e9210d3577fa2744
-platform/packages/modules/AppSearch f1e7f87dc21fceef0dcaec9e55df25f3e55fc610
-platform/packages/modules/ArtPrebuilt 01f0c690ad82f2d523772f2939a5c570397d1d9b
-platform/packages/modules/Bluetooth eee8f4228156a9b1c717a18a29293e1413688871
-platform/packages/modules/CaptivePortalLogin e2d49af94a9f154283c6b82a3c9384ec2afaa427
-platform/packages/modules/CellBroadcastService 851cbbdd63b39eb8545aa2c7548ff99155c30d57
-platform/packages/modules/Connectivity 97ee1594ff12e9b0bf9886f7046489004780d67b
-platform/packages/modules/Cronet 6fac7d1812c05f64aefd525bcda3084b082b0525
-platform/packages/modules/DnsResolver a73ee842ff991e3244bb2c395b74ce525b1e9a68
-platform/packages/modules/ExtServices 7dfcc77cc2bdbb19b8c780091d0b4911f74c53a6
-platform/packages/modules/GeoTZ 2f43325769c8db8ff9338224d30205db1f31f140
-platform/packages/modules/Gki 17d516d326ea35a93c858d0becbaaf3b106b8046
-platform/packages/modules/IPsec d2d26cb3646b9567876826c6e6451987f829045f
-platform/packages/modules/Media 292a711346062050ac9e5fe32479b9adef23adfc
+platform/packages/modules/AdServices 0bf7948a13c138b75f6ee70cbb701a52888b3f8e
+platform/packages/modules/AppSearch 3f61fcc4cd5a2e03541758460685f936f75ca867
+platform/packages/modules/ArtPrebuilt eb905ca5a0db4b4386bc5cea26fd674608d94942
+platform/packages/modules/Bluetooth a3abd861cf5af969f000aa64e5a579e2a15ed8f6
+platform/packages/modules/CaptivePortalLogin 14df06d174f5c4a75db27d2e28ae8e1e8df74236
+platform/packages/modules/CellBroadcastService 0af0b0e53edced9364cd67e7a61f31ecada25753
+platform/packages/modules/Connectivity acf242c44408b1017865861bfc02c625b524e995
+platform/packages/modules/Cronet d476ed88469c76836b26b6ad8f7960672da769c8
+platform/packages/modules/DnsResolver 9c4c1bd632d992754045d329ec179d7da7ce2372
+platform/packages/modules/ExtServices f670875b02f61a46d88fe2998cbae11d3a9188a0
+platform/packages/modules/GeoTZ e42deae1285263d0c46e45ddc6cb5e7c621f29c0
+platform/packages/modules/Gki a54224ea2fe85d022436eed37eecb181bc44ccfd
+platform/packages/modules/IPsec 06505c80fa10aa8954b9d2e69a865c0864ace244
+platform/packages/modules/IntentResolver d66239f1c53e35042f70e47964473a4e22c474a0
+platform/packages/modules/Media ce5091748b48ac34c2696ca8c0bacbf999fa1f21
platform/packages/modules/ModuleMetadata 772a50277ccfcdc4be22c01110de174d742fb980
-platform/packages/modules/NetworkPermissionConfig 4152108381742c822630ae5a1c22182c18c026ad
-platform/packages/modules/NetworkStack e52bf34a1fdc75522981a7e48a4562b48493dbf2
-platform/packages/modules/NeuralNetworks 16d8499ab23967e6904095fa115fec852b32faa2
-platform/packages/modules/OnDevicePersonalization 441d7a2dc86288fc518ff0475a5b701094bf4fd7
-platform/packages/modules/Permission bbe98ba4ca81464a935154441c33b04cef944ade
-platform/packages/modules/RuntimeI18n 3f92d8b5733fe260aca551d0e35bfa822a3945b0
-platform/packages/modules/SEPolicy 48459b83e2ab1e1c7d320ce0fafa7c5e49940704
-platform/packages/modules/Scheduling 3a0c785d4217c18d89285417e71c4fd850cec961
-platform/packages/modules/SdkExtensions e1562c7ecdcff5e7a965fb8eda181dcd7f047dd7
-platform/packages/modules/StatsD ffd9f6f302751921169d805dda02e18261c2a1e1
+platform/packages/modules/NetworkPermissionConfig a1fa0e802598cf8d4c2e6df26f8d3cfa359d994d
+platform/packages/modules/NetworkStack 5f061cccf57779c72ed4c90278fcbadfb60252bc
+platform/packages/modules/NeuralNetworks 47bea5320249e0501d4fce0dfc7b20a68553609d
+platform/packages/modules/OnDevicePersonalization 8181c96f0c647110225e5bb138ab9ef0a45c5e3b
+platform/packages/modules/Permission 5a5d35725d08aea8c0714a90055d8bc21d92f9b0
+platform/packages/modules/RemoteKeyProvisioning ed5d0f463084a2ac242dc4e15a5bc6438affe87b
+platform/packages/modules/RuntimeI18n d7aff3c66838cce4467bcf8b62622a1117c3dbef
+platform/packages/modules/SEPolicy 4cb9af51f110987c4c569afd098694f14dd6d642
+platform/packages/modules/Scheduling 6ace88aac39df87ea3b35a9ff3e2a72a47ddda28
+platform/packages/modules/SdkExtensions 5a877f20383415012978ccd7a049c6941d7a8953
+platform/packages/modules/StatsD 6d37b7fbb7bfa53c8b224dd5d89f0f2af074459b
platform/packages/modules/TestModule 3523a2f0f9b12d4e60374af63aae14f75a2b4c10
-platform/packages/modules/Uwb 223031ae7a4019ff42792ff3725352f7565bf767
-platform/packages/modules/Virtualization 818da21f8d1a59448381696bf6ad350ff992ccfb
-platform/packages/modules/Wifi 7c2670d6b6f9ca81770f58d693b7046de02ac1dd
-platform/packages/modules/adb f2adfd9d471e4fb090fd3ef9f14d17780f579437
-platform/packages/modules/common 537b09badad0e6a3b198aafb72c0b993836d187f
-platform/packages/modules/vndk 4e17c483980b4b199633c1d047dfca2e93f69e23
-platform/packages/providers/BlockedNumberProvider 9911d6b6d46a5f967951dcc34b35f1a7be63ee58
+platform/packages/modules/Uwb 2662fd7bd8fedb744f3b030be703be731f71b2e2
+platform/packages/modules/Virtualization 647b2e427ccf6ec141e0db493b63a02417f42964
+platform/packages/modules/Wifi 491b5313aa245d24b2feebd180ff60ed079641f5
+platform/packages/modules/adb 1e944170b3a235c1c6a8937f9d690f8aa8e4777a
+platform/packages/modules/common d43c39584f412ead92640fba82ee5ae735054060
+platform/packages/modules/vndk 57d80c43dbfcec051d4f02c4edddae216e082e5c
+platform/packages/providers/BlockedNumberProvider a196a5e3e0da01b45da5283e72e9103b12ca23b2
platform/packages/providers/BookmarkProvider 07821be016e64214b475a409dd56eda913687b5e
-platform/packages/providers/CalendarProvider 62f21842f3a57aa88624e2ab5abf65c4288d555f
-platform/packages/providers/CallLogProvider 4cc53fa41c8de8fa855046e1469b5fc58cba67ca
-platform/packages/providers/ContactsProvider 822cdb2e1d38c0502b44852e345ec47fc8d517cc
-platform/packages/providers/DownloadProvider ca32bfb4da3e46ce606bd7b24d536bd842db713b
-platform/packages/providers/MediaProvider e222f477601df1909c6b6b60874800cdb46f3f4a
+platform/packages/providers/CalendarProvider 32558af194ee5369cda04572b27601fa9755e2c3
+platform/packages/providers/CallLogProvider b9e4264099e03c8c3b6477a190c21ea5acc16546
+platform/packages/providers/ContactsProvider 684bdf3e0b4e51f1db4edc931948aea7200f73af
+platform/packages/providers/DownloadProvider bfb2b814103671cf8edcb5b2c356d39fb5e9b143
+platform/packages/providers/MediaProvider 27612b3a28ca87e48cecfef202e5d2ac7de706e1
platform/packages/providers/PartnerBookmarksProvider 430b3545d5df17821e667a790a374a4ee430643f
-platform/packages/providers/TelephonyProvider eb8923ee357c7fa4cd067c42f2c3fc472ee8fec4
-platform/packages/providers/TvProvider d93563ac55af6fd6ee61f24911a90cd5a447db09
+platform/packages/providers/TelephonyProvider 63e983a4487452d607fe94cfc80c22a666bee709
+platform/packages/providers/TvProvider 69c388455c618428f4244643787ce38f295de36c
platform/packages/providers/UserDictionaryProvider 459eb50e237dcddaf850ad2c1e18f2193e7ccffc
-platform/packages/screensavers/Basic 220c4a06b0e7def3b1f6eb40d3526050bfc7ecb9
-platform/packages/screensavers/PhotoTable 1428638fff9cd3b021ab0f44a8d28b87cb196fad
-platform/packages/services/AlternativeNetworkAccess 273c5a44c2d3a0bb10953c9d7a66a07e4f693da0
-platform/packages/services/BuiltInPrintService 92c2aab4860cc3043efb77fee590348e27bf3c79
-platform/packages/services/Car 4f2f347faf0e248eb4ea3faa4e747988b1ec3dc6
-platform/packages/services/Iwlan 91792300c0b857e4ef0ee115de061c6ceb083756
-platform/packages/services/Mms 8dd9570d684b5bf4cb02a0f32dc0f4feb3fca25d
-platform/packages/services/Mtp bb8a5ed6882bb509904afb3f8d26ed291e0d48c1
-platform/packages/services/Telecomm 9a63704b7dff028d2c26f62dc1c8ad8e428af8d8
-platform/packages/services/Telephony 56d6b3b9f27a48bef1ea256a22ee9062303f584f
+platform/packages/screensavers/Basic 22e27bdf0b9490a8e43dad52e5bf5db60b9be846
+platform/packages/screensavers/PhotoTable 5bc17e1c5573b6251c6987645d7a0ce1cd335283
+platform/packages/services/AlternativeNetworkAccess ba09451dc4a91744932e1e6c66db6ec96a5678f8
+platform/packages/services/BuiltInPrintService fb8bfe369f026ba1ea3030426edd5ad8bc2b5aa5
+platform/packages/services/Car 04cc2cbb2bea88fb5e5ce2a4671a9923e6e87483
+platform/packages/services/Iwlan 653eec3dc692e40eceac5d83ac49b0b5a53a5818
+platform/packages/services/Mms 62a158499764b371bc8ca23c9d37fc5516535531
+platform/packages/services/Mtp 5677897e99c124260f8d0ebbb0eacd2b3e080331
+platform/packages/services/Telecomm e7e50a8cf1a9588f17b42461e4e90e12789248f2
+platform/packages/services/Telephony ac462a2e052836ae2e8d77614dabd2db1ffbe3bd
platform/packages/wallpapers/ImageWallpaper 0a1680f07b09889c7642a775b6bb69d1b27f9b09
-platform/packages/wallpapers/LivePicker 8cf209d115c2a9bd3aef26692e9ce4c97f6894f7
+platform/packages/wallpapers/LivePicker 2283dbbe1446f0c4a566f53b2e682b1bb5f2e03d
platform/pdk 7ea612c8fc04753350908fb4e926fddad8fffed2
-platform/platform_testing 631cb53d3a2dbf5a1c17ea9e3c95c07c02ffd47f
-platform/prebuilts/abi-dumps/ndk 2bf0efefa2062120faf55a21deb2a3c12b30b67c
-platform/prebuilts/abi-dumps/platform 8fe01a818ee07cefcf5cbcf401bad7d586856fbd
-platform/prebuilts/abi-dumps/vndk cc820e2f67c78ea5bcdee79b8c800f42b3e91d5f
-platform/prebuilts/android-emulator 0fe8baf2db6685149cdcad479f2b6c03372000be
-platform/prebuilts/asuite ccc3a4d87ed5b2bb769842d802420db1c8a867d9
-platform/prebuilts/bazel/common 4e89d54001ab337bb7f6c192f2b9635c07ed078b
-platform/prebuilts/bazel/darwin-x86_64 c1926e42cdbba51ddae634e403f3e4a0a5405f67
-platform/prebuilts/bazel/linux-x86_64 b223e3fe650ea486253811a486a14a949b36fd91
-platform/prebuilts/build-tools 8def055d4be83859082b690949d4ad460424fb9d
-platform/prebuilts/bundletool 76a330b9b30b86da947190174c4e8bd1214c6427
+platform/platform_testing fe9cb9e258d732d3aa4a7c693b418764bfd0af58
+platform/prebuilts/abi-dumps/ndk 9c5c35d622325129ae0a66d4f167c303cb1bc699
+platform/prebuilts/abi-dumps/platform e8e6ee7ac7199184cb7ada599d75bd5b9c762f24
+platform/prebuilts/abi-dumps/vndk 1a1de1cf23d9b30950e6a1809872c8286fb6f425
+platform/prebuilts/android-emulator 894bba157dc85da7bc8a3e77375ba7cd502615d1
+platform/prebuilts/asuite 0d3abd8c8a7c5268f56d2095c15c276ad081b059
+platform/prebuilts/bazel/common f890cbd9c618b16fb53b8b0c48bb49c17930d4ce
+platform/prebuilts/bazel/darwin-x86_64 9cfed5fcbc12be90e398d66e4fb93d15df598c5b
+platform/prebuilts/bazel/linux-x86_64 1144b6c7c03cb87d029b8c5e1ce85a9ae6cae9da
+platform/prebuilts/build-tools 9b847f094a2081d6ffb634d12a1a94ff8ea0c77a
+platform/prebuilts/bundletool b2c1393ee0fbf7937488d8534bfc175c823f1590
platform/prebuilts/checkcolor aff84131e56dd337d20778ec936a049f23e114fc
-platform/prebuilts/checkstyle e29ac29085cfff871cadf5cb73d42151cd38f82d
-platform/prebuilts/clang-tools 1b7b3f3afc7a27c13020a2637ff61877e220c3bb
-platform/prebuilts/clang/host/darwin-x86 c6d0d80611f7f66dc93e25348d52900e5a0dee6a
-platform/prebuilts/clang/host/linux-x86 08a15ca969b87be8dbe6bebe3fc5c953171b0aba
-platform/prebuilts/cmdline-tools 5493f0997e7ec927f85ba3d35c31aa01db1899ce
+platform/prebuilts/checkstyle b9509cda8d0176d4b97940ac423a048dfeed2b77
+platform/prebuilts/clang-tools f05be66a179554acdb5d307d1b55ceadf9465dd3
+platform/prebuilts/clang/host/darwin-x86 1acacc0994217ff5024d9a82e6c6c2d9abe64094
+platform/prebuilts/clang/host/linux-x86 3b5a3f78e6cc6cb9e8ae5bf58060de88c5684856
+platform/prebuilts/cmdline-tools 9e68ef963e22834553fa98418fd83b3d10b67380
platform/prebuilts/devtools e60e2ac20eeaa2eac82da9ed75579e12d91a527d
-platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8 4ce0ffe87c7039fc18b7511a4ae9f6a32cae2442
-platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8 a895cb9382c7c52c98362c13031391d84b116250
-platform/prebuilts/go/darwin-x86 2e8e36dc9b0e74d6f272e080a62d3faf5891e475
-platform/prebuilts/go/linux-x86 90d5e2ae053dcff305d28b130875e6cd184c4652
-platform/prebuilts/gradle-plugin d07936d29a911a0db47b8468c79fe084f377709b
-platform/prebuilts/jdk/jdk11 60ef8b263e89cce616b49775ef4770918520c97c
-platform/prebuilts/jdk/jdk17 75856c9d02c5e02f19c248433e07926fe037a5ce
+platform/prebuilts/gcc/linux-x86/host/x86_64-linux-glibc2.17-4.8 3e030e6bbd2a18e1b6d12184d0d188df1a8f0c4b
+platform/prebuilts/gcc/linux-x86/host/x86_64-w64-mingw32-4.8 9bfe1c60f5ce94e803561654dfbaba58dac9070f
+platform/prebuilts/go/darwin-x86 a2eab1c7e80979907a79569787163253a7e60574
+platform/prebuilts/go/linux-x86 8e977044f4594168c34d8cd52d23eb15a4947116
+platform/prebuilts/gradle-plugin 405c62262e91d541d9472d875f8ac051e761dcdd
+platform/prebuilts/jdk/jdk11 96ffcef37711d6681c9b84f5bbca53c15548df39
+platform/prebuilts/jdk/jdk17 ba24d07a917592795c60cc876f7f5883326ec7e6
platform/prebuilts/jdk/jdk8 ebff3bab14fad9aefec53f8c1efa436be119ee80
platform/prebuilts/jdk/jdk9 3035eb193e0bbc9006ac99a89d529aa3bca6bcbe
-platform/prebuilts/ktlint 6f948afa44bf539a3f5ff9c2838e3fa590420af9
-platform/prebuilts/manifest-merger 23d9efdb83feed992442bfcbb31204390bb9ea8f
-platform/prebuilts/maven_repo/bumptech 42f8773ec6803fae76cb1b7abb42f82efb999798
-platform/prebuilts/misc e870a2b54ee532c11fd1d7f047f9908e6d3c61c3
-platform/prebuilts/module_sdk/AdServices 3339a7a8b9d864398dff99376085c8e105083174
-platform/prebuilts/module_sdk/AppSearch 96e63ccc14c31191b007d247c76e5bb7bad9d139
-platform/prebuilts/module_sdk/Bluetooth d9594bbf5014f43e1ebf0782ee739f0874cbf817
-platform/prebuilts/module_sdk/Connectivity 2a0e8c45fe54de70bd04b81c54370414a9122987
-platform/prebuilts/module_sdk/IPsec 10697dab23c08ee3a9c7798971bf82dde0725a9c
-platform/prebuilts/module_sdk/Media 59c820a6b8a760f3b82bb3d3f07b554f43568a37
-platform/prebuilts/module_sdk/MediaProvider f891e3a1521e41e138ec6c0c03c4425336c64f0e
-platform/prebuilts/module_sdk/OnDevicePersonalization b25ded9a48d495c72637004e092fcfc22f271c12
-platform/prebuilts/module_sdk/Permission 142681789d223a575cdf072924c0d56b0d8cad1c
-platform/prebuilts/module_sdk/Scheduling bb55acda7eb219a09f545031b7fb2071287ce82d
-platform/prebuilts/module_sdk/SdkExtensions c3e67f7567d8f510ae62279101deaff8255bd749
-platform/prebuilts/module_sdk/StatsD e02e16c28027176b20a1883711a5c4adbf62603d
-platform/prebuilts/module_sdk/Uwb 96e8bb7bd79b92dfbc4ff7dbb3c046f7dee36561
-platform/prebuilts/module_sdk/Wifi 8b52a3ee7b5167a32af984d50127668172c1b088
-platform/prebuilts/module_sdk/art 0d5cb56151e91892ea13a105f39b0ee6c8da3de0
-platform/prebuilts/module_sdk/conscrypt d519566533c8a51a5d19aa99c252c5be907b0560
-platform/prebuilts/ndk 98a37881f0a664acc0e924f075f474aee7241662
+platform/prebuilts/ktlint 11e07e3254cca7f0393a69991ac7a394b0249504
+platform/prebuilts/manifest-merger 672168ba9e85f6e082c547d9e85181bdb7a565d8
+platform/prebuilts/maven_repo/bumptech dc6f0f88ec9c8445cdc86586ef4ae168c9e66612
+platform/prebuilts/misc a2bdbad67abd55ea3e643deb5e2517b4f5986c58
+platform/prebuilts/module_sdk/AdServices 74445b61a33f65889efcab0704a7b63f6c4ba3d7
+platform/prebuilts/module_sdk/AppSearch 00ad3187b531f1664bd3084390b9861e3f14829c
+platform/prebuilts/module_sdk/Bluetooth 7d53a2b1985d233d9d6fb6246ce63ffbe1004f36
+platform/prebuilts/module_sdk/Connectivity 1864f1c1e03f76232cf784715f5f796b821f60f2
+platform/prebuilts/module_sdk/IPsec f4eb6849a94be1062403d9f99d4a324bb294b764
+platform/prebuilts/module_sdk/Media a5767a2b3fcbb0b60afccd708c42a8969a2c3c84
+platform/prebuilts/module_sdk/MediaProvider 3c11205d743fa803a7a18a27fbed19d79b42f05e
+platform/prebuilts/module_sdk/OnDevicePersonalization b0435945c9bdca915d7f5c750a2ec418041ddb06
+platform/prebuilts/module_sdk/Permission e9937eb8944030b473030e56a2c21241201e8daa
+platform/prebuilts/module_sdk/RemoteKeyProvisioning e1865c1733d3746aa58d5d6d1a14a0f352b03a4a
+platform/prebuilts/module_sdk/Scheduling 53facc6d81170bc9e265f34389e2c5606eef72d7
+platform/prebuilts/module_sdk/SdkExtensions 871476dd800ee5195102c905af73df8e0511e252
+platform/prebuilts/module_sdk/StatsD a1fec5b0c0e5b46b201d3630892e2548acb655bc
+platform/prebuilts/module_sdk/Uwb 306120fae667e50dd79bf801ef6e66134d1a6f73
+platform/prebuilts/module_sdk/Wifi 2b695cbdb546abb4d8a58525e63d08cc768ed3eb
+platform/prebuilts/module_sdk/art 46b5e3bf74719116e499477cdd499b3b2fcc97f6
+platform/prebuilts/module_sdk/conscrypt b35104cfe516dfe863dc20d2b79ca78fca0fca44
+platform/prebuilts/ndk eb4ed058054a994d30b965809e38a79b4becf280
platform/prebuilts/qemu-kernel 8adb819be605d1ebbc20a75fdf38f0c23f66e778
-platform/prebuilts/r8 8ac2175940656226e3994a9b266ab69fda75e476
-platform/prebuilts/remoteexecution-client 03df574e0a54b89026cad4e14515781fea3268d7
-platform/prebuilts/runtime af58a58d6796a7bb10b139995ffe400bbb353cc6
-platform/prebuilts/rust 646c63b7b179551d7eeb4b057f69d76dca1234bf
-platform/prebuilts/sdk 5196c2b8ff7f80992b67ccc5c3c4a49b1761094f
-platform/prebuilts/tools 893a461adbcd8beae5ceace63f8b424ea94df738
-platform/prebuilts/vndk/v28 73f37847b7c9d848a7ae762e9b20cdf04af7d892
-platform/prebuilts/vndk/v29 0d65290382ba57c71d8ae488b1bee36a5b85aa05
-platform/prebuilts/vndk/v30 98104f4682cc98daac4b72cb18d4f4b7bdd30599
-platform/prebuilts/vndk/v31 9e73a132564bbeffe17a9846be393b0024199bd0
-platform/prebuilts/vndk/v32 ee8a3904469b0f73899ce9ad1508ffff581336ae
-platform/prebuilts/vndk/v33 e0f649ced5fa7036f0d57e098fce476ad220ef18
-platform/sdk f7e01681d19ec6cae49c090577ff01c9781dc78b
-platform/system/apex 40472801b38554ee947661fc0422c92aa45f1cd5
-platform/system/bpf ae085f3b9d8e54385a12570e9d7654718739bc35
-platform/system/bpfprogs 1f14ee1663cc46b0cbd9979cdff7007b6e631cf4
-platform/system/ca-certificates d6c0a195ab50c63254cdada106465b5b9e7cb4d3
-platform/system/chre d33a0c8e6f58fea598e3e0f0c7bea7b525c0084d
-platform/system/connectivity/wificond 873e909f00408b3662ebe6f94874a4f9e0a524e0
-platform/system/core 85d07141fa51f16ec340ed9e442c968cd33a730e
-platform/system/dmesgd 141464377bbb3d727e33c59b6091cf0f1338995b
-platform/system/extras e998c26dce30965b9e2704f34f4d407026fecc43
-platform/system/gatekeeper d8fb19087f948c0dc3ba5034db68ef497519bd6f
-platform/system/gsid d24a02f83ad51d92e58287bfb337e5bbae38cae7
-platform/system/hardware/interfaces 506f281fe66dde2c76892964a0b22436eaf52bfe
-platform/system/hwservicemanager 1aa038c556d3a63663a2c0560d9b13fe5506ad9b
-platform/system/incremental_delivery 809b7bc4b4e43c19d7abd05e1c61572c5050c056
+platform/prebuilts/r8 d659580dcd754b8364f238e3cb4d21378f61da01
+platform/prebuilts/remoteexecution-client dfb6bead9556ded3d7994f576a5f35d09ca6582c
+platform/prebuilts/runtime 3ad53524e35e6c74556e6d9a795c2f8e15d1312b
+platform/prebuilts/rust dc041039dc7be0584b2dea169c5dc113b21176bf
+platform/prebuilts/sdk 09c50b267fc51e0fdea3ce025b3d3f02415582e9
+platform/prebuilts/tools 266f640cee26075fb147996455e7cff4aa117e43
+platform/prebuilts/vndk/v29 cdbaf8e9b7d3f478e58ab32059fce005350a5ed2
+platform/prebuilts/vndk/v30 47992d07b3aea5f1db60e4acf4608936c0b91672
+platform/prebuilts/vndk/v31 676dab1273673d10d95b453c9fa827d14754bc89
+platform/prebuilts/vndk/v32 3f3d81d661fcf26693eed5e20c75ee8159d5ce71
+platform/prebuilts/vndk/v33 5bfc33514669d70d823005b8635d6804bb9822af
+platform/sdk da990d0543b90a3a336f043af0912b9021a97d37
+platform/system/apex 8b9e3b03eddab9db5d5a245091bf7388f2ec7bd0
+platform/system/bpf 1ef925d8c44176eb7650886a1c3fbb13048daa9c
+platform/system/bpfprogs 67cdd85880e694ce5cede9bdc7c7ec67b405aa38
+platform/system/ca-certificates 215acd963bc39519859a9ff5f5e475d219859a64
+platform/system/chre f30297353f8617237ba342770f7d88b0376f6284
+platform/system/connectivity/wificond 3d176f87150a4fd8ec9050445e451772a7ab2879
+platform/system/core 3988a17ebcf1665c9ae5d976072dd393c2c557d4
+platform/system/dmesgd d71ad3d81aec7c7721179588de02bed9361c11bf
+platform/system/extras 52e14563033bf4508e410ca1ee624ffb8d9c9762
+platform/system/gatekeeper 3cf0fc853d3d777f0a59b06910e12fc5e428db73
+platform/system/gsid d61b96a08728cf6c006c81d894e46494362c109f
+platform/system/hardware/interfaces d12f84cd2f52f9d25e8d6e72bf36497e2a8cc61a
+platform/system/hwservicemanager 8fc42c49c3c5dc71a5ac8c8886a5cee1d1b4b5bf
+platform/system/incremental_delivery 0a1d4740017ca8d9f22dceaffcdad400d9aea676
platform/system/iorap 32a984ca1684f55b92307f9e5a808d68ceb106eb
-platform/system/keymaster 4fa4f413a0b895ca82562c81674f10a7376ea94b
-platform/system/keymint d8002e9d16b17fa622792318f09f93844d913576
-platform/system/libartpalette 123d3f635d430893009fde768fac7befe41d96db
-platform/system/libbase 21bf57284a2a03ab5ea0cc09b2a5621aa143ad6d
-platform/system/libcppbor fbc41b241cfdbd571f2343758db82f9401441a56
-platform/system/libfmq 4783cd5393e806efc548cab8448be9baad78b82d
-platform/system/libhidl 721e1df7c5b06bde625bc42475aa2dc6869c6a17
-platform/system/libhwbinder f1f035fc0a078307bc4f66389ec74de609478bbf
-platform/system/libprocinfo bfd2513aa335fc7d808ee4e79bcac08c72f4c499
-platform/system/librustutils 55b00a787a07d80ae41bfa9ab6e82c53a6c16861
-platform/system/libsysprop 8ee01d222c9de6c407ba9b6b3258e1274806200d
-platform/system/libufdt 358ddfa806534f9807f968ce4052bec33ef829c9
-platform/system/libvintf 95f0b5aaec5e21314470526eebdcd4e55cc1e3e7
-platform/system/libziparchive 69bb66b26cb9f9d100d91fe270251795a4397818
-platform/system/linkerconfig 846739c54df07abdc99ca2c773a739236e405be7
-platform/system/logging 8ae726540fbd0ec080fa6c9e9e5f146854037fda
-platform/system/media dd7913e649b119952b220ee4742a968c53b69416
-platform/system/memory/libdmabufheap c95c2e8d10b14770f0ce244a914e2dd78aaa8610
-platform/system/memory/libion e75ac3fefaddd2759caa4646e3dc5c0006865515
-platform/system/memory/libmeminfo 4aae4a5dedde33bec4cf8705540b3e1c3e294289
-platform/system/memory/libmemtrack 0e50bcbbc2da1629543c6d3c6946d8bff9366f94
-platform/system/memory/libmemunreachable 678a8bd19df6d3de3412da003d55e065b3dd5fee
-platform/system/memory/lmkd 2d5bcadca6b7d9897c803bc4efa92f25b388aae9
-platform/system/netd 13d64f0632b7abf590e62fcc17b93fed77d060b4
-platform/system/nfc 7eb7b4486916805b44a51706ca2006359fd94958
-platform/system/nvram ecdfa20f35a4db495fc186d307621692f3a44625
-platform/system/security 8c358c0e542456a01b44a93c3ecba0e7eee5cde5
-platform/system/sepolicy dffa7472f89c521ce96cb6f51675fa0cb1277a9d
-platform/system/server_configurable_flags 47dbe40ae4c1db90ac4f6004f1f19faf10ea82fc
-platform/system/teeui 09e47952b55474cf866c7be7e721ea2e8135d2e3
-platform/system/testing/gtest_extras d29a27f6ba905e0955481a250b34ee8b8907cabb
-platform/system/timezone 00218ba285a834cbdc4ad3753a8527d6cbd9f624
-platform/system/tools/aidl 240fde6a5c8af6361d2e8b504d30ef75b99983c9
-platform/system/tools/hidl fcde05af6b609cd981eb30ddb554ca2eb8bfe77c
-platform/system/tools/mkbootimg ee439637fce9d73af9480043917a176cfb7a0ebc
-platform/system/tools/sysprop 4ac520746d92806328a809efd9d19c02d5518bbd
-platform/system/tools/xsdc 667b3718a32d1895468fa6af26d59f0caec73060
-platform/system/unwinding 1472e8d6984f1e1d9e66ad824c7428ccd1758b7e
-platform/system/update_engine f8a549934440b56cfa16987977fd86ab265e96fa
-platform/system/vold bee7c2d723e156248925c540d3c9205db19aad24
-platform/test/app_compat/csuite 3a3dad1bae323050d1d940bfc625c43c9bfa6328
-platform/test/catbox e330f7441ebcc538bffc2623beb3a99a51f886dd
-platform/test/cts-root 72adf07e96e2f69b7993474d98f7af12270e3301
+platform/system/keymaster 4d30188dd447efd874e9cb90e4856c4101104ec8
+platform/system/keymint 44d0cb2a929e0ccc213081b6c1174abc5b8702e5
+platform/system/libartpalette 817a255f3e1793d2f0910c19ebc17012c37d48b2
+platform/system/libbase efd828a5c85d3052b0a39af5aa49d812920fa48f
+platform/system/libcppbor aded0058e6476ec6266dc9abb9727fd7428272bb
+platform/system/libfmq f2e4062901f9b3cc2c379830c1a320f3e597fed2
+platform/system/libhidl 3415c88400b7ac8a6b79b85e3c63591db4df64be
+platform/system/libhwbinder 0e41eebf9d5100bb848ef31471998cf9a24e8efb
+platform/system/libprocinfo efbad9875eb0f40447bf35c68430afe76b479c6e
+platform/system/librustutils acad644fe49f9b1aa717cd21310dd71c414f0302
+platform/system/libsysprop 58a97600c053bc63be1faf3bee12e88f52a3cc6a
+platform/system/libufdt 9717642ee3a1ae70bb0f70000476ede1c111a987
+platform/system/libvintf 2663a696c0e1240875376d66469ae4e14d151ed7
+platform/system/libziparchive 757bf593fa02d2120e42f4a49fd090142ac02799
+platform/system/linkerconfig 4807fa4da15239e1794ff4b0fae7333b0ed0f251
+platform/system/logging c35499295cad4c19711549fd9120cfed962d21d0
+platform/system/media 2f20445c0b2c796d7cd579c1c3d579dfd269ae66
+platform/system/memory/libdmabufheap 6bb15e5396e46f8934fffd0553921974da51b63b
+platform/system/memory/libion 8d66539a69260073890e61fe8f3c8aec7746e4ce
+platform/system/memory/libmeminfo 2c10eb06450b21fe1e5aeb5145c229e756bc213e
+platform/system/memory/libmemtrack dce9cbc8f5e4cd46aeec62bc63cdbcf226d68441
+platform/system/memory/libmemunreachable 86fbb25e0cc25a8df940a6b2a10e828815974f41
+platform/system/memory/lmkd 425955025db5fa83083e63f7dd23f41f09e081c7
+platform/system/netd fb69ecfddf02347b5c4792fb2a19791109fb2303
+platform/system/nfc c39aab977c1dad9e69ad7491404c6c5fce62f4ae
+platform/system/nvram 4835931928431022b21248ff594cc7980d78ec2a
+platform/system/security 0460b75b0ae1307bb5325f4793daa5c7d8226b06
+platform/system/sepolicy 19a6ae271ef440a8e39af0ab368ad4cd2a3e947d
+platform/system/server_configurable_flags 992a4d007dde81d0cb723b1b70456726555f54b9
+platform/system/teeui 881f1ef2f92c38743ad1ab141a22ed6dfcf2f127
+platform/system/testing/gtest_extras a8e041e379eb54ace0e50ba7b382826b3e311c7f
+platform/system/timezone 8d3aded3ca10f8e11746adc0e3c1c70a3e06460a
+platform/system/tools/aidl 7d9a964d7d9c4456c4a49251700f56c462ecbf36
+platform/system/tools/hidl 4f4dec803510428720d389584f48c06f8d798f84
+platform/system/tools/mkbootimg e6e107c7491cb3f7edf7d4676f67c167f0ce0f0d
+platform/system/tools/sysprop f1840d1ed45a71bfa71b42cbee21c95deee4797d
+platform/system/tools/xsdc b5ccf32639303c282c73fa15a44b3ef486360df3
+platform/system/unwinding ef26220cb2057368d0ff09ea781a78877baa7cf4
+platform/system/update_engine 046311f82a3231468c1b56e24182e99046d21b07
+platform/system/vold 417fb0e5c3a31780b2e19371a9e85f2427a4c2e8
+platform/test/app_compat/csuite 00aca6f9f6de0fcc73f84786e1647cbb2924a154
+platform/test/catbox cbe51d1bca6cd696b4485dfb8fd8bec1906710f5
+platform/test/cts-root 04e002912d581e18725acded0fc1543f1a3ef132
+platform/test/dittosuite 6c97c995bc91ea386ada4159daa77d8522e15b99
platform/test/framework 255a086da9f724180c0d8a797ab093e6e21841b3
-platform/test/mlts/benchmark 71d9c1167a38d4062daae6bf4b9c8aeba2965476
-platform/test/mlts/models 758e973fa3e63cf4252d0c712c2c0bbb9c543536
-platform/test/mts 079ae227ef8a63db7c686344ddd1b8f8815cb582
-platform/test/suite_harness c9e6f5587c228488715cc8ac3a73ff7ca5ebfa70
-platform/test/vts f6a6064237adabed428d9ebcce7dc01f9182d90a
-platform/test/vts-testcase/fuzz ca036d8e981caf9dc49568bc87a02e750514490b
-platform/test/vts-testcase/hal 0dddbd0d5f051f3166b57385e91222856765e1a1
+platform/test/mlts/benchmark c838ef8619ef00956b37f9c3b3be04917ef74f5b
+platform/test/mlts/models beaac0db7690a0cf51cf152144c5cc1b91431a70
+platform/test/mts 91694b6bab32e3e6c0006fdc3899602b0615b8d9
+platform/test/suite_harness 475f2684b44ed044723e7e62970d144d9f148bfe
+platform/test/vts bce0880e490526a47f269d2c10fafe87f0f4db8f
+platform/test/vts-testcase/hal f89face4b1a856d64ab73c3b180c814f71c6068a
platform/test/vts-testcase/hal-trace 3782d14cb8ca24996b199e175525eeea47758632
-platform/test/vts-testcase/kernel 6eab56c4cbd88fb177c55255e2055faf07ed8519
+platform/test/vts-testcase/kernel 412640fb0fdd23f6716518f06d3fde933bd332c2
platform/test/vts-testcase/nbu 48eb5964b710b3e6a9a244b6b098e69361fcbb6e
platform/test/vts-testcase/performance e27d02dd550c8f6fad539b32d99cc6ade245afa0
-platform/test/vts-testcase/security 48f7753a006a0bdf674349f200296b8058225161
-platform/test/vts-testcase/vndk 8e3d041d79a5f0da3af757623b18f724f941c930
+platform/test/vts-testcase/security 074dc8cd4f6759d7604d4ea1a30435c6a5d5a151
+platform/test/vts-testcase/vndk 992b9872444732cc4a1ed41a61ea1e2140c0414a
platform/tools/aadevtools e5fcc6ca8715e31526ec5b6a150338e99e0bb234
-platform/tools/acloud 88185f9f689383ebfffe265f6b840c06890ea1f2
-platform/tools/apifinder c3df6f6ea1f83493351cb0a044a256773c6fc69a
-platform/tools/apksig edce67b79a27f10243462948e8918714a15551be
+platform/tools/acloud a3be79c7e568ba12f9d8597e3e0b4984f0de22b3
+platform/tools/apifinder 319122b36e45bbc1bca9da4a0b7dad264899563d
+platform/tools/apksig 945d2dbab257b3d2f12c5928a7722ce0ad46534d
platform/tools/apkzlib 3a1237b6e3c26849e9925d6cb96386acb1ddc7b2
-platform/tools/asuite 5547520f8414ad88fd9a8177be86f09dbef0b72f
-platform/tools/carrier_settings 1e9f0dc62b779c0506fe06f3199ab7df2c917f7d
+platform/tools/asuite 9d43de2f19a3a42ff81a9aef94591a7a9f17febd
+platform/tools/carrier_settings 42fc7c0e345a3d42adb4e28d5034795c8c77e192
platform/tools/currysrc 2649cdecea09c16ce766a9a0af08372e3513bd3c
-platform/tools/dexter 23e761889e1760e6cfa238690449f262e638e6dc
+platform/tools/dexter 2ed2ceddfbf81e13d68f9498c17d7bed8a2aa401
platform/tools/doc_generation c3c86bb2e7f650620a7ff98ade30f1291904d082
platform/tools/external/fat32lib 9645f0b07a03dafb67d98d268db74dc6f17eca0d
-platform/tools/external_updater a5f79f117d589061fe9e6447a197de4eb3dbfdd1
-platform/tools/loganalysis 1a3714baada30356c69ab9059e97f349130fa55b
-platform/tools/metalava 01dbe7aecf3a6c72ce57b0b0e5e62ac53de11e6b
-platform/tools/ndkports eedefbf9d0a89ca8b0090b18a44db712210d832a
-platform/tools/netsim 95a9e86ab3e853834a1ab2e619e3ff060aa681c3
-platform/tools/repohooks 62b348732816e6adede4a34d8355478bc9e509b9
-platform/tools/security 2c109743d634e364cf3864652e71c715849d8635
-platform/tools/test/connectivity 5045049bbd446a414ebeff3bce537dc5830acce8
-platform/tools/test/graphicsbenchmark bfe511b3b7f81da32c198cf8cf45d2e4b556f2e5
+platform/tools/external_updater 47ad7cdaafd5d14f75ac4080a5fba526416c3b80
+platform/tools/loganalysis 921048804cb04a03df9c00634cd5bd66173920f1
+platform/tools/metalava f834b935f32328bce0b99322a754d6696e8c865a
+platform/tools/ndkports 7402e90928131c52c3f8c97ab4874b9384b5803c
+platform/tools/netsim 530be82a7a9a403bfd61789e59ed64f4f08e2c7d
+platform/tools/repohooks 9a98160f6a5dcccf9752b5d85883cd43942d611d
+platform/tools/security 4dc46b2614ab2c0c42cc2bfa3d290419158353ea
+platform/tools/test/connectivity 280abab00f5e40425552c80899362418c54892ae
+platform/tools/test/graphicsbenchmark b708f4b7436fc4dc6bab6f43c84d2dd328655898
platform/tools/test/mobly_snippets 06d5bfb5c85e99c4fb15c7614d1bfc1f16d3d6d7
-platform/tools/test/openhst cd43c13a00df1d7aa4d3afadc79b2a771f053b9d
-platform/tools/tradefederation 0a01cb9712931939ef5b23d804dad874d75852a6
-platform/tools/tradefederation/contrib 2e65101b6c885b2974de259052f3e1863edf9a51
-platform/tools/tradefederation/prebuilts fb4e32bcbad47b690bf8bc7a768ce1f3bb0cf25e
-platform/tools/treble eea985297b925a00d90c82d5774aa3713c8b2919
-platform/tools/trebuchet 20da79b9c58ddb84c342573785b27f053c8e58c3
+platform/tools/test/openhst 46153ecf585c8ffa9b3bdd4fc4fe55e7af021df6
+platform/tools/tradefederation fff3d659a4f799f6847ebf65836bf78597d78aef
+platform/tools/tradefederation/contrib 91125954dd355a7b5c3c3c5e05c00cb5ec761fa9
+platform/tools/tradefederation/prebuilts 14a37205ff7950ac8610dc60b8e1869f75ec8961
+platform/tools/treble c71af1e5420873802abc3ea2d13564782f1415c2
+platform/tools/trebuchet e4b1e4946c8b3374986f9e981f26e5da358b8afe
toolchain/benchmark ea08979b75076a463a75bac8c72c6ea4ddbc2d9a
-toolchain/pgo-profiles 402fcf5ae5fabf55ca3fcae4d8f496b5aebf7886
-tools/platform-compat e52d89c5a1c32472148bac73e4847ff9042230ab
+toolchain/pgo-profiles fb28eda9f20d4abd444192abf1fda6899871112a
+tools/platform-compat 2c9e2e5efb080c7b6f884ca85e39e83c0c785260
diff --git a/report_sample.py b/report_sample.py
index dc5c4e2..9b6947f 100755
--- a/report_sample.py
+++ b/report_sample.py
@@ -18,6 +18,7 @@
"""report_sample.py: report samples in the same format as `perf script`.
"""
+import sys
from simpleperf_report_lib import ReportLib
from simpleperf_utils import BaseArgumentParser, flatten_arg_list, ReportLibOptions
from typing import List, Set, Optional
@@ -88,8 +89,13 @@ def main():
parser.add_argument('--show_tracing_data', action='store_true', help='print tracing data.')
parser.add_argument('--header', action='store_true',
help='Show metadata header, like perf script --header')
+ parser.add_argument('-o', '--output_file', default='', help="""
+ The path of the generated report. Default is stdout.""")
parser.add_report_lib_options()
args = parser.parse_args()
+ # If the output file has been set, redirect stdout.
+ if args.output_file != '' and args.output_file != '-':
+ sys.stdout = open(file=args.output_file, mode='w')
report_sample(
record_file=args.record_file,
symfs_dir=args.symfs,
diff --git a/simpleperf_report_lib.py b/simpleperf_report_lib.py
index 48b3119..5f990ac 100644
--- a/simpleperf_report_lib.py
+++ b/simpleperf_report_lib.py
@@ -264,6 +264,8 @@ class ReportLib(object):
self._SetTraceOffCpuModeFunc.restype = ct.c_bool
self._SetSampleFilterFunc = self._lib.SetSampleFilter
self._SetSampleFilterFunc.restype = ct.c_bool
+ self._AggregateThreadsFunc = self._lib.AggregateThreads
+ self._AggregateThreadsFunc.restype = ct.c_bool
self._GetNextSampleFunc = self._lib.GetNextSample
self._GetNextSampleFunc.restype = ct.POINTER(SampleStruct)
self._GetEventOfCurrentSampleFunc = self._lib.GetEventOfCurrentSample
@@ -309,6 +311,8 @@ class ReportLib(object):
self.SetTraceOffCpuMode(options.trace_offcpu)
if options.sample_filters:
self.SetSampleFilter(options.sample_filters)
+ if options.aggregate_threads:
+ self.AggregateThreads(options.aggregate_threads)
def SetLogSeverity(self, log_level: str = 'info'):
""" Set log severity of native lib, can be verbose,debug,info,error,fatal."""
@@ -399,6 +403,18 @@ class ReportLib(object):
res: bool = self._SetSampleFilterFunc(self.getInstance(), filter_array, len(filters))
_check(res, f'Failed to call SetSampleFilter({filters})')
+ def AggregateThreads(self, thread_name_regex_list: List[str]):
+ """ Given a list of thread name regex, threads with names matching the same regex are merged
+ into one thread. As a result, samples from different threads (like a thread pool) can be
+ shown in one flamegraph.
+ """
+ regex_array = (ct.c_char_p * len(thread_name_regex_list))()
+ regex_array[:] = [_char_pt(f) for f in thread_name_regex_list]
+ res: bool = self._AggregateThreadsFunc(
+ self.getInstance(),
+ regex_array, len(thread_name_regex_list))
+ _check(res, f'Failed to call AggregateThreads({thread_name_regex_list})')
+
def GetNextSample(self) -> Optional[SampleStruct]:
""" Return the next sample. If no more samples, return None. """
psample = self._GetNextSampleFunc(self.getInstance())
diff --git a/simpleperf_utils.py b/simpleperf_utils.py
index 2a7dfd3..f8d50dc 100644
--- a/simpleperf_utils.py
+++ b/simpleperf_utils.py
@@ -447,7 +447,7 @@ class BinaryFinder:
return path
# Find binary by path in binary cache.
if self.binary_cache_dir:
- path = self.binary_cache_dir / dso_path_in_record_file[1:]
+ path = self.binary_cache_dir / dso_path_in_record_file[1:].replace('/', os.sep)
if self._check_path(path, expected_build_id):
return path
# Find binary by its absolute path.
@@ -1006,6 +1006,7 @@ class ReportLibOptions:
trace_offcpu: str
proguard_mapping_files: List[str]
sample_filters: List[str]
+ aggregate_threads: List[str]
class BaseArgumentParser(argparse.ArgumentParser):
@@ -1036,6 +1037,11 @@ class BaseArgumentParser(argparse.ArgumentParser):
If not set, mixed-on-off-cpu mode is used.
""")
self._add_sample_filter_options(sample_filter_group, sample_filter_with_pid_shortcut)
+ parser.add_argument(
+ '--aggregate-threads', nargs='+', metavar='thread_name_regex',
+ help="""Aggregate threads with names matching the same regex. As a result, samples from
+ different threads (like a thread pool) can be shown in one flamegraph.
+ """)
def _add_sample_filter_options(
self, group: Optional[Any] = None, with_pid_shortcut: bool = True):
@@ -1118,7 +1124,7 @@ class BaseArgumentParser(argparse.ArgumentParser):
sample_filters = self._build_sample_filter(namespace)
report_lib_options = ReportLibOptions(
namespace.show_art_frames, namespace.trace_offcpu, namespace.proguard_mapping_file,
- sample_filters)
+ sample_filters, namespace.aggregate_threads)
setattr(namespace, 'report_lib_options', report_lib_options)
if not Log.initialized:
diff --git a/test/app_test.py b/test/app_test.py
index c5db86b..a13200a 100644
--- a/test/app_test.py
+++ b/test/app_test.py
@@ -29,16 +29,15 @@ from . test_utils import TestBase, TestHelper, AdbHelper, INFERNO_SCRIPT
class TestExampleBase(TestBase):
@classmethod
- def prepare(cls, example_name, package_name, activity_name, abi=None, adb_root=False):
+ def prepare(cls, example_name, package_name, activity_name, abi=None, adb_root=False,
+ apk_name: str = 'app-debug.apk'):
cls.adb = AdbHelper(enable_switch_to_root=adb_root)
cls.example_path = TestHelper.testdata_path(example_name)
if not os.path.isdir(cls.example_path):
log_fatal("can't find " + cls.example_path)
- apk_files = list(Path(cls.example_path).glob('**/app-profiling.apk'))
+ apk_files = list(Path(cls.example_path).glob(f'**/{apk_name}'))
if not apk_files:
- apk_files = list(Path(cls.example_path).glob('**/app-debug.apk'))
- if not apk_files:
- log_fatal("can't find apk under " + cls.example_path)
+ log_fatal(f"can't find {apk_name} under " + cls.example_path)
cls.apk_path = apk_files[0]
cls.package_name = package_name
cls.activity_name = activity_name
@@ -56,12 +55,16 @@ class TestExampleBase(TestBase):
@classmethod
def tearDownClass(cls):
- remove(cls.testcase_dir)
+ if hasattr(cls, 'testcase_dir'):
+ remove(cls.testcase_dir)
if hasattr(cls, 'package_name'):
cls.adb.check_run(["uninstall", cls.package_name])
def setUp(self):
super(TestExampleBase, self).setUp()
+ if TestHelper.android_version == 8 and (
+ 'ExampleJava' in self.id() or 'ExampleKotlin' in self.id()):
+ self.skipTest('Profiling java code needs wrap.sh on Android O (8.x)')
if 'TraceOffCpu' in self.id() and not TestHelper.is_trace_offcpu_supported():
self.skipTest('trace-offcpu is not supported on device')
# Use testcase_dir to share a common perf.data for reporting. So we don't need to
diff --git a/test/binary_cache_builder_test.py b/test/binary_cache_builder_test.py
index 153665a..ece7d6d 100644
--- a/test/binary_cache_builder_test.py
+++ b/test/binary_cache_builder_test.py
@@ -19,6 +19,7 @@ import os
from pathlib import Path
import shutil
import tempfile
+import zipfile
from binary_cache_builder import BinaryCacheBuilder
from simpleperf_utils import ReadElf, remove, ToolFinder
@@ -36,12 +37,12 @@ class TestBinaryCacheBuilder(TestBase):
filename = 'simpleperf_runtest_two_functions_arm'
origin_file = TestHelper.testdata_path(filename)
source_file = os.path.join(symfs_dir, filename)
- target_file = os.path.join('binary_cache', filename)
- expected_build_id = readelf.get_build_id(origin_file)
+ build_id = readelf.get_build_id(origin_file)
binary_cache_builder = BinaryCacheBuilder(TestHelper.ndk_path, False)
- binary_cache_builder.binaries['simpleperf_runtest_two_functions_arm'] = expected_build_id
+ binary_cache_builder.binaries['simpleperf_runtest_two_functions_arm'] = build_id
# Copy binary if target file doesn't exist.
+ target_file = binary_cache_builder.find_path_in_cache(filename)
remove(target_file)
self.run_cmd([strip, '--strip-all', '-o', source_file, origin_file])
binary_cache_builder.copy_binaries_from_symfs_dirs([symfs_dir])
@@ -62,34 +63,69 @@ class TestBinaryCacheBuilder(TestBase):
binary_cache_builder.binaries['elf'] = ''
symfs_dir = TestHelper.testdata_path('data/symfs_without_build_id')
source_file = os.path.join(symfs_dir, 'elf')
- target_file = os.path.join('binary_cache', 'elf')
+ target_file = binary_cache_builder.find_path_in_cache('elf')
binary_cache_builder.copy_binaries_from_symfs_dirs([symfs_dir])
self.assertTrue(filecmp.cmp(target_file, source_file))
binary_cache_builder.pull_binaries_from_device()
self.assertTrue(filecmp.cmp(target_file, source_file))
+ def test_copy_binary_with_different_name(self):
+ # Build symfs_dir.
+ symfs_dir = self.test_dir / 'symfs_dir'
+ remove(symfs_dir)
+ symfs_dir.mkdir()
+ filename = 'simpleperf_runtest_two_functions_arm'
+ origin_file = TestHelper.testdata_path(filename)
+ modified_name = 'two_functions_arm'
+ source_file = os.path.join(symfs_dir, modified_name)
+ shutil.copy(origin_file, source_file)
+
+ # Copy binary with the same build id but a different name.
+ builder = BinaryCacheBuilder(TestHelper.ndk_path, False)
+ builder.binaries[filename] = builder.readelf.get_build_id(origin_file)
+ builder.copy_binaries_from_symfs_dirs([symfs_dir])
+
+ target_file = builder.find_path_in_cache(filename)
+ self.assertTrue(filecmp.cmp(target_file, source_file))
+
+ def test_copy_binary_for_native_lib_embedded_in_apk(self):
+ apk_path = TestHelper.testdata_path('data/app/com.example.hellojni-1/base.apk')
+ symfs_dir = self.test_dir / 'symfs_dir'
+ with zipfile.ZipFile(apk_path, 'r') as zip_ref:
+ zip_ref.extractall(symfs_dir)
+ builder = BinaryCacheBuilder(TestHelper.ndk_path, False)
+ builder.collect_used_binaries(
+ TestHelper.testdata_path('has_embedded_native_libs_apk_perf.data'))
+ builder.copy_binaries_from_symfs_dirs([symfs_dir])
+
+ device_path = [p for p in builder.binaries if 'libhello-jni.so' in p][0]
+ target_file = builder.find_path_in_cache(device_path)
+ self.assertTrue(target_file.is_file())
+ # Check that we are not using path format of embedded lib in apk. Because
+ # simpleperf can't use it from binary_cache.
+ self.assertNotIn('!/', str(target_file))
+
def test_prefer_binary_with_debug_info(self):
binary_cache_builder = BinaryCacheBuilder(TestHelper.ndk_path, False)
binary_cache_builder.collect_used_binaries(
TestHelper.testdata_path('runtest_two_functions_arm64_perf.data'))
+ filename = 'simpleperf_runtest_two_functions_arm64'
# Create a symfs_dir, which contains elf file with and without debug info.
with tempfile.TemporaryDirectory() as tmp_dir:
shutil.copy(
TestHelper.testdata_path(
'simpleperf_runtest_two_functions_arm64_without_debug_info'),
- Path(tmp_dir) / 'simpleperf_runtest_two_functions_arm64')
+ Path(tmp_dir) / filename)
debug_dir = Path(tmp_dir) / 'debug'
debug_dir.mkdir()
- shutil.copy(TestHelper.testdata_path(
- 'simpleperf_runtest_two_functions_arm64'), debug_dir)
+ debug_file = TestHelper.testdata_path(filename)
+ shutil.copy(debug_file, debug_dir)
# Check if the elf file with debug info is chosen.
binary_cache_builder.copy_binaries_from_symfs_dirs([tmp_dir])
- elf_path = (Path(binary_cache_builder.binary_cache_dir) / 'data' /
- 'local' / 'tmp' / 'simpleperf_runtest_two_functions_arm64')
- self.assertTrue(elf_path.is_file())
- self.assertIn('.debug_info', binary_cache_builder.readelf.get_sections(elf_path))
+ target_file = binary_cache_builder.find_path_in_cache('/data/local/tmp/' + filename)
+ self.assertTrue(filecmp.cmp(target_file, debug_file))
def test_create_build_id_list(self):
symfs_dir = TestHelper.testdata_dir
@@ -97,9 +133,10 @@ class TestBinaryCacheBuilder(TestBase):
binary_cache_builder.collect_used_binaries(
TestHelper.testdata_path('runtest_two_functions_arm64_perf.data'))
binary_cache_builder.copy_binaries_from_symfs_dirs([symfs_dir])
- elf_path = (Path(binary_cache_builder.binary_cache_dir) / 'data' /
- 'local' / 'tmp' / 'simpleperf_runtest_two_functions_arm64')
- self.assertTrue(elf_path.is_file())
+
+ target_file = binary_cache_builder.find_path_in_cache(
+ '/data/local/tmp/simpleperf_runtest_two_functions_arm64')
+ self.assertTrue(target_file.is_file())
binary_cache_builder.create_build_id_list()
build_id_list_path = Path(binary_cache_builder.binary_cache_dir) / 'build_id_list'
diff --git a/test/cpp_app_test.py b/test/cpp_app_test.py
index 86667d3..0939cce 100644
--- a/test/cpp_app_test.py
+++ b/test/cpp_app_test.py
@@ -15,6 +15,7 @@
# limitations under the License.
import os
+import unittest
from simpleperf_utils import remove
from . app_test import TestExampleBase
@@ -75,6 +76,21 @@ class TestExampleCpp(TestExampleBase):
'--add_disassembly', '--binary_filter', "libnative-lib.so"])
+class TestExampleCppProfileableApk(TestExampleCpp):
+ """ Test profiling a profileable released apk."""
+ @classmethod
+ def setUpClass(cls):
+ if TestHelper.android_version >= 10:
+ cls.prepare("SimpleperfExampleCpp",
+ "simpleperf.example.cpp",
+ ".MainActivity", apk_name='app-release.apk')
+
+ def setUp(self):
+ if TestHelper().android_version < 10:
+ raise unittest.SkipTest("Profileable apk isn't supported on Android < Q.")
+ super().setUp()
+
+
class TestExampleCppRoot(TestExampleBase):
@classmethod
def setUpClass(cls):
diff --git a/test/do_test.py b/test/do_test.py
index 8fe5f76..012dc62 100755
--- a/test/do_test.py
+++ b/test/do_test.py
@@ -205,14 +205,13 @@ class Device:
@dataclass
class TestResult:
try_time: int
- ok: bool
+ status: str
duration: str
def __str__(self) -> str:
- if self.ok:
- s = 'OK'
- else:
- s = f'FAILED (at try_time {self.try_time})'
+ s = self.status
+ if s == 'FAILED':
+ s += f' (at try_time {self.try_time})'
s += f' {self.duration}'
return s
@@ -289,7 +288,6 @@ class TestProcess:
def _process_msg(self, msg: str):
test_name, test_success, test_duration = msg.split()
- test_success = test_success == 'OK'
self.test_results[test_name] = TestResult(self.try_time, test_success, test_duration)
def join(self):
@@ -304,7 +302,7 @@ class TestProcess:
for test in self.tests:
if test not in self.test_results:
test_duration = '%.3fs' % (time.time() - self.last_update_time)
- self.test_results[test] = TestResult(self.try_time, False, test_duration)
+ self.test_results[test] = TestResult(self.try_time, 'FAILED', test_duration)
return False
self.try_time += 1
@@ -366,7 +364,7 @@ class TestSummary:
def failed_test_count(self) -> int:
count = 0
for result in self.results.values():
- if result is None or not result.ok:
+ if result is None or result.status == 'FAILED':
count += 1
return count
@@ -392,7 +390,7 @@ class TestSummary:
result = self.results[key]
message = f'{test_name} {test_env} {result}'
print(message, file=fh)
- if not result or not result.ok:
+ if not result or result.status == 'FAILED':
print(message, file=failed_fh)
diff --git a/test/gecko_profile_generator_test.py b/test/gecko_profile_generator_test.py
index 5a0d45e..97cedd6 100644
--- a/test/gecko_profile_generator_test.py
+++ b/test/gecko_profile_generator_test.py
@@ -18,7 +18,7 @@ import json
import os
import re
import tempfile
-from typing import List, Optional, Set
+from typing import Dict, List, Optional, Set
from . test_utils import TestBase, TestHelper
@@ -31,8 +31,12 @@ class TestGeckoProfileGenerator(TestBase):
args.extend(options)
return self.run_cmd(args, return_output=True)
+ def generate_profile(self, testdata_file: str, options: Optional[List[str]] = None) -> Dict:
+ output = self.run_generator(testdata_file, options)
+ return json.loads(output)
+
def test_golden(self):
- output = self.run_generator('perf_with_interpreter_frames.data')
+ output = self.run_generator('perf_with_interpreter_frames.data', ['--remove-gaps', '0'])
got = json.loads(output)
golden_path = TestHelper.testdata_path('perf_with_interpreter_frames.gecko.json')
with open(golden_path) as f:
@@ -43,7 +47,8 @@ class TestGeckoProfileGenerator(TestBase):
def test_sample_filters(self):
def get_threads_for_filter(filter: str) -> Set[int]:
- report = self.run_generator('perf_display_bitmaps.data', filter.split())
+ report = self.run_generator('perf_display_bitmaps.data',
+ filter.split() + ['--remove-gaps', '0'])
pattern = re.compile(r'"tid":\s+(\d+),')
threads = set()
for m in re.finditer(pattern, report):
@@ -79,3 +84,17 @@ class TestGeckoProfileGenerator(TestBase):
self.assertNotIn(art_frame_str, report)
report = self.run_generator('perf_with_interpreter_frames.data', ['--show-art-frames'])
self.assertIn(art_frame_str, report)
+
+ def test_remove_gaps(self):
+ testdata = 'perf_with_interpreter_frames.data'
+
+ def get_sample_count(options: Optional[List[str]] = None) -> int:
+ data = self.generate_profile(testdata, options)
+ sample_count = 0
+ for thread in data['threads']:
+ sample_count += len(thread['samples']['data'])
+ return sample_count
+ # By default, the gap sample is removed.
+ self.assertEqual(4031, get_sample_count())
+ # Use `--remove-gaps 0` to disable removing gaps.
+ self.assertEqual(4032, get_sample_count(['--remove-gaps', '0']))
diff --git a/test/java_app_test.py b/test/java_app_test.py
index 6389e6b..5f74c64 100644
--- a/test/java_app_test.py
+++ b/test/java_app_test.py
@@ -19,17 +19,18 @@ import signal
import subprocess
import sys
import time
+import unittest
from simpleperf_utils import is_windows, remove
from . app_test import TestExampleBase
from . test_utils import TestHelper, INFERNO_SCRIPT
-class TestExamplePureJava(TestExampleBase):
+class TestExampleJava(TestExampleBase):
@classmethod
def setUpClass(cls):
- cls.prepare("SimpleperfExamplePureJava",
- "com.example.simpleperf.simpleperfexamplepurejava",
+ cls.prepare("SimpleperfExampleJava",
+ "simpleperf.example.java",
".MainActivity")
def test_app_profiler(self):
@@ -39,7 +40,7 @@ class TestExamplePureJava(TestExampleBase):
self.run_app_profiler(start_activity=True, build_binary_cache=False)
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
self.check_strings_in_file("report.txt", [
- "com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run",
+ "simpleperf.example.java.MainActivity$1.run",
"__start_thread"])
def test_app_profiler_multiprocesses(self):
@@ -92,18 +93,18 @@ class TestExamplePureJava(TestExampleBase):
self.common_test_report()
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
self.check_strings_in_file("report.txt", [
- "com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run",
+ "simpleperf.example.java.MainActivity$1.run",
"__start_thread"])
def test_profile_with_process_id(self):
self.adb.check_run(['shell', 'am', 'start', '-n', self.package_name + '/.MainActivity'])
time.sleep(1)
- pid = self.adb.check_run_and_return_output([
- 'shell', 'pidof', 'com.example.simpleperf.simpleperfexamplepurejava']).strip()
+ pid = self.adb.check_run_and_return_output(
+ ['shell', 'pidof', 'simpleperf.example.java']).strip()
self.run_app_profiler(start_activity=False, record_arg='-g --duration 10 -p ' + pid)
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
self.check_strings_in_file("report.txt", [
- "com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run",
+ "simpleperf.example.java.MainActivity$1.run",
"__start_thread"])
def test_annotate(self):
@@ -121,29 +122,28 @@ class TestExamplePureJava(TestExampleBase):
def test_report_sample(self):
self.common_test_report_sample(
- ["com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run",
+ ["simpleperf.example.java.MainActivity$1.run",
"__start_thread"])
def test_pprof_proto_generator(self):
check_strings_with_lines = []
if self.use_compiled_java_code:
check_strings_with_lines = [
- "com/example/simpleperf/simpleperfexamplepurejava/MainActivity.java",
+ "simpleperf/example/java/MainActivity.java",
"run"]
self.common_test_pprof_proto_generator(
check_strings_with_lines=check_strings_with_lines,
- check_strings_without_lines=[
- "com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run"])
+ check_strings_without_lines=["simpleperf.example.java.MainActivity$1.run"])
def test_inferno(self):
self.common_test_inferno()
self.run_app_profiler()
self.run_cmd([INFERNO_SCRIPT, "-sc"])
self.check_inferno_report_html(
- [('com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run', 80)])
+ [('simpleperf.example.java.MainActivity$1.run', 80)])
self.run_cmd([INFERNO_SCRIPT, "-sc", "-o", "report2.html"])
self.check_inferno_report_html(
- [('com.example.simpleperf.simpleperfexamplepurejava.MainActivity$1.run', 80)],
+ [('simpleperf.example.java.MainActivity$1.run', 80)],
"report2.html")
def test_inferno_in_another_dir(self):
@@ -173,11 +173,26 @@ class TestExamplePureJava(TestExampleBase):
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
-class TestExamplePureJavaRoot(TestExampleBase):
+class TestExampleJavaProfileableApk(TestExampleJava):
+ """ Test profiling a profileable released apk."""
@classmethod
def setUpClass(cls):
- cls.prepare("SimpleperfExamplePureJava",
- "com.example.simpleperf.simpleperfexamplepurejava",
+ if TestHelper.android_version >= 10:
+ cls.prepare("SimpleperfExampleJava",
+ "simpleperf.example.java",
+ ".MainActivity", apk_name='app-release.apk')
+
+ def setUp(self):
+ if TestHelper().android_version < 10:
+ raise unittest.SkipTest("Profileable apk isn't supported on Android < Q.")
+ super().setUp()
+
+
+class TestExampleJavaRoot(TestExampleBase):
+ @classmethod
+ def setUpClass(cls):
+ cls.prepare("SimpleperfExampleJava",
+ "simpleperf.example.java",
".MainActivity",
adb_root=True)
@@ -185,20 +200,20 @@ class TestExamplePureJavaRoot(TestExampleBase):
self.common_test_app_profiler()
-class TestExamplePureJavaTraceOffCpu(TestExampleBase):
+class TestExampleJavaTraceOffCpu(TestExampleBase):
@classmethod
def setUpClass(cls):
- cls.prepare("SimpleperfExamplePureJava",
- "com.example.simpleperf.simpleperfexamplepurejava",
+ cls.prepare("SimpleperfExampleJava",
+ "simpleperf.example.java",
".SleepActivity")
def test_smoke(self):
self.run_app_profiler(record_arg="-g -f 1000 --duration 10 -e cpu-clock:u --trace-offcpu")
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
self.check_strings_in_file("report.txt", [
- "com.example.simpleperf.simpleperfexamplepurejava.SleepActivity$1.run",
- "com.example.simpleperf.simpleperfexamplepurejava.SleepActivity$1.RunFunction",
- "com.example.simpleperf.simpleperfexamplepurejava.SleepActivity$1.SleepFunction"
+ "simpleperf.example.java.SleepActivity$1.run",
+ "simpleperf.example.java.SleepActivity$1.RunFunction",
+ "simpleperf.example.java.SleepActivity$1.SleepFunction"
])
remove("annotated_files")
self.run_cmd(["annotate.py", "-s", self.example_path, '--summary-width', '1000'])
@@ -212,11 +227,9 @@ class TestExamplePureJavaTraceOffCpu(TestExampleBase):
("RunFunction", 20, 20),
("SleepFunction", 20, 0),
("line 24", 1, 0),
- ("line 32", 20, 0)])
+ ("line 31", 20, 0)])
self.run_cmd([INFERNO_SCRIPT, "-sc"])
self.check_inferno_report_html(
- [('com.example.simpleperf.simpleperfexamplepurejava.SleepActivity$1.run', 80),
- ('com.example.simpleperf.simpleperfexamplepurejava.SleepActivity$1.RunFunction',
- 20),
- ('com.example.simpleperf.simpleperfexamplepurejava.SleepActivity$1.SleepFunction',
- 20)])
+ [('simpleperf.example.java.SleepActivity$1.run', 80),
+ ('simpleperf.example.java.SleepActivity$1.RunFunction', 20),
+ ('simpleperf.example.java.SleepActivity$1.SleepFunction', 20)])
diff --git a/test/kotlin_app_test.py b/test/kotlin_app_test.py
index 7b18e05..74f5022 100644
--- a/test/kotlin_app_test.py
+++ b/test/kotlin_app_test.py
@@ -15,17 +15,18 @@
# limitations under the License.
import os
+import unittest
from simpleperf_utils import remove
from . app_test import TestExampleBase
-from . test_utils import INFERNO_SCRIPT
+from . test_utils import INFERNO_SCRIPT, TestHelper
-class TestExampleOfKotlin(TestExampleBase):
+class TestExampleKotlin(TestExampleBase):
@classmethod
def setUpClass(cls):
- cls.prepare("SimpleperfExampleOfKotlin",
- "com.example.simpleperf.simpleperfexampleofkotlin",
+ cls.prepare("SimpleperfExampleKotlin",
+ "simpleperf.example.kotlin",
".MainActivity")
def test_app_profiler(self):
@@ -35,14 +36,14 @@ class TestExampleOfKotlin(TestExampleBase):
self.run_app_profiler(start_activity=True, build_binary_cache=False)
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
self.check_strings_in_file("report.txt", [
- "com.example.simpleperf.simpleperfexampleofkotlin.MainActivity$createBusyThread$1." +
+ "simpleperf.example.kotlin.MainActivity$createBusyThread$1." +
"run", "__start_thread"])
def test_report(self):
self.common_test_report()
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
self.check_strings_in_file("report.txt", [
- "com.example.simpleperf.simpleperfexampleofkotlin.MainActivity$createBusyThread$1." +
+ "simpleperf.example.kotlin.MainActivity$createBusyThread$1." +
"run", "__start_thread"])
def test_annotate(self):
@@ -60,36 +61,51 @@ class TestExampleOfKotlin(TestExampleBase):
def test_report_sample(self):
self.common_test_report_sample([
- "com.example.simpleperf.simpleperfexampleofkotlin.MainActivity$createBusyThread$1." +
+ "simpleperf.example.kotlin.MainActivity$createBusyThread$1." +
"run", "__start_thread"])
def test_pprof_proto_generator(self):
check_strings_with_lines = []
if self.use_compiled_java_code:
check_strings_with_lines = [
- "com/example/simpleperf/simpleperfexampleofkotlin/MainActivity.kt",
+ "simpleperf/example/kotlin/MainActivity.kt",
"run"]
self.common_test_pprof_proto_generator(
check_strings_with_lines=check_strings_with_lines,
- check_strings_without_lines=["com.example.simpleperf.simpleperfexampleofkotlin." +
- "MainActivity$createBusyThread$1.run"])
+ check_strings_without_lines=[
+ 'simpleperf.example.kotlin.MainActivity$createBusyThread$1.run'])
def test_inferno(self):
self.common_test_inferno()
self.run_app_profiler()
self.run_cmd([INFERNO_SCRIPT, "-sc"])
- self.check_inferno_report_html([('com.example.simpleperf.simpleperfexampleofkotlin.' +
- 'MainActivity$createBusyThread$1.run', 80)])
+ self.check_inferno_report_html([
+ ('simpleperf.example.kotlin.MainActivity$createBusyThread$1.run', 80)])
def test_report_html(self):
self.common_test_report_html()
-class TestExampleOfKotlinRoot(TestExampleBase):
+class TestExampleKotlinProfileableApk(TestExampleKotlin):
+ """ Test profiling a profileable released apk."""
+ @classmethod
+ def setUpClass(cls):
+ if TestHelper.android_version >= 10:
+ cls.prepare("SimpleperfExampleKotlin",
+ "simpleperf.example.kotlin",
+ ".MainActivity", apk_name='app-release.apk')
+
+ def setUp(self):
+ if TestHelper().android_version < 10:
+ raise unittest.SkipTest("Profileable apk isn't supported on Android < Q.")
+ super().setUp()
+
+
+class TestExampleKotlinRoot(TestExampleBase):
@classmethod
def setUpClass(cls):
- cls.prepare("SimpleperfExampleOfKotlin",
- "com.example.simpleperf.simpleperfexampleofkotlin",
+ cls.prepare("SimpleperfExampleKotlin",
+ "simpleperf.example.kotlin",
".MainActivity",
adb_root=True)
@@ -97,18 +113,17 @@ class TestExampleOfKotlinRoot(TestExampleBase):
self.common_test_app_profiler()
-class TestExampleOfKotlinTraceOffCpu(TestExampleBase):
+class TestExampleKotlinTraceOffCpu(TestExampleBase):
@classmethod
def setUpClass(cls):
- cls.prepare("SimpleperfExampleOfKotlin",
- "com.example.simpleperf.simpleperfexampleofkotlin",
+ cls.prepare("SimpleperfExampleKotlin",
+ "simpleperf.example.kotlin",
".SleepActivity")
def test_smoke(self):
self.run_app_profiler(record_arg="-g -f 1000 --duration 10 -e cpu-clock:u --trace-offcpu")
self.run_cmd(["report.py", "-g", "-o", "report.txt"])
- function_prefix = "com.example.simpleperf.simpleperfexampleofkotlin." + \
- "SleepActivity$createRunSleepThread$1."
+ function_prefix = 'simpleperf.example.kotlin.SleepActivity$createRunSleepThread$1.'
self.check_strings_in_file("report.txt", [
function_prefix + "run",
function_prefix + "RunFunction",
@@ -125,8 +140,8 @@ class TestExampleOfKotlinTraceOffCpu(TestExampleBase):
("run", 80, 0),
("RunFunction", 20, 20),
("SleepFunction", 20, 0),
- ("line 24", 20, 0),
- ("line 32", 20, 0)])
+ ("line 23", 20, 0),
+ ("line 31", 20, 0)])
self.run_cmd([INFERNO_SCRIPT, "-sc"])
self.check_inferno_report_html([
diff --git a/test/pprof_proto_generator_test.py b/test/pprof_proto_generator_test.py
index c8d5a21..297cf14 100644
--- a/test/pprof_proto_generator_test.py
+++ b/test/pprof_proto_generator_test.py
@@ -218,7 +218,7 @@ class TestPprofProtoGenerator(TestBase):
# Read recording file.
config = {'ndk_path': TestHelper.ndk_path, 'max_chain_length': 1000000,
- 'report_lib_options': ReportLibOptions(False, '', None, None)}
+ 'report_lib_options': ReportLibOptions(False, '', None, None, None)}
generator = PprofProfileGenerator(config)
generator.load_record_file(testdata_file)
diff --git a/test/report_html_test.py b/test/report_html_test.py
index 250ad03..7241a5e 100644
--- a/test/report_html_test.py
+++ b/test/report_html_test.py
@@ -18,7 +18,7 @@ import collections
import json
import os
import tempfile
-from typing import Any, Dict, List, Set
+from typing import Any, Dict, List, Optional, Set
from binary_cache_builder import BinaryCacheBuilder
from . test_utils import TestBase, TestHelper
@@ -254,3 +254,25 @@ class TestReportHtml(TestBase):
self.assertNotIn(art_frame_str, report)
report = self.get_record_data_string(options + ['--show-art-frames'])
self.assertIn(art_frame_str, report)
+
+ def test_aggregate_threads(self):
+ def get_thread_names(aggregate_threads_option: Optional[List[str]]) -> Dict[str, int]:
+ options = ['-i', TestHelper.testdata_path('perf_display_bitmaps.data')]
+ if aggregate_threads_option:
+ options += ['--aggregate-threads'] + aggregate_threads_option
+ record_data = self.get_record_data(options)
+ thread_names = {}
+ try:
+ for thread in record_data['sampleInfo'][0]['processes'][0]['threads']:
+ tid = str(thread['tid'])
+ thread_names[record_data['threadNames'][tid]] = thread['sampleCount']
+ except IndexError:
+ pass
+ return thread_names
+ thread_names = get_thread_names(None)
+ self.assertEqual(thread_names['AsyncTask #3'], 6)
+ self.assertEqual(thread_names['AsyncTask #4'], 13)
+ thread_names = get_thread_names(['AsyncTask.*'])
+ self.assertEqual(thread_names['AsyncTask.*'], 19)
+ self.assertNotIn('AsyncTask #3', thread_names)
+ self.assertNotIn('AsyncTask #4', thread_names)
diff --git a/test/report_lib_test.py b/test/report_lib_test.py
index 1447c5a..8e212a2 100644
--- a/test/report_lib_test.py
+++ b/test/report_lib_test.py
@@ -16,7 +16,7 @@
import os
import tempfile
-from typing import List, Set
+from typing import Dict, List, Optional, Set
from simpleperf_report_lib import ReportLib
from . test_utils import TestBase, TestHelper
@@ -311,3 +311,24 @@ class TestReportLib(TestBase):
self.assertIn(31881, threads)
self.assertNotIn(31850, threads)
os.unlink(filter_file.name)
+
+ def test_aggregate_threads(self):
+ """ Test using ReportLib.AggregateThreads(). """
+ def get_thread_names(aggregate_regex_list: Optional[List[str]]) -> Dict[str, int]:
+ self.report_lib.Close()
+ self.report_lib = ReportLib()
+ self.report_lib.SetRecordFile(TestHelper.testdata_path('perf_display_bitmaps.data'))
+ if aggregate_regex_list:
+ self.report_lib.AggregateThreads(aggregate_regex_list)
+ thread_names = {}
+ while self.report_lib.GetNextSample():
+ sample = self.report_lib.GetCurrentSample()
+ thread_names[sample.thread_comm] = thread_names.get(sample.thread_comm, 0) + 1
+ return thread_names
+ thread_names = get_thread_names(None)
+ self.assertEqual(thread_names['AsyncTask #3'], 6)
+ self.assertEqual(thread_names['AsyncTask #4'], 13)
+ thread_names = get_thread_names(['AsyncTask.*'])
+ self.assertEqual(thread_names['AsyncTask.*'], 19)
+ self.assertNotIn('AsyncTask #3', thread_names)
+ self.assertNotIn('AsyncTask #4', thread_names)
diff --git a/test/report_sample_test.py b/test/report_sample_test.py
index 5b6681c..83f1d36 100644
--- a/test/report_sample_test.py
+++ b/test/report_sample_test.py
@@ -20,6 +20,7 @@ import tempfile
from typing import List, Optional, Set
from . test_utils import TestBase, TestHelper
+from simpleperf_utils import remove
class TestReportSample(TestBase):
@@ -36,6 +37,33 @@ class TestReportSample(TestBase):
want = f.read()
self.assertEqual(got, want)
+ def test_output_flag(self):
+ # Test short form flag.
+ remove('some.output')
+ got = self.get_record_data_string('perf_display_bitmaps.data',
+ ['-o', 'some.output'])
+ self.assertEqual(got, '')
+ self.check_exist(filename='some.output')
+
+ # Test long form flag
+ remove("some.output")
+ got = self.get_record_data_string('perf_display_bitmaps.data',
+ ['--output_file', 'some.output'])
+ self.assertEqual(got, '')
+ self.check_exist(filename="some.output")
+
+ # Verify that the output file contains expected data
+ with open(TestHelper.testdata_path('perf_display_bitmaps.perf-script')) as f:
+ want = f.read()
+ with open('some.output') as f:
+ got = f.read()
+ self.assertEqual(got, want)
+
+ # Verify that an output spec of '-' is stdout
+ remove("some.output")
+ got = self.get_record_data_string('perf_display_bitmaps.data', ['-o', '-'])
+ self.assertEqual(got, want)
+
def test_comm_filter_to_renderthread(self):
got = self.get_record_data_string('perf_display_bitmaps.data', ['--comm', 'RenderThread'])
self.assertIn('RenderThread', got)
diff --git a/test/test_utils.py b/test/test_utils.py
index 995b73b..f10ea9b 100644
--- a/test/test_utils.py
+++ b/test/test_utils.py
@@ -139,6 +139,8 @@ class TestBase(unittest.TestCase):
elif result.failures and result.failures[-1][0] == self:
status = 'FAILED'
err_info = result.failures[-1][1]
+ elif result.skipped and result.skipped[-1][0] == self:
+ status = 'SKIPPED'
else:
status = 'OK'
@@ -146,7 +148,7 @@ class TestBase(unittest.TestCase):
TestHelper.log(
'end test %s.%s %s (%.3fs)' %
(self.__class__.__name__, self._testMethodName, status, time_taken))
- if status != 'OK':
+ if status == 'FAILED':
TestHelper.log(err_info)
# Remove test data for passed tests to save space.
diff --git a/test/testdata/README.md b/test/testdata/README.md
index c1ef30a..8e554a8 100644
--- a/test/testdata/README.md
+++ b/test/testdata/README.md
@@ -19,9 +19,9 @@ This directory is to show examples of using simpleperf to profile Android applic
meaning of each directory is as below:
../scripts/ -- contain simpleperf binaries and scripts.
- SimpleperfExamplePureJava/ -- contains an Android Studio project using only Java code.
+ SimpleperfExampleJava/ -- contains an Android Studio project using only Java code.
SimpleperfExampleCpp/ -- contains an Android Studio project using both Java and C++ code.
- SimpleperfExampleOfKotlin/ -- contains an Android Studio project using Kotlin code.
+ SimpleperfExampleKotlin/ -- contains an Android Studio project using Kotlin code.
CppApi/ -- contains an Android Studio project using c++ app_api to record.
JavaApi/ -- contains an Android Studio project using Java app_api to record.
@@ -43,19 +43,20 @@ Please make sure your device having Android version >= N.
## Profile a Java application
-Android Studio project: SimpleExamplePureJava
+Android Studio project: SimpleExampleJava
steps:
1. Build and install the application:
```sh
-# Open SimpleperfExamplePureJava project with Android Studio,
+# Open SimpleperfExampleJava project with Android Studio,
# and build this project successfully, otherwise the `./gradlew` command below will fail.
-$ cd SimpleperfExamplePureJava
+$ cd SimpleperfExampleJava
+# Build and install a debuggable app. We can also build and install a released app on Android >= Q.
# On windows, use "gradlew" instead.
$ ./gradlew clean assemble
-$ adb install -r app/build/outputs/apk/app-profiling.apk
+$ adb install -r app/build/outputs/apk/debug/app-debug.apk
```
2. Record profiling data:
@@ -63,7 +64,7 @@ $ adb install -r app/build/outputs/apk/app-profiling.apk
```sh
$ cd ../../scripts/
# app_profiler.py collects profiling data in perf.data, and binaries on device in binary_cache/.
-$ python app_profiler.py -p com.example.simpleperf.simpleperfexamplepurejava
+$ python app_profiler.py -p simpleperf.example.java
```
3. Show profiling data:
@@ -107,19 +108,20 @@ $ python report_html.py --add_source_code --source_dirs ../demo --add_disassembl
## Profile a Kotlin application
-Android Studio project: SimpleExampleOfKotlin
+Android Studio project: SimpleExampleKotlin
steps:
1. Build and install the application:
```sh
-# Open SimpleperfExampleOfKotlin project with Android Studio,
+# Open SimpleperfExampleKotlin project with Android Studio,
# and build this project sucessfully, otherwise the `./gradlew` command below will fail.
-$ cd SimpleperfExampleOfKotlin
+$ cd SimpleperfExampleKotlin
+# Build and install a debuggable app. We can also build and install a released app on Android >= Q.
# On windows, use "gradlew" instead.
$ ./gradlew clean assemble
-$ adb install -r app/build/outputs/apk/profiling/app-profiling.apk
+$ adb install -r app/build/outputs/apk/debug/app-debug.apk
```
2. Record profiling data:
@@ -127,7 +129,7 @@ $ adb install -r app/build/outputs/apk/profiling/app-profiling.apk
```sh
$ cd ../../scripts/
# app_profiler.py collects profiling data in perf.data, and binaries on device in binary_cache/.
-$ python app_profiler.py -p com.example.simpleperf.simpleperfexampleofkotlin
+$ python app_profiler.py -p simpleperf.example.kotlin
```
3. Show profiling data:
diff --git a/test/testdata/SimpleperfExampleCpp/app/build.gradle b/test/testdata/SimpleperfExampleCpp/app/build.gradle
index f327dbf..8cbdf27 100644
--- a/test/testdata/SimpleperfExampleCpp/app/build.gradle
+++ b/test/testdata/SimpleperfExampleCpp/app/build.gradle
@@ -3,12 +3,12 @@ plugins {
}
android {
- compileSdkVersion 30
+ compileSdkVersion 32
defaultConfig {
applicationId "simpleperf.example.cpp"
minSdkVersion 24
- targetSdkVersion 30
+ targetSdkVersion 32
versionCode 1
versionName "1.0"
@@ -35,7 +35,7 @@ android {
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
- version '3.10.2'
+ version '3.18.1'
}
}
buildFeatures {
diff --git a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so
index ad974c8..6c366c0 100755
--- a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so
+++ b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/arm64-v8a/libnative-lib.so
Binary files differ
diff --git a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so
index afacd9f..d8ec66d 100755
--- a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so
+++ b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so
Binary files differ
diff --git a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86/libnative-lib.so b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86/libnative-lib.so
index 883b643..a1505db 100755
--- a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86/libnative-lib.so
+++ b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86/libnative-lib.so
Binary files differ
diff --git a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86_64/libnative-lib.so b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86_64/libnative-lib.so
index 103ed97..93a68ca 100755
--- a/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86_64/libnative-lib.so
+++ b/test/testdata/SimpleperfExampleCpp/app/build/intermediates/cmake/debug/obj/x86_64/libnative-lib.so
Binary files differ
diff --git a/test/testdata/SimpleperfExampleCpp/app/build/outputs/apk/debug/app-debug.apk b/test/testdata/SimpleperfExampleCpp/app/build/outputs/apk/debug/app-debug.apk
index ba6ad0c..b1aa5c4 100644
--- a/test/testdata/SimpleperfExampleCpp/app/build/outputs/apk/debug/app-debug.apk
+++ b/test/testdata/SimpleperfExampleCpp/app/build/outputs/apk/debug/app-debug.apk
Binary files differ
diff --git a/test/testdata/SimpleperfExampleCpp/app/release/app-release.apk b/test/testdata/SimpleperfExampleCpp/app/release/app-release.apk
new file mode 100644
index 0000000..01e0e5a
--- /dev/null
+++ b/test/testdata/SimpleperfExampleCpp/app/release/app-release.apk
Binary files differ
diff --git a/test/testdata/SimpleperfExampleCpp/app/src/main/AndroidManifest.xml b/test/testdata/SimpleperfExampleCpp/app/src/main/AndroidManifest.xml
index 18ffc0c..7bb592d 100644
--- a/test/testdata/SimpleperfExampleCpp/app/src/main/AndroidManifest.xml
+++ b/test/testdata/SimpleperfExampleCpp/app/src/main/AndroidManifest.xml
@@ -9,7 +9,9 @@
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.SimpleperfExampleCpp">
- <activity android:name=".MainActivity">
+ <profileable android:shell="true" />
+ <activity android:name=".MainActivity"
+ android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
diff --git a/test/testdata/SimpleperfExampleCpp/app/src/main/cpp/CMakeLists.txt b/test/testdata/SimpleperfExampleCpp/app/src/main/cpp/CMakeLists.txt
index c5b83ac..9c11f07 100644
--- a/test/testdata/SimpleperfExampleCpp/app/src/main/cpp/CMakeLists.txt
+++ b/test/testdata/SimpleperfExampleCpp/app/src/main/cpp/CMakeLists.txt
@@ -3,7 +3,7 @@
# Sets the minimum version of CMake required to build the native library.
-cmake_minimum_required(VERSION 3.10.2)
+cmake_minimum_required(VERSION 3.18.1)
# Declares and names the project.
diff --git a/test/testdata/SimpleperfExampleCpp/build.gradle b/test/testdata/SimpleperfExampleCpp/build.gradle
index 5a7c7fc..71b99f4 100644
--- a/test/testdata/SimpleperfExampleCpp/build.gradle
+++ b/test/testdata/SimpleperfExampleCpp/build.gradle
@@ -1,25 +1,5 @@
// Top-level build file where you can add configuration options common to all sub-projects/modules.
-buildscript {
- repositories {
- google()
- mavenCentral()
- }
- dependencies {
- classpath "com.android.tools.build:gradle:4.2.2"
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-allprojects {
- repositories {
- google()
- mavenCentral()
- jcenter() // Warning: this repository is going to shut down soon
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
+plugins {
+ id 'com.android.application' version '7.3.1' apply false
+ id 'com.android.library' version '7.3.1' apply false
} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleCpp/gradle/wrapper/gradle-wrapper.properties b/test/testdata/SimpleperfExampleCpp/gradle/wrapper/gradle-wrapper.properties
index f793a34..6903aad 100644
--- a/test/testdata/SimpleperfExampleCpp/gradle/wrapper/gradle-wrapper.properties
+++ b/test/testdata/SimpleperfExampleCpp/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
#Fri Oct 15 16:48:24 PDT 2021
distributionBase=GRADLE_USER_HOME
-distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
zipStorePath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
diff --git a/test/testdata/SimpleperfExampleCpp/settings.gradle b/test/testdata/SimpleperfExampleCpp/settings.gradle
index a389315..15bae72 100644
--- a/test/testdata/SimpleperfExampleCpp/settings.gradle
+++ b/test/testdata/SimpleperfExampleCpp/settings.gradle
@@ -1,2 +1,16 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
rootProject.name = "SimpleperfExampleCpp"
include ':app'
diff --git a/test/testdata/SimpleperfExampleJava/app/build.gradle b/test/testdata/SimpleperfExampleJava/app/build.gradle
new file mode 100644
index 0000000..c2c1fe0
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/build.gradle
@@ -0,0 +1,39 @@
+plugins {
+ id 'com.android.application'
+}
+
+android {
+ namespace 'simpleperf.example.java'
+ compileSdk 32
+
+ defaultConfig {
+ applicationId "simpleperf.example.java"
+ minSdk 24
+ targetSdk 32
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/build/outputs/apk/debug/app-debug.apk b/test/testdata/SimpleperfExampleJava/app/build/outputs/apk/debug/app-debug.apk
new file mode 100644
index 0000000..dcb1a6d
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/build/outputs/apk/debug/app-debug.apk
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/proguard-rules.pro b/test/testdata/SimpleperfExampleJava/app/proguard-rules.pro
index b9d149a..481bb43 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/proguard-rules.pro
+++ b/test/testdata/SimpleperfExampleJava/app/proguard-rules.pro
@@ -1,14 +1,10 @@
# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /home/yabinc/Android/Sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
-# Add any project specific keep options here:
-
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
@@ -22,4 +18,4 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/release/app-release.apk b/test/testdata/SimpleperfExampleJava/app/release/app-release.apk
new file mode 100644
index 0000000..87b46c2
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/release/app-release.apk
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/release/output-metadata.json b/test/testdata/SimpleperfExampleJava/app/release/output-metadata.json
new file mode 100644
index 0000000..d95c5c6
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "simpleperf.example.java",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-release.apk"
+ }
+ ],
+ "elementType": "File"
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/androidTest/java/simpleperf/example/java/ExampleInstrumentedTest.java b/test/testdata/SimpleperfExampleJava/app/src/androidTest/java/simpleperf/example/java/ExampleInstrumentedTest.java
new file mode 100644
index 0000000..46af487
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/androidTest/java/simpleperf/example/java/ExampleInstrumentedTest.java
@@ -0,0 +1,26 @@
+package simpleperf.example.java;
+
+import android.content.Context;
+
+import androidx.test.platform.app.InstrumentationRegistry;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import static org.junit.Assert.*;
+
+/**
+ * Instrumented test, which will execute on an Android device.
+ *
+ * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
+ */
+@RunWith(AndroidJUnit4.class)
+public class ExampleInstrumentedTest {
+ @Test
+ public void useAppContext() {
+ // Context of the app under test.
+ Context appContext = InstrumentationRegistry.getInstrumentation().getTargetContext();
+ assertEquals("simpleperf.example.java", appContext.getPackageName());
+ }
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/AndroidManifest.xml b/test/testdata/SimpleperfExampleJava/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..5baf725
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/AndroidManifest.xml
@@ -0,0 +1,36 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <application
+ android:allowBackup="true"
+ android:dataExtractionRules="@xml/data_extraction_rules"
+ android:fullBackupContent="@xml/backup_rules"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.SimpleperfExampleJava"
+ tools:targetApi="31">
+ <profileable android:shell="true" />
+ <activity
+ android:name=".MainActivity"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name=".SleepActivity"
+ android:exported="true"/>
+ <activity
+ android:name=".MultiProcessActivity"
+ android:exported="true"/>
+ <service
+ android:name=".MultiProcessService"
+ android:process=":multiprocess_service"/>
+ </application>
+
+</manifest> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MainActivity.java b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MainActivity.java
index 2d6196b..7296dba 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MainActivity.java
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MainActivity.java
@@ -1,6 +1,7 @@
-package com.example.simpleperf.simpleperfexamplepurejava;
+package simpleperf.example.java;
+
+import androidx.appcompat.app.AppCompatActivity;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@@ -9,7 +10,6 @@ public class MainActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
-
createBusyThread();
}
@@ -29,4 +29,4 @@ public class MainActivity extends AppCompatActivity {
}
}, "BusyThread").start();
}
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MultiProcessActivity.java b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MultiProcessActivity.java
index de698ec..25dc796 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MultiProcessActivity.java
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MultiProcessActivity.java
@@ -1,20 +1,20 @@
-package com.example.simpleperf.simpleperfexamplepurejava;
+package simpleperf.example.java;
+
+import androidx.appcompat.app.AppCompatActivity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
+import android.os.Bundle;
import android.os.IBinder;
import android.os.Message;
import android.os.Messenger;
import android.os.RemoteException;
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
import android.util.Log;
public class MultiProcessActivity extends AppCompatActivity {
public static final String TAG = "MultiProcessActivity";
-
Messenger mService = null;
boolean mBound;
@@ -22,7 +22,6 @@ public class MultiProcessActivity extends AppCompatActivity {
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_multi_process);
-
bindService(new Intent(this, MultiProcessService.class), mConnection,
Context.BIND_AUTO_CREATE);
createBusyThread();
@@ -75,4 +74,4 @@ public class MultiProcessActivity extends AppCompatActivity {
}
}, "BusyThread").start();
}
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MultiProcessService.java b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MultiProcessService.java
index 2fd4d57..3e85c24 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/MultiProcessService.java
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/MultiProcessService.java
@@ -1,9 +1,10 @@
-package com.example.simpleperf.simpleperfexamplepurejava;
+package simpleperf.example.java;
import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
+import android.os.Looper;
import android.os.Message;
import android.os.Messenger;
@@ -47,4 +48,4 @@ public class MultiProcessService extends Service {
}
}, "BusyService").start();
}
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/SleepActivity.java b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/SleepActivity.java
index 25dc7e3..4c310df 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/java/com/example/simpleperf/simpleperfexamplepurejava/SleepActivity.java
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/java/simpleperf/example/java/SleepActivity.java
@@ -1,6 +1,7 @@
-package com.example.simpleperf.simpleperfexamplepurejava;
+package simpleperf.example.java;
+
+import androidx.appcompat.app.AppCompatActivity;
-import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
public class SleepActivity extends AppCompatActivity {
@@ -51,5 +52,4 @@ public class SleepActivity extends AppCompatActivity {
}
}, "RunSleepThread").start();
}
-
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="85.84757"
+ android:endY="92.4963"
+ android:startX="42.9492"
+ android:startY="49.59793"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000" />
+</vector> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/drawable/ic_launcher_background.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:fillColor="#3DDC84"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+</vector>
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/layout/activity_main.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_main.xml
index 4c7edcf..c937b69 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/layout/activity_main.xml
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_main.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context="com.example.simpleperf.simpleperfexampleofkotlin.MainActivity">
+ tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="Hello World!"
+ android:text="Running a busy thread!"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-</android.support.constraint.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_multi_process.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_multi_process.xml
index f97b72e..8b23ff4 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_multi_process.xml
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_multi_process.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context="com.example.simpleperf.simpleperfexamplepurejava.MultiProcessActivity">
+ tools:context=".MultiProcessActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="MultiProcessActivity"
+ android:text="Running a busy thread and a busy service thread!"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-</android.support.constraint.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_sleep.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_sleep.xml
index f732f77..fd8ce42 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_sleep.xml
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/layout/activity_sleep.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context="com.example.simpleperf.simpleperfexamplepurejava.SleepActivity">
+ tools:context=".SleepActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="SleepActivity"
+ android:text="Running a half busy half sleep thread!"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-</android.support.constraint.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/values-night/themes.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..6327fb7
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.SimpleperfExampleJava" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_200</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/black</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_200</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/values/colors.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="purple_200">#FFBB86FC</color>
+ <color name="purple_500">#FF6200EE</color>
+ <color name="purple_700">#FF3700B3</color>
+ <color name="teal_200">#FF03DAC5</color>
+ <color name="teal_700">#FF018786</color>
+ <color name="black">#FF000000</color>
+ <color name="white">#FFFFFFFF</color>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/values/strings.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..069da5c
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">SimpleperfExampleJava</string>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/values/themes.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..5d8a48d
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.SimpleperfExampleJava" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_500</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/white</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_700</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/xml/backup_rules.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000..fa0f996
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample backup rules file; uncomment and customize as necessary.
+ See https://developer.android.com/guide/topics/data/autobackup
+ for details.
+ Note: This file is ignored for devices older that API 31
+ See https://developer.android.com/about/versions/12/backup-restore
+-->
+<full-backup-content>
+ <!--
+ <include domain="sharedpref" path="."/>
+ <exclude domain="sharedpref" path="device.xml"/>
+-->
+</full-backup-content> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/app/src/main/res/xml/data_extraction_rules.xml b/test/testdata/SimpleperfExampleJava/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000..9ee9997
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample data extraction rules file; uncomment and customize as necessary.
+ See https://developer.android.com/about/versions/12/backup-restore#xml-changes
+ for details.
+-->
+<data-extraction-rules>
+ <cloud-backup>
+ <!-- TODO: Use <include> and <exclude> to control what is backed up.
+ <include .../>
+ <exclude .../>
+ -->
+ </cloud-backup>
+ <!--
+ <device-transfer>
+ <include .../>
+ <exclude .../>
+ </device-transfer>
+ -->
+</data-extraction-rules> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/test/java/com/example/simpleperf/simpleperfexamplepurejava/ExampleUnitTest.java b/test/testdata/SimpleperfExampleJava/app/src/test/java/simpleperf/example/java/ExampleUnitTest.java
index 0f3813d..8bcec03 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/test/java/com/example/simpleperf/simpleperfexamplepurejava/ExampleUnitTest.java
+++ b/test/testdata/SimpleperfExampleJava/app/src/test/java/simpleperf/example/java/ExampleUnitTest.java
@@ -1,4 +1,4 @@
-package com.example.simpleperf.simpleperfexamplepurejava;
+package simpleperf.example.java;
import org.junit.Test;
@@ -11,7 +11,7 @@ import static org.junit.Assert.*;
*/
public class ExampleUnitTest {
@Test
- public void addition_isCorrect() throws Exception {
+ public void addition_isCorrect() {
assertEquals(4, 2 + 2);
}
} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/build.gradle b/test/testdata/SimpleperfExampleJava/build.gradle
new file mode 100644
index 0000000..71b99f4
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/build.gradle
@@ -0,0 +1,5 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id 'com.android.application' version '7.3.1' apply false
+ id 'com.android.library' version '7.3.1' apply false
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleOfKotlin/gradle.properties b/test/testdata/SimpleperfExampleJava/gradle.properties
index aac7c9b..3e927b1 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/gradle.properties
+++ b/test/testdata/SimpleperfExampleJava/gradle.properties
@@ -1,17 +1,21 @@
# Project-wide Gradle settings.
-
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
-
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
-
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.jar b/test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e708b1c
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.properties b/test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.properties
index be54b8d..51d529e 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.properties
+++ b/test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Apr 10 15:23:21 PDT 2018
+#Wed Nov 09 13:48:30 PST 2022
distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+zipStoreBase=GRADLE_USER_HOME
diff --git a/test/testdata/SimpleperfExampleOfKotlin/gradlew b/test/testdata/SimpleperfExampleJava/gradlew
index 9d82f78..4f906e0 100755
--- a/test/testdata/SimpleperfExampleOfKotlin/gradlew
+++ b/test/testdata/SimpleperfExampleJava/gradlew
@@ -1,4 +1,20 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
##############################################################################
##
@@ -6,20 +22,38 @@
##
##############################################################################
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
-warn ( ) {
+warn () {
echo "$*"
}
-die ( ) {
+die () {
echo
echo "$*"
echo
@@ -30,6 +64,7 @@ die ( ) {
cygwin=false
msys=false
darwin=false
+nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
@@ -40,28 +75,14 @@ case "`uname`" in
MINGW* )
msys=true
;;
+ NONSTOP* )
+ nonstop=true
+ ;;
esac
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -85,7 +106,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -105,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
@@ -134,27 +156,30 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
+exec "$JAVACMD" "$@"
diff --git a/test/testdata/SimpleperfExamplePureJava/gradlew.bat b/test/testdata/SimpleperfExampleJava/gradlew.bat
index aec9973..ac1b06f 100644
--- a/test/testdata/SimpleperfExamplePureJava/gradlew.bat
+++ b/test/testdata/SimpleperfExampleJava/gradlew.bat
@@ -1,3 +1,19 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@@ -8,20 +24,23 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -35,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -45,34 +64,14 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/test/testdata/SimpleperfExampleJava/settings.gradle b/test/testdata/SimpleperfExampleJava/settings.gradle
new file mode 100644
index 0000000..75cefd9
--- /dev/null
+++ b/test/testdata/SimpleperfExampleJava/settings.gradle
@@ -0,0 +1,16 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+rootProject.name = "SimpleperfExampleJava"
+include ':app'
diff --git a/test/testdata/SimpleperfExampleKotlin/app/build.gradle b/test/testdata/SimpleperfExampleKotlin/app/build.gradle
new file mode 100644
index 0000000..0b9f2d5
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/build.gradle
@@ -0,0 +1,44 @@
+plugins {
+ id 'com.android.application'
+ id 'org.jetbrains.kotlin.android'
+}
+
+android {
+ namespace 'simpleperf.example.kotlin'
+ compileSdk 32
+
+ defaultConfig {
+ applicationId "simpleperf.example.kotlin"
+ minSdk 24
+ targetSdk 32
+ versionCode 1
+ versionName "1.0"
+
+ testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
+ }
+
+ buildTypes {
+ release {
+ minifyEnabled false
+ proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
+ }
+ }
+ compileOptions {
+ sourceCompatibility JavaVersion.VERSION_1_8
+ targetCompatibility JavaVersion.VERSION_1_8
+ }
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
+}
+
+dependencies {
+
+ implementation 'androidx.core:core-ktx:1.7.0'
+ implementation 'androidx.appcompat:appcompat:1.4.1'
+ implementation 'com.google.android.material:material:1.5.0'
+ implementation 'androidx.constraintlayout:constraintlayout:2.1.3'
+ testImplementation 'junit:junit:4.13.2'
+ androidTestImplementation 'androidx.test.ext:junit:1.1.3'
+ androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/build/outputs/apk/debug/app-debug.apk b/test/testdata/SimpleperfExampleKotlin/app/build/outputs/apk/debug/app-debug.apk
new file mode 100644
index 0000000..ffb872e
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/build/outputs/apk/debug/app-debug.apk
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/proguard-rules.pro b/test/testdata/SimpleperfExampleKotlin/app/proguard-rules.pro
index bd13885..481bb43 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/app/proguard-rules.pro
+++ b/test/testdata/SimpleperfExampleKotlin/app/proguard-rules.pro
@@ -1,14 +1,10 @@
# Add project specific ProGuard rules here.
-# By default, the flags in this file are appended to flags specified
-# in /usr/local/google/home/yabinc/Android/Sdk/tools/proguard/proguard-android.txt
-# You can edit the include path and order by changing the proguardFiles
-# directive in build.gradle.
+# You can control the set of applied configuration files using the
+# proguardFiles setting in build.gradle.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
-# Add any project specific keep options here:
-
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
@@ -22,4 +18,4 @@
# If you keep the line number information, uncomment this to
# hide the original source file name.
-#-renamesourcefileattribute SourceFile
+#-renamesourcefileattribute SourceFile \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/release/app-release.apk b/test/testdata/SimpleperfExampleKotlin/app/release/app-release.apk
new file mode 100644
index 0000000..517a442
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/release/app-release.apk
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/release/output-metadata.json b/test/testdata/SimpleperfExampleKotlin/app/release/output-metadata.json
new file mode 100644
index 0000000..16a114c
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/release/output-metadata.json
@@ -0,0 +1,20 @@
+{
+ "version": 3,
+ "artifactType": {
+ "type": "APK",
+ "kind": "Directory"
+ },
+ "applicationId": "simpleperf.example.kotlin",
+ "variantName": "release",
+ "elements": [
+ {
+ "type": "SINGLE",
+ "filters": [],
+ "attributes": [],
+ "versionCode": 1,
+ "versionName": "1.0",
+ "outputFile": "app-release.apk"
+ }
+ ],
+ "elementType": "File"
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/androidTest/java/com/example/simpleperf/simpleperfexampleofkotlin/ExampleInstrumentedTest.kt b/test/testdata/SimpleperfExampleKotlin/app/src/androidTest/java/simpleperf/example/kotlin/ExampleInstrumentedTest.kt
index 8946158..01e4c34 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/androidTest/java/com/example/simpleperf/simpleperfexampleofkotlin/ExampleInstrumentedTest.kt
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/androidTest/java/simpleperf/example/kotlin/ExampleInstrumentedTest.kt
@@ -1,7 +1,7 @@
-package com.example.simpleperf.simpleperfexampleofkotlin
+package simpleperf.example.kotlin
-import android.support.test.InstrumentationRegistry
-import android.support.test.runner.AndroidJUnit4
+import androidx.test.platform.app.InstrumentationRegistry
+import androidx.test.ext.junit.runners.AndroidJUnit4
import org.junit.Test
import org.junit.runner.RunWith
@@ -18,7 +18,7 @@ class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
- val appContext = InstrumentationRegistry.getTargetContext()
- assertEquals("com.example.simpleperf.simpleperfexampleofkotlin", appContext.packageName)
+ val appContext = InstrumentationRegistry.getInstrumentation().targetContext
+ assertEquals("simpleperf.example.kotlin", appContext.packageName)
}
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/AndroidManifest.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/AndroidManifest.xml
new file mode 100644
index 0000000..4f6de7a
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/AndroidManifest.xml
@@ -0,0 +1,31 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools">
+
+ <application
+ android:allowBackup="true"
+ android:dataExtractionRules="@xml/data_extraction_rules"
+ android:fullBackupContent="@xml/backup_rules"
+ android:icon="@mipmap/ic_launcher"
+ android:label="@string/app_name"
+ android:roundIcon="@mipmap/ic_launcher_round"
+ android:supportsRtl="true"
+ android:theme="@style/Theme.SimpleperfExampleKotlin"
+ tools:targetApi="31">
+ <profileable android:shell="true" />
+ <activity
+ android:name=".MainActivity"
+ android:exported="true">
+ <intent-filter>
+ <action android:name="android.intent.action.MAIN" />
+
+ <category android:name="android.intent.category.LAUNCHER" />
+ </intent-filter>
+ </activity>
+ <activity
+ android:name=".SleepActivity"
+ android:exported="true">
+ </activity>
+ </application>
+
+</manifest> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/java/com/example/simpleperf/simpleperfexampleofkotlin/MainActivity.kt b/test/testdata/SimpleperfExampleKotlin/app/src/main/java/simpleperf/example/kotlin/MainActivity.kt
index 55d47aa..785ba3c 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/java/com/example/simpleperf/simpleperfexampleofkotlin/MainActivity.kt
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/java/simpleperf/example/kotlin/MainActivity.kt
@@ -1,10 +1,9 @@
-package com.example.simpleperf.simpleperfexampleofkotlin
+package simpleperf.example.kotlin
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
@@ -26,4 +25,4 @@ class MainActivity : AppCompatActivity() {
}
}.start()
}
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/java/com/example/simpleperf/simpleperfexampleofkotlin/SleepActivity.kt b/test/testdata/SimpleperfExampleKotlin/app/src/main/java/simpleperf/example/kotlin/SleepActivity.kt
index 2ed5afe..cc744e6 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/java/com/example/simpleperf/simpleperfexampleofkotlin/SleepActivity.kt
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/java/simpleperf/example/kotlin/SleepActivity.kt
@@ -1,14 +1,13 @@
-package com.example.simpleperf.simpleperfexampleofkotlin
+package simpleperf.example.kotlin
-import android.support.v7.app.AppCompatActivity
+import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class SleepActivity : AppCompatActivity() {
-
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_sleep)
- createRunSleepThread();
+ createRunSleepThread()
}
fun createRunSleepThread() {
@@ -47,4 +46,4 @@ class SleepActivity : AppCompatActivity() {
}
}.start()
}
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable-v24/ic_launcher_foreground.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
new file mode 100644
index 0000000..2b068d1
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable-v24/ic_launcher_foreground.xml
@@ -0,0 +1,30 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:aapt="http://schemas.android.com/aapt"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path android:pathData="M31,63.928c0,0 6.4,-11 12.1,-13.1c7.2,-2.6 26,-1.4 26,-1.4l38.1,38.1L107,108.928l-32,-1L31,63.928z">
+ <aapt:attr name="android:fillColor">
+ <gradient
+ android:endX="85.84757"
+ android:endY="92.4963"
+ android:startX="42.9492"
+ android:startY="49.59793"
+ android:type="linear">
+ <item
+ android:color="#44000000"
+ android:offset="0.0" />
+ <item
+ android:color="#00000000"
+ android:offset="1.0" />
+ </gradient>
+ </aapt:attr>
+ </path>
+ <path
+ android:fillColor="#FFFFFF"
+ android:fillType="nonZero"
+ android:pathData="M65.3,45.828l3.8,-6.6c0.2,-0.4 0.1,-0.9 -0.3,-1.1c-0.4,-0.2 -0.9,-0.1 -1.1,0.3l-3.9,6.7c-6.3,-2.8 -13.4,-2.8 -19.7,0l-3.9,-6.7c-0.2,-0.4 -0.7,-0.5 -1.1,-0.3C38.8,38.328 38.7,38.828 38.9,39.228l3.8,6.6C36.2,49.428 31.7,56.028 31,63.928h46C76.3,56.028 71.8,49.428 65.3,45.828zM43.4,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2c-0.3,-0.7 -0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C45.3,56.528 44.5,57.328 43.4,57.328L43.4,57.328zM64.6,57.328c-0.8,0 -1.5,-0.5 -1.8,-1.2s-0.1,-1.5 0.4,-2.1c0.5,-0.5 1.4,-0.7 2.1,-0.4c0.7,0.3 1.2,1 1.2,1.8C66.5,56.528 65.6,57.328 64.6,57.328L64.6,57.328z"
+ android:strokeWidth="1"
+ android:strokeColor="#00000000" />
+</vector> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable/ic_launcher_background.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable/ic_launcher_background.xml
new file mode 100644
index 0000000..07d5da9
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/drawable/ic_launcher_background.xml
@@ -0,0 +1,170 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="108dp"
+ android:height="108dp"
+ android:viewportWidth="108"
+ android:viewportHeight="108">
+ <path
+ android:fillColor="#3DDC84"
+ android:pathData="M0,0h108v108h-108z" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M9,0L9,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,0L19,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,0L29,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,0L39,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,0L49,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,0L59,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,0L69,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,0L79,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M89,0L89,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M99,0L99,108"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,9L108,9"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,19L108,19"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,29L108,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,39L108,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,49L108,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,59L108,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,69L108,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,79L108,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,89L108,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M0,99L108,99"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,29L89,29"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,39L89,39"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,49L89,49"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,59L89,59"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,69L89,69"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M19,79L89,79"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M29,19L29,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M39,19L39,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M49,19L49,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M59,19L59,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M69,19L69,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+ <path
+ android:fillColor="#00000000"
+ android:pathData="M79,19L79,89"
+ android:strokeWidth="0.8"
+ android:strokeColor="#33FFFFFF" />
+</vector>
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_main.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/layout/activity_main.xml
index 4a09b1a..c937b69 100644
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/layout/activity_main.xml
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/layout/activity_main.xml
@@ -1,18 +1,18 @@
<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
- tools:context="com.example.simpleperf.simpleperfexamplepurejava.MainActivity">
+ tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:text="MainActivity"
+ android:text="Running a busy thread!"
app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintLeft_toLeftOf="parent"
- app:layout_constraintRight_toRightOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
-</android.support.constraint.ConstraintLayout>
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/layout/activity_sleep.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/layout/activity_sleep.xml
new file mode 100644
index 0000000..fd8ce42
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/layout/activity_sleep.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:app="http://schemas.android.com/apk/res-auto"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ tools:context=".SleepActivity">
+
+ <TextView
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:text="Running a half busy half sleep thread!"
+ app:layout_constraintBottom_toBottomOf="parent"
+ app:layout_constraintEnd_toEndOf="parent"
+ app:layout_constraintStart_toStartOf="parent"
+ app:layout_constraintTop_toTopOf="parent" />
+
+</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
new file mode 100644
index 0000000..eca70cf
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<adaptive-icon xmlns:android="http://schemas.android.com/apk/res/android">
+ <background android:drawable="@drawable/ic_launcher_background" />
+ <foreground android:drawable="@drawable/ic_launcher_foreground" />
+</adaptive-icon> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.webp
new file mode 100644
index 0000000..c209e78
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..b2dfe3d
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.webp
new file mode 100644
index 0000000..4f0f1d6
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..62b611d
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
new file mode 100644
index 0000000..948a307
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..1b9a695
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..28d4b77
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9287f50
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
new file mode 100644
index 0000000..aa7d642
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
new file mode 100644
index 0000000..9126ae3
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp
Binary files differ
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values-night/themes.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values-night/themes.xml
new file mode 100644
index 0000000..812d083
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values-night/themes.xml
@@ -0,0 +1,16 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.SimpleperfExampleKotlin" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_200</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/black</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_200</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/colors.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/colors.xml
new file mode 100644
index 0000000..f8c6127
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/colors.xml
@@ -0,0 +1,10 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="purple_200">#FFBB86FC</color>
+ <color name="purple_500">#FF6200EE</color>
+ <color name="purple_700">#FF3700B3</color>
+ <color name="teal_200">#FF03DAC5</color>
+ <color name="teal_700">#FF018786</color>
+ <color name="black">#FF000000</color>
+ <color name="white">#FFFFFFFF</color>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/strings.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/strings.xml
new file mode 100644
index 0000000..af60980
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/strings.xml
@@ -0,0 +1,3 @@
+<resources>
+ <string name="app_name">SimpleperfExampleKotlin</string>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/themes.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/themes.xml
new file mode 100644
index 0000000..7568d49
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/values/themes.xml
@@ -0,0 +1,16 @@
+<resources xmlns:tools="http://schemas.android.com/tools">
+ <!-- Base application theme. -->
+ <style name="Theme.SimpleperfExampleKotlin" parent="Theme.MaterialComponents.DayNight.DarkActionBar">
+ <!-- Primary brand color. -->
+ <item name="colorPrimary">@color/purple_500</item>
+ <item name="colorPrimaryVariant">@color/purple_700</item>
+ <item name="colorOnPrimary">@color/white</item>
+ <!-- Secondary brand color. -->
+ <item name="colorSecondary">@color/teal_200</item>
+ <item name="colorSecondaryVariant">@color/teal_700</item>
+ <item name="colorOnSecondary">@color/black</item>
+ <!-- Status bar color. -->
+ <item name="android:statusBarColor">?attr/colorPrimaryVariant</item>
+ <!-- Customize your theme here. -->
+ </style>
+</resources> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/backup_rules.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/backup_rules.xml
new file mode 100644
index 0000000..fa0f996
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/backup_rules.xml
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample backup rules file; uncomment and customize as necessary.
+ See https://developer.android.com/guide/topics/data/autobackup
+ for details.
+ Note: This file is ignored for devices older that API 31
+ See https://developer.android.com/about/versions/12/backup-restore
+-->
+<full-backup-content>
+ <!--
+ <include domain="sharedpref" path="."/>
+ <exclude domain="sharedpref" path="device.xml"/>
+-->
+</full-backup-content> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/data_extraction_rules.xml b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/data_extraction_rules.xml
new file mode 100644
index 0000000..9ee9997
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/xml/data_extraction_rules.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?><!--
+ Sample data extraction rules file; uncomment and customize as necessary.
+ See https://developer.android.com/about/versions/12/backup-restore#xml-changes
+ for details.
+-->
+<data-extraction-rules>
+ <cloud-backup>
+ <!-- TODO: Use <include> and <exclude> to control what is backed up.
+ <include .../>
+ <exclude .../>
+ -->
+ </cloud-backup>
+ <!--
+ <device-transfer>
+ <include .../>
+ <exclude .../>
+ </device-transfer>
+ -->
+</data-extraction-rules> \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/test/java/com/example/simpleperf/simpleperfexampleofkotlin/ExampleUnitTest.kt b/test/testdata/SimpleperfExampleKotlin/app/src/test/java/simpleperf/example/kotlin/ExampleUnitTest.kt
index 39fbbf8..09e76f4 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/test/java/com/example/simpleperf/simpleperfexampleofkotlin/ExampleUnitTest.kt
+++ b/test/testdata/SimpleperfExampleKotlin/app/src/test/java/simpleperf/example/kotlin/ExampleUnitTest.kt
@@ -1,4 +1,4 @@
-package com.example.simpleperf.simpleperfexampleofkotlin
+package simpleperf.example.kotlin
import org.junit.Test
@@ -14,4 +14,4 @@ class ExampleUnitTest {
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
-}
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/build.gradle b/test/testdata/SimpleperfExampleKotlin/build.gradle
new file mode 100644
index 0000000..2536974
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/build.gradle
@@ -0,0 +1,6 @@
+// Top-level build file where you can add configuration options common to all sub-projects/modules.
+plugins {
+ id 'com.android.application' version '7.3.1' apply false
+ id 'com.android.library' version '7.3.1' apply false
+ id 'org.jetbrains.kotlin.android' version '1.7.20' apply false
+} \ No newline at end of file
diff --git a/test/testdata/SimpleperfExamplePureJava/gradle.properties b/test/testdata/SimpleperfExampleKotlin/gradle.properties
index aac7c9b..3c5031e 100644
--- a/test/testdata/SimpleperfExamplePureJava/gradle.properties
+++ b/test/testdata/SimpleperfExampleKotlin/gradle.properties
@@ -1,17 +1,23 @@
# Project-wide Gradle settings.
-
# IDE (e.g. Android Studio) users:
# Gradle settings configured through the IDE *will override*
# any settings specified in this file.
-
# For more details on how to configure your build environment visit
# http://www.gradle.org/docs/current/userguide/build_environment.html
-
# Specifies the JVM arguments used for the daemon process.
# The setting is particularly useful for tweaking memory settings.
-org.gradle.jvmargs=-Xmx1536m
-
+org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
# When configured, Gradle will run in incubating parallel mode.
# This option should only be used with decoupled projects. More details, visit
# http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
# org.gradle.parallel=true
+# AndroidX package structure to make it clearer which packages are bundled with the
+# Android operating system, and which are packaged with your app's APK
+# https://developer.android.com/topic/libraries/support-library/androidx-rn
+android.useAndroidX=true
+# Kotlin code style for this project: "official" or "obsolete":
+kotlin.code.style=official
+# Enables namespacing of each library's R class so that its R class includes only the
+# resources declared in the library itself and none from the library's dependencies,
+# thereby reducing the size of the R class for that library
+android.nonTransitiveRClass=true \ No newline at end of file
diff --git a/test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.jar b/test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.jar
new file mode 100644
index 0000000..e708b1c
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.jar
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.properties b/test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.properties
index 275de5d..f656d2f 100644
--- a/test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.properties
+++ b/test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.properties
@@ -1,6 +1,6 @@
-#Tue Apr 10 14:48:08 PDT 2018
+#Wed Nov 09 11:27:42 PST 2022
distributionBase=GRADLE_USER_HOME
+distributionUrl=https\://services.gradle.org/distributions/gradle-7.4-bin.zip
distributionPath=wrapper/dists
-zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
-distributionUrl=https\://services.gradle.org/distributions/gradle-4.6-all.zip
+zipStoreBase=GRADLE_USER_HOME
diff --git a/test/testdata/SimpleperfExamplePureJava/gradlew b/test/testdata/SimpleperfExampleKotlin/gradlew
index 9d82f78..4f906e0 100755
--- a/test/testdata/SimpleperfExamplePureJava/gradlew
+++ b/test/testdata/SimpleperfExampleKotlin/gradlew
@@ -1,4 +1,20 @@
-#!/usr/bin/env bash
+#!/usr/bin/env sh
+
+#
+# Copyright 2015 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+# https://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
##############################################################################
##
@@ -6,20 +22,38 @@
##
##############################################################################
-# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-DEFAULT_JVM_OPTS=""
+# Attempt to set APP_HOME
+# Resolve links: $0 may be a link
+PRG="$0"
+# Need this for relative symlinks.
+while [ -h "$PRG" ] ; do
+ ls=`ls -ld "$PRG"`
+ link=`expr "$ls" : '.*-> \(.*\)$'`
+ if expr "$link" : '/.*' > /dev/null; then
+ PRG="$link"
+ else
+ PRG=`dirname "$PRG"`"/$link"
+ fi
+done
+SAVED="`pwd`"
+cd "`dirname \"$PRG\"`/" >/dev/null
+APP_HOME="`pwd -P`"
+cd "$SAVED" >/dev/null
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
+# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
+
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
-warn ( ) {
+warn () {
echo "$*"
}
-die ( ) {
+die () {
echo
echo "$*"
echo
@@ -30,6 +64,7 @@ die ( ) {
cygwin=false
msys=false
darwin=false
+nonstop=false
case "`uname`" in
CYGWIN* )
cygwin=true
@@ -40,28 +75,14 @@ case "`uname`" in
MINGW* )
msys=true
;;
+ NONSTOP* )
+ nonstop=true
+ ;;
esac
-# Attempt to set APP_HOME
-# Resolve links: $0 may be a link
-PRG="$0"
-# Need this for relative symlinks.
-while [ -h "$PRG" ] ; do
- ls=`ls -ld "$PRG"`
- link=`expr "$ls" : '.*-> \(.*\)$'`
- if expr "$link" : '/.*' > /dev/null; then
- PRG="$link"
- else
- PRG=`dirname "$PRG"`"/$link"
- fi
-done
-SAVED="`pwd`"
-cd "`dirname \"$PRG\"`/" >/dev/null
-APP_HOME="`pwd -P`"
-cd "$SAVED" >/dev/null
-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
+
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
@@ -85,7 +106,7 @@ location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
-if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
+if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then
MAX_FD_LIMIT=`ulimit -H -n`
if [ $? -eq 0 ] ; then
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
@@ -105,10 +126,11 @@ if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
-# For Cygwin, switch paths to Windows format before running java
-if $cygwin ; then
+# For Cygwin or MSYS, switch paths to Windows format before running java
+if [ "$cygwin" = "true" -o "$msys" = "true" ] ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
+
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
@@ -134,27 +156,30 @@ if $cygwin ; then
else
eval `echo args$i`="\"$arg\""
fi
- i=$((i+1))
+ i=`expr $i + 1`
done
case $i in
- (0) set -- ;;
- (1) set -- "$args0" ;;
- (2) set -- "$args0" "$args1" ;;
- (3) set -- "$args0" "$args1" "$args2" ;;
- (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
- (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
- (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
- (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
- (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
- (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
+ 0) set -- ;;
+ 1) set -- "$args0" ;;
+ 2) set -- "$args0" "$args1" ;;
+ 3) set -- "$args0" "$args1" "$args2" ;;
+ 4) set -- "$args0" "$args1" "$args2" "$args3" ;;
+ 5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
+ 6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
+ 7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
+ 8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
+ 9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
-# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
-function splitJvmOpts() {
- JVM_OPTS=("$@")
+# Escape application args
+save () {
+ for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done
+ echo " "
}
-eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
-JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
+APP_ARGS=`save "$@"`
+
+# Collect all arguments for the java command, following the shell quoting and substitution rules
+eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS"
-exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
+exec "$JAVACMD" "$@"
diff --git a/test/testdata/SimpleperfExampleOfKotlin/gradlew.bat b/test/testdata/SimpleperfExampleKotlin/gradlew.bat
index aec9973..ac1b06f 100644
--- a/test/testdata/SimpleperfExampleOfKotlin/gradlew.bat
+++ b/test/testdata/SimpleperfExampleKotlin/gradlew.bat
@@ -1,3 +1,19 @@
+@rem
+@rem Copyright 2015 the original author or authors.
+@rem
+@rem Licensed under the Apache License, Version 2.0 (the "License");
+@rem you may not use this file except in compliance with the License.
+@rem You may obtain a copy of the License at
+@rem
+@rem https://www.apache.org/licenses/LICENSE-2.0
+@rem
+@rem Unless required by applicable law or agreed to in writing, software
+@rem distributed under the License is distributed on an "AS IS" BASIS,
+@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+@rem See the License for the specific language governing permissions and
+@rem limitations under the License.
+@rem
+
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@@ -8,20 +24,23 @@
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
-@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
-set DEFAULT_JVM_OPTS=
-
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
+@rem Resolve any "." and ".." in APP_HOME to make it shorter.
+for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
+
+@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
+set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
+
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
-if "%ERRORLEVEL%" == "0" goto init
+if "%ERRORLEVEL%" == "0" goto execute
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -35,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
-if exist "%JAVA_EXE%" goto init
+if exist "%JAVA_EXE%" goto execute
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -45,34 +64,14 @@ echo location of your Java installation.
goto fail
-:init
-@rem Get command-line arguments, handling Windowz variants
-
-if not "%OS%" == "Windows_NT" goto win9xME_args
-if "%@eval[2+2]" == "4" goto 4NT_args
-
-:win9xME_args
-@rem Slurp the command line arguments.
-set CMD_LINE_ARGS=
-set _SKIP=2
-
-:win9xME_args_slurp
-if "x%~1" == "x" goto execute
-
-set CMD_LINE_ARGS=%*
-goto execute
-
-:4NT_args
-@rem Get arguments from the 4NT Shell from JP Software
-set CMD_LINE_ARGS=%$
-
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
+
@rem Execute Gradle
-"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
+"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end
@rem End local scope for the variables with windows NT shell
diff --git a/test/testdata/SimpleperfExampleKotlin/settings.gradle b/test/testdata/SimpleperfExampleKotlin/settings.gradle
new file mode 100644
index 0000000..82a9613
--- /dev/null
+++ b/test/testdata/SimpleperfExampleKotlin/settings.gradle
@@ -0,0 +1,16 @@
+pluginManagement {
+ repositories {
+ gradlePluginPortal()
+ google()
+ mavenCentral()
+ }
+}
+dependencyResolutionManagement {
+ repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
+ repositories {
+ google()
+ mavenCentral()
+ }
+}
+rootProject.name = "SimpleperfExampleKotlin"
+include ':app'
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/build.gradle b/test/testdata/SimpleperfExampleOfKotlin/app/build.gradle
deleted file mode 100644
index 132e64b..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/build.gradle
+++ /dev/null
@@ -1,37 +0,0 @@
-apply plugin: 'com.android.application'
-
-apply plugin: 'kotlin-android'
-
-apply plugin: 'kotlin-android-extensions'
-
-apply from: 'profiling.gradle'
-
-android {
- compileSdkVersion 25
- buildToolsVersion '27.0.3'
- defaultConfig {
- applicationId "com.example.simpleperf.simpleperfexampleofkotlin"
- minSdkVersion 15
- targetSdkVersion 26
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', {
- exclude group: 'com.android.support', module: 'support-annotations'
- })
- implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:$kotlin_version"
- implementation 'com.android.support:appcompat-v7:25.4.0'
- testImplementation 'junit:junit:4.12'
- implementation 'com.android.support.constraint:constraint-layout:1.0.2'
-}
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/build/outputs/apk/profiling/app-profiling.apk b/test/testdata/SimpleperfExampleOfKotlin/app/build/outputs/apk/profiling/app-profiling.apk
deleted file mode 100644
index 8b69bd4..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/build/outputs/apk/profiling/app-profiling.apk
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling.gradle b/test/testdata/SimpleperfExampleOfKotlin/app/profiling.gradle
deleted file mode 100644
index aa23c8d..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling.gradle
+++ /dev/null
@@ -1,58 +0,0 @@
-
-// Set when building only part of the abis in the apk.
-def abiFiltersForWrapScript = []
-
-android {
- buildTypes {
- profiling {
- initWith debug
- externalNativeBuild {
- cmake {
- // cmake Debug build type uses -O0, which makes the code slow.
- arguments "-DCMAKE_BUILD_TYPE=Release"
- }
- }
- packagingOptions {
-
- // Exclude wrap.sh for architectures not built.
- if (abiFiltersForWrapScript) {
- def exclude_abis = ["armeabi", "armeabi-v7a", "arm64-v8a",
- "x86", "x86_64", "mips", "mips64"]
- .findAll{ !(it in abiFiltersForWrapScript) }
- .collect{ "**/" + it + "/wrap.sh" }
- excludes += exclude_abis
- }
- }
-
- // Add lib/xxx/wrap.sh in the apk. This is to enable java profiling on Android O
- // devices.
- sourceSets {
- profiling {
- resources {
- srcDir {
- "profiling_apk_add_dir"
- }
- }
- }
- }
- }
- }
-}
-
-def writeWrapScriptToFullyCompileJavaApp(wrapFile) {
- wrapFile.withWriter { writer ->
- writer.write('#!/system/bin/sh\n')
- writer.write('\$@\n')
- }
-}
-
-task createProfilingApkAddDir {
- for (String abi : ["armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64", "mips", "mips64"]) {
- def dir = new File("app/profiling_apk_add_dir/lib/" + abi)
- dir.mkdirs()
- def wrapFile = new File(dir, "wrap.sh")
- writeWrapScriptToFullyCompileJavaApp(wrapFile)
- println "write file " + wrapFile.path
- }
-}
-
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh b/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh b/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi/wrap.sh b/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/armeabi/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips/wrap.sh b/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips64/wrap.sh b/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips64/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/mips64/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86/wrap.sh b/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86_64/wrap.sh b/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86_64/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/profiling_apk_add_dir/lib/x86_64/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/AndroidManifest.xml b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/AndroidManifest.xml
deleted file mode 100644
index 8cb4074..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,26 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.simpleperf.simpleperfexampleofkotlin">
-
- <application android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
-
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- <activity android:name=".SleepActivity"
- android:exported="true">
-
- </activity>
- </application>
-
-</manifest>
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/layout/activity_sleep.xml b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/layout/activity_sleep.xml
deleted file mode 100644
index 7043eb1..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/layout/activity_sleep.xml
+++ /dev/null
@@ -1,9 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
- xmlns:app="http://schemas.android.com/apk/res-auto"
- xmlns:tools="http://schemas.android.com/tools"
- android:layout_width="match_parent"
- android:layout_height="match_parent"
- tools:context="com.example.simpleperf.simpleperfexampleofkotlin.SleepActivity">
-
-</android.support.constraint.ConstraintLayout>
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index 5507303..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 8fab6a3..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index 6bc7fcd..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index 1eecc0e..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index ec87dce..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 05ca079..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 6f67f21..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 8bac0f2..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index 0327e13..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index bacd3e7..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/colors.xml b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/colors.xml
deleted file mode 100644
index 3ab3e9c..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <color name="colorPrimary">#3F51B5</color>
- <color name="colorPrimaryDark">#303F9F</color>
- <color name="colorAccent">#FF4081</color>
-</resources>
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/strings.xml b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/strings.xml
deleted file mode 100644
index 7972edf..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<resources>
- <string name="app_name">SimpleperfExampleOfKotlin</string>
-</resources>
diff --git a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/styles.xml b/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/styles.xml
deleted file mode 100644
index 5885930..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<resources>
-
- <!-- Base application theme. -->
- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
- <!-- Customize your theme here. -->
- <item name="colorPrimary">@color/colorPrimary</item>
- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
- <item name="colorAccent">@color/colorAccent</item>
- </style>
-
-</resources>
diff --git a/test/testdata/SimpleperfExampleOfKotlin/build.gradle b/test/testdata/SimpleperfExampleOfKotlin/build.gradle
deleted file mode 100644
index ba06bb9..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/build.gradle
+++ /dev/null
@@ -1,28 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
- ext.kotlin_version = '1.1.2-4'
- repositories {
- google()
- jcenter()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.2.0-alpha09'
- classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-allprojects {
- repositories {
- google()
- jcenter()
- mavenCentral()
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.jar b/test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 13372ae..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExampleOfKotlin/settings.gradle b/test/testdata/SimpleperfExampleOfKotlin/settings.gradle
deleted file mode 100644
index e7b4def..0000000
--- a/test/testdata/SimpleperfExampleOfKotlin/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include ':app'
diff --git a/test/testdata/SimpleperfExamplePureJava/app/build.gradle b/test/testdata/SimpleperfExamplePureJava/app/build.gradle
deleted file mode 100644
index 0dcc199..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/build.gradle
+++ /dev/null
@@ -1,32 +0,0 @@
-apply plugin: 'com.android.application'
-
-apply from: 'profiling.gradle'
-
-android {
- compileSdkVersion 25
- buildToolsVersion '27.0.3'
- defaultConfig {
- applicationId "com.example.simpleperf.simpleperfexamplepurejava"
- minSdkVersion 15
- targetSdkVersion 25
- versionCode 1
- versionName "1.0"
- testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
- }
- buildTypes {
- release {
- minifyEnabled false
- proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
- }
- }
-}
-
-dependencies {
- implementation fileTree(dir: 'libs', include: ['*.jar'])
- androidTestImplementation('androidx.test.espresso:espresso-core:3.1.1', {
- exclude group: 'com.android.support', module: 'support-annotations'
- })
- implementation 'com.android.support:appcompat-v7:25.3.1'
- implementation 'com.android.support.constraint:constraint-layout:1.0.2'
- testImplementation 'junit:junit:4.12'
-}
diff --git a/test/testdata/SimpleperfExamplePureJava/app/build/outputs/apk/profiling/app-profiling.apk b/test/testdata/SimpleperfExamplePureJava/app/build/outputs/apk/profiling/app-profiling.apk
deleted file mode 100644
index f7ead36..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/build/outputs/apk/profiling/app-profiling.apk
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling.gradle b/test/testdata/SimpleperfExamplePureJava/app/profiling.gradle
deleted file mode 100644
index aa23c8d..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling.gradle
+++ /dev/null
@@ -1,58 +0,0 @@
-
-// Set when building only part of the abis in the apk.
-def abiFiltersForWrapScript = []
-
-android {
- buildTypes {
- profiling {
- initWith debug
- externalNativeBuild {
- cmake {
- // cmake Debug build type uses -O0, which makes the code slow.
- arguments "-DCMAKE_BUILD_TYPE=Release"
- }
- }
- packagingOptions {
-
- // Exclude wrap.sh for architectures not built.
- if (abiFiltersForWrapScript) {
- def exclude_abis = ["armeabi", "armeabi-v7a", "arm64-v8a",
- "x86", "x86_64", "mips", "mips64"]
- .findAll{ !(it in abiFiltersForWrapScript) }
- .collect{ "**/" + it + "/wrap.sh" }
- excludes += exclude_abis
- }
- }
-
- // Add lib/xxx/wrap.sh in the apk. This is to enable java profiling on Android O
- // devices.
- sourceSets {
- profiling {
- resources {
- srcDir {
- "profiling_apk_add_dir"
- }
- }
- }
- }
- }
- }
-}
-
-def writeWrapScriptToFullyCompileJavaApp(wrapFile) {
- wrapFile.withWriter { writer ->
- writer.write('#!/system/bin/sh\n')
- writer.write('\$@\n')
- }
-}
-
-task createProfilingApkAddDir {
- for (String abi : ["armeabi", "armeabi-v7a", "arm64-v8a", "x86", "x86_64", "mips", "mips64"]) {
- def dir = new File("app/profiling_apk_add_dir/lib/" + abi)
- dir.mkdirs()
- def wrapFile = new File(dir, "wrap.sh")
- writeWrapScriptToFullyCompileJavaApp(wrapFile)
- println "write file " + wrapFile.path
- }
-}
-
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh b/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/arm64-v8a/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh b/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi-v7a/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi/wrap.sh b/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/armeabi/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips/wrap.sh b/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips64/wrap.sh b/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips64/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/mips64/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86/wrap.sh b/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86_64/wrap.sh b/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86_64/wrap.sh
deleted file mode 100644
index 047ea6f..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/profiling_apk_add_dir/lib/x86_64/wrap.sh
+++ /dev/null
@@ -1,2 +0,0 @@
-#!/system/bin/sh
-$@
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/androidTest/java/com/example/simpleperf/simpleperfexamplepurejava/ExampleInstrumentedTest.java b/test/testdata/SimpleperfExamplePureJava/app/src/androidTest/java/com/example/simpleperf/simpleperfexamplepurejava/ExampleInstrumentedTest.java
deleted file mode 100644
index cb91806..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/androidTest/java/com/example/simpleperf/simpleperfexamplepurejava/ExampleInstrumentedTest.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package com.example.simpleperf.simpleperfexamplepurejava;
-
-import static org.junit.Assert.*;
-
-import android.content.Context;
-
-import androidx.test.InstrumentationRegistry;
-import androidx.test.runner.AndroidJUnit4;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-
-/**
- * Instrumentation test, which will execute on an Android device.
- *
- * @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
- */
-@RunWith(AndroidJUnit4.class)
-public class ExampleInstrumentedTest {
- @Test
- public void useAppContext() throws Exception {
- // Context of the app under test.
- Context appContext = InstrumentationRegistry.getTargetContext();
-
- assertEquals("com.example.simpleperf.simpleperfexamplepurejava", appContext.getPackageName());
- }
-}
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/AndroidManifest.xml b/test/testdata/SimpleperfExamplePureJava/app/src/main/AndroidManifest.xml
deleted file mode 100644
index ee42fea..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/AndroidManifest.xml
+++ /dev/null
@@ -1,29 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-
-<manifest xmlns:android="http://schemas.android.com/apk/res/android"
- package="com.example.simpleperf.simpleperfexamplepurejava">
-
- <application android:allowBackup="true"
- android:icon="@mipmap/ic_launcher"
- android:label="@string/app_name"
- android:roundIcon="@mipmap/ic_launcher_round"
- android:supportsRtl="true"
- android:theme="@style/AppTheme">
- <activity android:name=".MainActivity"
- android:exported="true">
- <intent-filter>
- <action android:name="android.intent.action.MAIN"/>
-
- <category android:name="android.intent.category.LAUNCHER"/>
- </intent-filter>
- </activity>
- <activity android:name=".SleepActivity"
- android:exported="true"/>
- <activity android:name=".MultiProcessActivity"
- android:exported="true"/>
-
- <service android:name=".MultiProcessService"
- android:process=":multiprocess_service"/>
- </application>
-
-</manifest>
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher.png
deleted file mode 100644
index cde69bc..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
deleted file mode 100644
index 9a078e3..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher.png
deleted file mode 100644
index c133a0c..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
deleted file mode 100644
index efc028a..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher.png
deleted file mode 100644
index bfa42f0..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
deleted file mode 100644
index 3af2608..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
deleted file mode 100644
index 324e72c..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
deleted file mode 100644
index 9bec2e6..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
deleted file mode 100644
index aee44e1..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
deleted file mode 100644
index 34947cd..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/colors.xml b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/colors.xml
deleted file mode 100644
index 3ab3e9c..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/colors.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <color name="colorPrimary">#3F51B5</color>
- <color name="colorPrimaryDark">#303F9F</color>
- <color name="colorAccent">#FF4081</color>
-</resources>
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/strings.xml b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/strings.xml
deleted file mode 100644
index 9cb14df..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/strings.xml
+++ /dev/null
@@ -1,3 +0,0 @@
-<resources>
- <string name="app_name">SimpleperfExamplePureJava</string>
-</resources>
diff --git a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/styles.xml b/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/styles.xml
deleted file mode 100644
index 5885930..0000000
--- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/values/styles.xml
+++ /dev/null
@@ -1,11 +0,0 @@
-<resources>
-
- <!-- Base application theme. -->
- <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
- <!-- Customize your theme here. -->
- <item name="colorPrimary">@color/colorPrimary</item>
- <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
- <item name="colorAccent">@color/colorAccent</item>
- </style>
-
-</resources>
diff --git a/test/testdata/SimpleperfExamplePureJava/build.gradle b/test/testdata/SimpleperfExamplePureJava/build.gradle
deleted file mode 100644
index 5af83b4..0000000
--- a/test/testdata/SimpleperfExamplePureJava/build.gradle
+++ /dev/null
@@ -1,25 +0,0 @@
-// Top-level build file where you can add configuration options common to all sub-projects/modules.
-
-buildscript {
- repositories {
- jcenter()
- google()
- }
- dependencies {
- classpath 'com.android.tools.build:gradle:3.2.0-alpha09'
-
- // NOTE: Do not place your application dependencies here; they belong
- // in the individual module build.gradle files
- }
-}
-
-allprojects {
- repositories {
- google()
- jcenter()
- }
-}
-
-task clean(type: Delete) {
- delete rootProject.buildDir
-}
diff --git a/test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.jar b/test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.jar
deleted file mode 100644
index 13372ae..0000000
--- a/test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.jar
+++ /dev/null
Binary files differ
diff --git a/test/testdata/SimpleperfExamplePureJava/settings.gradle b/test/testdata/SimpleperfExamplePureJava/settings.gradle
deleted file mode 100644
index e7b4def..0000000
--- a/test/testdata/SimpleperfExamplePureJava/settings.gradle
+++ /dev/null
@@ -1 +0,0 @@
-include ':app'
diff --git a/test/testdata/etm/perf.data b/test/testdata/etm/perf_etm.data
index 595443d..595443d 100644
--- a/test/testdata/etm/perf.data
+++ b/test/testdata/etm/perf_etm.data
Binary files differ
diff --git a/test/tools_test.py b/test/tools_test.py
index 83ccf48..9c9fbd7 100644
--- a/test/tools_test.py
+++ b/test/tools_test.py
@@ -298,7 +298,7 @@ system/extras/simpleperf/runtest/two_functions.cpp:21:3
def test_source_file_searcher(self):
searcher = SourceFileSearcher(
[TestHelper.testdata_path('SimpleperfExampleCpp'),
- TestHelper.testdata_path('SimpleperfExampleOfKotlin')])
+ TestHelper.testdata_path('SimpleperfExampleKotlin')])
def format_path(path):
return os.path.join(TestHelper.testdata_dir, path.replace('/', os.sep))
@@ -317,8 +317,9 @@ system/extras/simpleperf/runtest/two_functions.cpp:21:3
searcher.get_real_path('cpp/MainActivity.java'))
# Find a Kotlin file.
self.assertEqual(
- format_path('SimpleperfExampleOfKotlin/app/src/main/java/com/example/' +
- 'simpleperf/simpleperfexampleofkotlin/MainActivity.kt'),
+ format_path(
+ 'SimpleperfExampleKotlin/app/src/main/java/simpleperf/example/kotlin/' +
+ 'MainActivity.kt'),
searcher.get_real_path('MainActivity.kt'))
def test_is_elf_file(self):
@@ -340,18 +341,22 @@ system/extras/simpleperf/runtest/two_functions.cpp:21:3
build_id = readelf.get_build_id(elf_path)
self.assertGreater(len(build_id), 0)
binary_cache_builder.binaries[elf_name] = build_id
+
+ filename_without_build_id = '/data/symfs_without_build_id/elf'
+ binary_cache_builder.binaries[filename_without_build_id] = ''
+
binary_cache_builder.copy_binaries_from_symfs_dirs([TestHelper.testdata_dir])
binary_cache_builder.create_build_id_list()
# Test BinaryFinder.
- path_in_binary_cache = Path(binary_cache_builder.binary_cache_dir, elf_name)
+ path_in_binary_cache = binary_cache_builder.find_path_in_cache(elf_name)
binary_finder = BinaryFinder(binary_cache_builder.binary_cache_dir, readelf)
# Find binary using build id.
path = binary_finder.find_binary('[not_exist_file]', build_id)
self.assertEqual(path, path_in_binary_cache)
# Find binary using path.
- path = binary_finder.find_binary('/' + elf_name, None)
- self.assertEqual(path, path_in_binary_cache)
+ path = binary_finder.find_binary(filename_without_build_id, None)
+ self.assertIsNotNone(path)
# Find binary using absolute path.
path = binary_finder.find_binary(str(path_in_binary_cache), None)
self.assertEqual(path, path_in_binary_cache)