commit | ddeb3b111841af52e77f2744b8f360f56be291fa | [log] [tgz] |
---|---|---|
author | Ryan <rsavitski@google.com> | Mon Apr 12 15:55:17 2021 +0100 |
committer | Ryan <rsavitski@google.com> | Mon Apr 12 15:55:17 2021 +0100 |
tree | bf556002ed4779fd7f263c557e2cf5e1a3a344e6 | |
parent | 9f85729fdbafefa1e1caec3775c648a5f6a25c7d [diff] |
tp: experimental dynamic table for callstack annotation This patch introduces experimental_annotated_callstack, which, given a leaf callsite id of a callstack, reconstructs the callstack, and adds per-frame annotations. The annotations are currently Android-specific: interp/jit/aot ART mode for managed frames, and "common-frame" for ART implementation details. An annotation for a given callsite should be stable, in other words, depending only on the path from the root. Annotations are derived directly from the frame/mapping names. Short version: * art/jit/aot is based directly on the mapping * once a managed frame is seen in a callstack, all libart frames below it get tagged as "common-frame", except the special case where the ART frame is the target of a JNI trampoline (managed->native). In these cases, the ART frame is a native implementation of a managed library method. This "next frame" logic is why the annotations require considering more than just a single frame. A lot of this logic could be moved into mapping/callsite tables, but I wish to retain the flexibility for iteration for now. The table is based on experimental_ancestor_stack_profile_callsite. One notable difference is that the new table also returns the queried frame. Change-Id: I53d00f384a26111183b6bf03c79c939a6c5ef844
Perfetto is a production-grade open-source stack for performance instrumentation and trace analysis. It offers services and libraries and for recording system-level and app-level traces, native + java heap profiling, a library for analyzing traces using SQL and a web-based UI to visualize and explore multi-GB traces.
See https://perfetto.dev/docs or the /docs/ directory for documentation.