CPU 分析器视图允许您从 Dart 或 Flutter 应用程序录制和分析会话。分析器可以帮助您解决性能问题或总体了解应用程序的 CPU 活动。Dart VM 收集 CPU 样本(CPU 调用堆栈在单个时间点的快照),并将数据发送到 DevTools 进行可视化。通过聚合大量 CPU 样本,分析器可以帮助您了解 CPU 大部分时间都花费在哪里。

CPU 分析器

#

通过点击录制开始录制 CPU 配置文件。录制完成后,点击停止。此时,CPU 分析数据将从 VM 中提取,并显示在分析器视图(调用树、自下而上、方法表和火焰图)中。

要加载所有可用的 CPU 样本而无需手动录制和停止,您可以点击加载所有 CPU 样本,这将提取 VM 已录制并存储在其环形缓冲区中的所有 CPU 样本,然后将这些 CPU 样本显示在分析器视图中。

自下而上

#

此表提供了 CPU 配置文件的自下而上表示。这意味着自下而上表中的每个顶级方法或根,实际上是一个或多个 CPU 样本的调用堆栈中的顶部方法。换句话说,自下而上表中的每个顶级方法都是自上而下表(调用树)中的叶节点。在此表中,方法可以展开以显示其调用者

此视图有助于识别 CPU 配置文件中耗费资源较多的方法。当此表中的根节点具有较高的自身时间时,这意味着此配置文件中的许多 CPU 样本以该方法位于调用堆栈的顶部而结束。

自下而上视图的屏幕截图 请参阅下面的指南部分,了解如何启用此图像中显示的蓝色和绿色垂直线。

工具提示可以帮助您理解每列中的值

总时间
对于自下而上树中的顶级方法(至少一个 CPU 样本顶部处的堆栈帧),这是该方法执行自身代码以及它调用的任何方法的代码所花费的时间。
自身时间
对于自下而上树中的顶级方法(至少一个 CPU 样本顶部处的堆栈帧),这是该方法仅执行自身代码所花费的时间。

对于自下而上树中的子方法(调用者),这是通过子方法(调用者)调用顶级方法(被调用者)时的自身时间。

表元素(自身时间) 自下而上表的屏幕截图

调用树

#

此表提供了 CPU 配置文件的自上而下表示。这意味着调用树中的每个顶级方法是一个或多个 CPU 样本的根。在此表中,方法可以展开以显示其被调用者

此视图有助于识别 CPU 配置文件中耗费资源较多的路径。当此表中的根节点具有较高的时间时,这意味着此配置文件中的许多 CPU 样本以该方法位于调用堆栈的底部而开始。

调用树表的屏幕截图 请参阅下面的指南部分,了解如何启用此图像中显示的蓝色和绿色垂直线。

工具提示可以帮助您理解每列中的值

总时间
方法执行自身代码以及其调用的任何方法代码所花费的时间。
自身时间
方法仅执行自身代码所花费的时间。

方法表

#

方法表提供了 CPU 配置文件中包含的每个方法的 CPU 统计信息。在左侧的表中,列出了所有可用方法及其时间和自身时间。

时间是方法在调用堆栈中任何位置所花费的总时间,换句话说,是方法执行自身代码及其调用的任何方法代码所花费的时间。

自身时间是方法在调用堆栈顶部所花费的总时间,换句话说,是方法仅执行自身代码所花费的时间。

Screenshot of a call tree table

从左侧表中选择一个方法将显示该方法的调用图。调用图显示了方法的调用者和被调用者以及它们各自的调用者/被调用者百分比。

火焰图

#

火焰图视图是调用树的图形表示。这是 CPU 配置文件的自上而下视图,因此在此图中,最上面的方法调用其下面的方法。每个火焰图元素的宽度表示方法在调用堆栈上花费的时间量。

与调用树类似,此视图有助于识别 CPU 配置文件中耗费资源较多的路径。

Screenshot of a flame chart

帮助菜单可以通过点击搜索栏旁边的?图标打开,提供有关如何在图表中导航和缩放以及颜色编码图例的信息。 火焰图帮助的屏幕截图

CPU 采样率

#

DevTools 设置了 VM 收集 CPU 样本的速率:1 个样本 / 250 微秒(μs)。这在 CPU 分析器页面上默认选择为“CPU 采样率:中”。此速率可以使用页面顶部的选择器进行修改。

Screenshot of cpu sampling rate menu

采样率分别为 1,000 赫兹、4,000 赫兹和 20,000 赫兹。了解修改此设置的利弊非常重要。

更高采样率录制的配置文件会生成更精细的 CPU 配置文件,包含更多样本。这可能会影响应用程序的性能,因为 VM 会更频繁地被中断以收集样本。这也会导致 VM 的 CPU 样本缓冲区更快溢出。VM 存储 CPU 样本信息的空间有限。在更高的采样率下,空间会比使用更低采样率时更快地填满并开始溢出。这意味着您可能无法访问录制配置文件开始时的 CPU 样本,具体取决于录制期间缓冲区是否溢出。

以较低采样率录制的配置文件会生成更粗略的 CPU 配置文件,包含较少样本。这对应用程序性能的影响较小,但您可能无法获得有关 CPU 在配置文件期间所做事情的较少信息。VM 的样本缓冲区也填充得更慢,因此您可以查看应用程序运行时更长时间的 CPU 样本。这意味着您有更好的机会查看录制配置文件开始时的 CPU 样本。

筛选

#

查看 CPU 配置文件时,您可以按库、方法名称或 UserTag 筛选数据。

Screenshot of filter by tag menu

指南

#

查看调用树或自下而上视图时,有时树可能非常深。为了帮助查看深层树中的父子关系,请启用显示辅助线选项。这会在树中的父子之间添加垂直辅助线。

Screenshot of display options

其他资源

#

要了解如何使用 DevTools 分析计算密集型 Mandelbrot 应用程序的 CPU 使用情况,请查看一份指导性CPU 分析器视图教程。此外,了解当应用程序使用 Isolates 进行并行计算时如何分析 CPU 使用情况。