diff options
author | Yabin Cui <yabinc@google.com> | 2023-03-23 10:25:24 -0700 |
---|---|---|
committer | Yabin Cui <yabinc@google.com> | 2023-03-23 14:34:17 -0700 |
commit | 372f7a2939c2c609f5117de70ec45fedba1f7017 (patch) | |
tree | 5ac3303a82e35b03b8fb1ceef8fbeb06685992db | |
parent | 6d625d0eb9c0602532a52e8eb87363f2ea6da73e (diff) | |
download | simpleperf-ndk-r26-release.tar.gz |
Update NDK prebuilts to build 9796343.ndk-r26dndk-r26cndk-r26bndk-r26-rc1ndk-r26-beta1ndk-r26ndk-r26-release
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
185 files changed, 3004 insertions, 1956 deletions
@@ -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 Binary files differindex e642518..bf6b056 100755 --- a/bin/android/arm/simpleperf +++ b/bin/android/arm/simpleperf diff --git a/bin/android/arm64/simpleperf b/bin/android/arm64/simpleperf Binary files differindex c3f4451..a81a14b 100755 --- a/bin/android/arm64/simpleperf +++ b/bin/android/arm64/simpleperf diff --git a/bin/android/x86/simpleperf b/bin/android/x86/simpleperf Binary files differindex a5e7811..32fc919 100755 --- a/bin/android/x86/simpleperf +++ b/bin/android/x86/simpleperf diff --git a/bin/android/x86_64/simpleperf b/bin/android/x86_64/simpleperf Binary files differindex 5f2ac5c..cb7f7bf 100755 --- a/bin/android/x86_64/simpleperf +++ b/bin/android/x86_64/simpleperf diff --git a/bin/darwin/x86_64/libsimpleperf_report.dylib b/bin/darwin/x86_64/libsimpleperf_report.dylib Binary files differindex 07e22c3..cd829eb 100755 --- a/bin/darwin/x86_64/libsimpleperf_report.dylib +++ b/bin/darwin/x86_64/libsimpleperf_report.dylib diff --git a/bin/darwin/x86_64/simpleperf b/bin/darwin/x86_64/simpleperf Binary files differindex c8ead13..4a4396d 100755 --- a/bin/darwin/x86_64/simpleperf +++ b/bin/darwin/x86_64/simpleperf diff --git a/bin/linux/x86_64/libsimpleperf_report.so b/bin/linux/x86_64/libsimpleperf_report.so Binary files differindex 0b2b6a1..1f9f13f 100755 --- a/bin/linux/x86_64/libsimpleperf_report.so +++ b/bin/linux/x86_64/libsimpleperf_report.so diff --git a/bin/linux/x86_64/simpleperf b/bin/linux/x86_64/simpleperf Binary files differindex 7d5027d..d8dd840 100755 --- a/bin/linux/x86_64/simpleperf +++ b/bin/linux/x86_64/simpleperf diff --git a/bin/windows/x86_64/libsimpleperf_report.dll b/bin/windows/x86_64/libsimpleperf_report.dll Binary files differindex 11b8c50..0e9e289 100755 --- a/bin/windows/x86_64/libsimpleperf_report.dll +++ b/bin/windows/x86_64/libsimpleperf_report.dll diff --git a/bin/windows/x86_64/simpleperf.exe b/bin/windows/x86_64/simpleperf.exe Binary files differindex 60091fa..1d9a97e 100755 --- a/bin/windows/x86_64/simpleperf.exe +++ b/bin/windows/x86_64/simpleperf.exe 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`.') @@ -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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 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 Binary files differindex 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 diff --git a/test/testdata/SimpleperfExampleCpp/app/release/app-release.apk b/test/testdata/SimpleperfExampleCpp/app/release/app-release.apk Binary files differnew file mode 100644 index 0000000..01e0e5a --- /dev/null +++ b/test/testdata/SimpleperfExampleCpp/app/release/app-release.apk 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 Binary files differnew file mode 100644 index 0000000..dcb1a6d --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/build/outputs/apk/debug/app-debug.apk 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 Binary files differnew file mode 100644 index 0000000..87b46c2 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/release/app-release.apk 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 Binary files differnew file mode 100644 index 0000000..c209e78 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..b2dfe3d --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..4f0f1d6 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..62b611d --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..948a307 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..1b9a695 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..28d4b77 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..9287f50 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..aa7d642 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..9126ae3 --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..e708b1c --- /dev/null +++ b/test/testdata/SimpleperfExampleJava/gradle/wrapper/gradle-wrapper.jar 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 Binary files differnew file mode 100644 index 0000000..ffb872e --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/build/outputs/apk/debug/app-debug.apk 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 Binary files differnew file mode 100644 index 0000000..517a442 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/release/app-release.apk 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 Binary files differnew file mode 100644 index 0000000..c209e78 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..b2dfe3d --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..4f0f1d6 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..62b611d --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..948a307 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..1b9a695 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..28d4b77 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..9287f50 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..aa7d642 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp 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 Binary files differnew file mode 100644 index 0000000..9126ae3 --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp 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 Binary files differnew file mode 100644 index 0000000..e708b1c --- /dev/null +++ b/test/testdata/SimpleperfExampleKotlin/gradle/wrapper/gradle-wrapper.jar 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 Binary files differdeleted file mode 100644 index 8b69bd4..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/build/outputs/apk/profiling/app-profiling.apk +++ /dev/null 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 Binary files differdeleted file mode 100644 index 5507303..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8fab6a3..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6bc7fcd..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 1eecc0e..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index ec87dce..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 05ca079..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 6f67f21..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 8bac0f2..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 0327e13..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index bacd3e7..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 13372ae..0000000 --- a/test/testdata/SimpleperfExampleOfKotlin/gradle/wrapper/gradle-wrapper.jar +++ /dev/null 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 Binary files differdeleted file mode 100644 index f7ead36..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/build/outputs/apk/profiling/app-profiling.apk +++ /dev/null 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 Binary files differdeleted file mode 100644 index cde69bc..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9a078e3..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index c133a0c..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index efc028a..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index bfa42f0..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 3af2608..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 324e72c..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 9bec2e6..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index aee44e1..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 34947cd..0000000 --- a/test/testdata/SimpleperfExamplePureJava/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +++ /dev/null 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 Binary files differdeleted file mode 100644 index 13372ae..0000000 --- a/test/testdata/SimpleperfExamplePureJava/gradle/wrapper/gradle-wrapper.jar +++ /dev/null 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 Binary files differindex 595443d..595443d 100644 --- a/test/testdata/etm/perf.data +++ b/test/testdata/etm/perf_etm.data 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) |