调用栈采样

调用栈可用于识别CPU 热点,即执行时间较长的代码段。调用栈可帮助您了解已执行代码的哪一部分以及调用它的原因。

调用栈采样概述

要进行调用栈采样,请从 Android Studio Profiler 的主页选项卡中选择查找 CPU 热点(调用栈采样)任务。解析录制内容后,您会看到以下可视化内容

为了补充CPU 使用率交互时间线线程部分显示了您的应用和系统执行的每个调用的帧。以下是一些关于导航调用栈采样的提示

  • 展开感兴趣的线程,并使用键盘快捷键 导航堆栈帧。点击堆栈帧可获取有关事件和分析窗格中相关调用的详细信息。
  • 要筛选特定类型的堆栈帧,请点击折叠帧并选中要隐藏的帧类型。折叠帧会将其从线程分析部分中移除。根据您的调查,您可能需要折叠来自 Java 虚拟机(例如android::AndroidRuntime::startart::{...})和系统内核(例如[kernel.kallsyms]+{offset})的帧。这通常对应于折叠与[kernel.kallsyms]/apex//system/*相关的帧。

由于 Java/Kotlin 程序通常通过 Java 虚拟机执行,因此当 Android Studio 收集 Java/Kotlin 程序的调用栈时,调用栈通常不仅包括 Java/Kotlin 代码,还包括运行程序本身以及程序与系统和硬件交互所需的原生代码。

  • 要跳转到与堆栈帧关联的源代码,请右键点击该帧,然后点击跳转到源代码
  • 要突出显示与事件表中事件关联的堆栈帧,请点击该事件。

有关其他可视化内容的信息,请参阅记录系统跟踪图表术语表

使用命令行的原生代码示例

在内部,Android Studio 使用simpleperf来跟踪应用程序的原生代码。如果您想指定 simpleperf 的其他选项,例如采样特定设备 CPU 或以高精度指定采样持续时间,您可以使用命令行中的 simpleperf