Skip to main content

使用 CPU 分析器视图

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 统计信息。在左侧的表中,列出了所有可用方法及其 时间和 自身 时间。

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

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

调用树表的屏幕截图

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

火焰图

#

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

与调用树一样,此视图也用于识别 CPU 配置文件中昂贵的路径。

火焰图的屏幕截图

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

CPU 采样率

#

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

cpu 采样率菜单的屏幕截图

采样率分别为 1,000 Hz、4,000 Hz 和 20,000 Hz。了解修改此设置的权衡很重要。

使用 更高 采样率记录的配置文件会产生更细粒度的 CPU 配置文件,其中包含更多样本。这可能会影响应用程序的性能,因为 VM 更频繁地被中断以收集样本。这还会导致 VM 的 CPU 样本缓冲区更快溢出。VM 的空间有限,可以存储 CPU 样本信息。在更高的采样率下,空间很快就会填满并开始溢出,如果使用较低的采样率,则情况并非如此。这意味着您可能无法访问已记录配置文件开始时的 CPU 样本,这取决于缓冲区在记录期间是否溢出。

使用较低采样率记录的配置文件会产生更粗粒度的 CPU 配置文件,其中包含较少的样本。这会较少影响应用程序的性能,但您可能无法获得有关 CPU 在配置文件时间内所做工作的更多信息。VM 的样本缓冲区也填充得更慢,因此您可以查看更长时间的应用程序运行时间的 CPU 样本。这意味着您更有可能查看已记录配置文件开始时的 CPU 样本。

过滤

#

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

按标签过滤菜单的屏幕截图

指南

#

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

显示选项的屏幕截图

其他资源

#

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