抽样调用堆栈

调用堆栈有助于识别 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