| build 11421629 (Feb 8, 2024) | |
| inject command: | |
| Support converting LBR profiles to AutoFDO format | |
| list command: | |
| Use event_table.json to config raw events supported on different cpu models, and read | |
| /proc/cpuinfo to know cpu models on device. As a result, we can precisely report raw | |
| events supported on different cpu cores. | |
| record/stat command: | |
| Support monitoring different events on different cores using --cpu | |
| Use thousand groups when reporting sample counts | |
| record command: | |
| Add --delay to delay recording samples | |
| Add --record-timestamp and --record-cycles to record timestamps and cpu-cycles with ETM data | |
| Add --cycle-threshold for ETM cycle count packets | |
| Support reading symbols from DEX files in memory | |
| Support starting simpleperf at early-init when boot profiling, as in android_platform_profiling.md | |
| stat command: | |
| Add --tp-filter and --kprobe to improve tracepoint event counting | |
| app_profiler.py: | |
| Add app versioncode in record file | |
| Add --launch to start an app with its package name | |
| report scripts: | |
| Add --cpu to filter samples based on CPUs | |
| Add ipc.py to capture instructions per cycle of the system | |
| Support profiles generated by the report-sample command | |
| Add sample_filter.py to split large record files | |
| gecko_profile_generator.py: | |
| Add --percpu-samples to show samples grouped by CPUs | |
| report_html.py: | |
| Support parsing kernel disassembly in scripts | |
| Speed up generating disassembly | |
| Sort functions by names in flamegraph | |
| build 10661963 (Aug 16, 2023) | |
| report-sample command: Remove small stack gaps to get a smoother view in Stack Chart. | |
| Use prebult libsimpleperf_readelf (provided by Android clang prebuilts) for reading ELF files. | |
| report_html.py: Speed up disassembling many functions in a binary. | |
| build 10306210 (Jun 12, 2023) | |
| record cmd: Add --decode-etm to decode ETM data while recording. | |
| It saves the space storing raw ETM data. | |
| Store lost/cut record info in recording file. | |
| Report lost samples in kernel space and user space. | |
| inject cmd: Accept missing aux data. | |
| Add build id in AutoFDO output. | |
| gecko_profile_generatory.py: color off-cpu frames blue and jit app cache frames green. | |
| 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. | |
| stat cmd: Update to work with CPU cores having different numbers of PMU counters. | |
| doc: Update collect_etm_data_for_autofdo.md. | |
| build 8355685 (March 25, 2022) | |
| 1. Add doc for getting boot-time profile, add doc view_the_profile.md. | |
| 2. Share report lib options between scripts. | |
| build 8121221 (Jan 26, 2022) | |
| 1. On Android >= 13, allow an app profiling itself even after device reboot. | |
| The permission expiration time can be set by --days in api_profiler.py. | |
| 2. Improve --trace-offcpu in record cmd to support multiple report modes: pure on cpu samples, | |
| pure on-cpu samples, or both on-cpu and off-cpu samples. | |
| 3. Add --add-counter in record cmd to add additional event counts in samples. | |
| 4. Add --filter-file in report cmds and scripts to filter samples based on timestamps. | |
| 5. On Android >= 13, add boot-record cmd to record boot-time profiles on userdebug/eng devices. | |
| 6. For AutoFDO/ETM support, support multiple input files in inject cmd to speed up processing and | |
| combine output. | |
| build 7848450 | |
| record cmd: | |
| Add support for new perf ETE files. | |
| report cmd: | |
| Extend --percent-limit to report entries. | |
| scripts: | |
| Add gecko_profile_generator.py, which generates reports for firefox profiler. | |
| Add stackcollapse.py, which generates reports to Folded Stacks. | |
| Improve support of proguard mapping file. | |
| Improve logging. | |
| pprof_proto_generator.py: | |
| Add thread, threadpool, pid, tid labels. | |
| Set units of common events. | |
| Add comments. | |
| app_profiler.py: Kill app process for current user. | |
| report_sample.py: add --header and --comm options. | |
| doc: | |
| Add introduction slide. | |
| Use auto-generated tables of contents. | |
| test: Fix flaky tests. | |
| build 7649958 | |
| Build arm simpleperf for armv7-neon instead of armv8. | |
| Support JIT method name with signature. | |
| Doc improvement. | |
| build 7549687 | |
| Use multithreading to speed up line annotation. | |
| Add doc/debug_dwarf_unwinding.md. | |
| Add doc/collect_etm_data_for_autofdo.md. | |
| Move to file2 feature section. | |
| build 7414587 | |
| Drop python2 support, scripts are tested on python3.8 and python3.9. | |
| Refactor debug unwinding: | |
| 1. Add --keep-failed-unwinding-result and --keep-failed-unwinding-stack options | |
| in record cmd, to generate additional records for failed unwinding cases. | |
| 2. Refactor debug-unwind cmd and debug_unwind_reporter.py to report failed | |
| unwinding cases. | |
| Support recording and converting kernel ETM data in record cmd and inject cmd. | |
| Support using proguard mapping file for reporting. | |
| Support vmlinux file when building binary_cache. | |
| Support showing disassembly of vmlinux file in report_html.py. Use multithreading | |
| to speedup disassembling. | |
| Add app_type, android_sdk_version and android_build_type in meta_info of recording file. | |
| ndk r23 | |
| build 7173446 | |
| Add visualization tool purgatorio. | |
| Switch to llvm-objdump and llvm-readelf. | |
| build 7119240 | |
| Reduce prepare recording time. | |
| Add --kprobe option in record cmd. | |
| Add --cpu option in report cmd. | |
| Add -i option in dump cmd. | |
| Add --exclude-perf option in inject cmd. | |
| Add merge cmd to merge recording files recorded in the same environment using | |
| the same event types. | |
| Add monitor cmd to record and report events in real time. | |
| Fix a few bugs about symbolization of kernel and kernel modules. | |
| Support parsing kernel etm data in inject cmd. | |
| Add --show-execution-type option in report-sample cmd. | |
| Don't hide art jni methods in report_lib and report-sample cmd. | |
| build 6859468 | |
| Add --csv option in report cmd. | |
| Add --sort option in stat cmd. | |
| Add --tp-filter option to filter tracepoint events in record cmd. | |
| Add --addr-filter to filter etm recording in record cmd. | |
| Fix finding symbols from kernel modules. | |
| Better ART JIT support (dump jit symfiles to a single file instead of multiple | |
| temporary files). | |
| Support generic JIT symbols from symbol map file. See doc/jit_symbols.md. | |
| ndk r22 | |
| build 6401870 | |
| Support multiple record files in pprof_proto_generator.py. | |
| In stat cmd, add --per-thread and --per-core options to report per thread and per core. | |
| In record cmd, add --exclude-perf option to exclude simpleperf samples in system wide | |
| recording. | |
| In inject cmd, support decoding coresight etm data to branch list data in protobuf format. | |
| Fix and add doc for app_api, which can control simpleperf recording in app code. | |
| Support pmu event types: | |
| list supported pmu events via `simpleperf list pmu`. | |
| record/stat pmu events via options like -e armv8_pmuv3/cpu_cycles/. | |
| Switch to llvm-objdump. | |
| Add doc for line and disassembly annotation in README.md. | |
| Add doc for profiling profileable release app on Android >= Q. | |
| Remove dependency on libncurses. | |
| ndk r21 | |
| In record cmd, support recording coresight etm data (via -e cs-etm option). | |
| Add inject cmd to decode coresight etm data. | |
| Add doc for downloading unstripped libraries on device. | |
| Fix scripts for using unstripped libraries without build ids for reporting. | |
| Switch to llvm-symbolizer. | |
| Add app_api and api_profiler.py, which can control simpleperf recording in app code. | |
| Fix pprof_proto_generator.py to support line and disassembly annotation via pprof. | |
| ndk r20 | |
| Skipped. | |
| ndk r19 | |
| Fix report-sample command on Windows. | |
| ndk r18 | |
| Improve support of profiling JITed/interpreted Java code on Android >= P: | |
| 1) Support JITed/interpreted Java code in system wide recording. | |
| 2) Support dex files extracted to memory. | |
| 3) Fix some bugs and improve inefficient code. | |
| Improve record command: | |
| 1) Add a user space buffer and a high priority record reading thread to reduce sampe lost rate. | |
| 2) Record full process name instead of only the last 16 bytes. | |
| Improve report_html.py: | |
| 1) Generate flamegraphs in Javascript code instead of using inferno, thus | |
| reducing the time used to generate and load report. | |
| 2) Use bootstrap 4 to format UI. | |
| 3) Use progressbar to show progress of loading contents. | |
| 4) Add --binary_filter option to only annotate selected binaries. | |
| Export tracing data in simpleperf_report_lib.py. | |
| Test python scripts with both python2 and python3. | |
| Add document for using simpleperf in Android platform profiling. | |
| ndk r17 | |
| (release) | |
| Use new Android unwinder, which can unwind for archs different from build. | |
| Support profiling interpreted and JITed java code on Android >= P. | |
| Refactor app_profiler.py: improve option interface, simplify profiling from launch, | |
| and improve native lib downloading. | |
| Fix ndk issues 638, 644, 499, 493. | |
| Add debug-unwind cmd and script to debug unwinding. | |
| Update document, including the way using wrap.sh to profile released apk. | |
| (beta 1) | |
| Add report_html.py, reporting profiling result in html interface. | |
| Improve inferno. | |
| Refactor document. | |
| Provide more complete dwarf based call graphs. | |
| ndk r16 | |
| Add inferno, a flamegraph generator. | |
| Add --trace-offcpu option in simpleperf record command and app_profiler.py to trace offcpu time. | |
| Add --app option in simpleperf record command to remove need of using run-as. | |
| Add --profile_from_launch option in app_profiler.py to start recording from Activity launch time. | |
| Configure scripts from command lines, remove config files. | |
| Wrap simpleperf report command with report.py, in which GUI mode is enabled with --gui option. | |
| Add release tests for scripts. | |
| ndk r15 | |
| Add three Android Studio project examples, show how to build optimized native libs containing | |
| debug info, show how to fully compile app on Android O. | |
| Add symbol info in perf.data by default, no need to add --dump-symbols in simpleperf record command. | |
| Report brief call-graph in simpleperf report command. | |
| Support raw cpu pmu events. | |
| ndk r14 | |
| Add app_profiler.py to help recording profiling data. | |
| Add annotate.py to annotate source code. | |
| Add simpleperf_report_lib.py interface to support extracting samples from perf.data. | |
| Release simpleperf binaries on host to support reporting on host. | |
| ndk r13 | |
| Release simpleperf binaries on device. | |
| Support recording and reporting stack frame based callgraphs and dwarf based callgraphs. | |
| Add simpleperf_report.py to show callgraphs in GUI. |