解读 Systrace 报告

本指南介绍了如何解读 Systrace 报告并进行导航。要解读 Perfetto 报告,请参阅 Trace Processor 文档。

典型报告的元素

Systrace 生成的 HTML 输出文件包含一系列部分。报告列出了每个进程的线程。如果给定线程渲染 UI 帧,报告还会沿时间线指示已渲染的帧。当您从左到右移动报告时,时间向前推移。

从上到下,报告包含以下部分。

用户互动

第一部分包含表示应用或游戏内特定用户互动的条形图,例如轻触设备屏幕。这些互动可作为有用的时间标记。

CPU 活动

下一部分显示表示每个 CPU 内线程活动的条形图。这些条形图显示了包括您的应用或游戏在内的所有应用的 CPU 活动。

CPU 活动部分可展开,允许您查看每个 CPU 的时钟频率。图 1 显示了折叠的 CPU 活动部分的示例,图 2 显示了显示时钟频率的展开版本

Screenshot of Systrace report
图 1. Systrace 报告中的 CPU 活动示例(折叠视图)

Screenshot of Systrace report
图 2. Systrace 报告中显示 CPU 时钟频率的 CPU 活动示例(展开视图)

系统事件

本节中的直方图显示了特定的系统级事件,例如纹理计数和特定对象的总大小。

一个值得仔细查看的直方图是标有 SurfaceView 的直方图。该计数表示已传递到显示管道并等待在设备屏幕上显示的组合帧缓冲区的数量。由于大多数设备采用双缓冲或三缓冲,因此该计数几乎总是 0、1 或 2。

图 3 中显示了描绘 Surface Flinger 进程的其他直方图,包括 VSync 事件和 UI 线程交换工作

Screenshot of Systrace report
图 3. Systrace 报告中的 Surface Flinger 图表示例

显示帧

本节通常是报告中最高的部分,描绘了一条多色线,后跟堆叠的条形图。这些形状表示已创建的特定线程的状态和帧堆栈。堆栈的每个级别都表示对 beginSection() 的调用,或者是您为应用或游戏定义的自定义跟踪事件的开始。

每堆条形图上方的多色线表示特定线程随时间的一组状态。线的每个段可以包含以下颜色之一

绿色:运行中
线程正在完成与某个进程相关的工作或正在响应中断。
蓝色:可运行
线程可用运行但当前未被调度。
白色:休眠
线程没有工作可做,可能是因为线程被互斥锁阻塞。
橙色:不可中断的休眠
线程被 I/O 阻塞或正在等待磁盘操作完成。
紫色:可中断的休眠
线程被另一个内核操作阻塞,通常是内存管理。

键盘快捷键

下表列出了查看 Systrace 报告时可用的键盘快捷键

说明
W 放大跟踪时间线。
A 在跟踪时间线上向左平移。
S 缩小跟踪时间线。
D 在跟踪时间线上向右平移。
E 将跟踪时间线居中于当前鼠标位置。
M 框选当前选择。
1 将当前活动的选择模式更改为“选择”模式。对应于鼠标选择器工具栏中出现的第一个按钮(参见右图)。 Screenshot of mouse selector toolbar in Systrace report
2 将当前活动的选择模式更改为“平移”模式。对应于鼠标选择器工具栏中出现的第二个按钮(参见右图)。 Screenshot of mouse selector toolbar in Systrace report
3 将当前活动的选择模式更改为“缩放”模式。对应于鼠标选择器工具栏中出现的第三个按钮(参见右图)。 Screenshot of mouse selector toolbar in Systrace report
4 将当前活动的选择模式更改为“时间”模式。对应于鼠标选择器工具栏中出现的第四个按钮(参见右图)。 Screenshot of mouse selector toolbar in Systrace report
G 在当前选定任务的开始处显示网格。
Shift + G 在当前选定任务的结束处显示网格。
左箭头 选择当前选定时间线上的上一个事件。
右箭头 选择当前选定时间线上的下一个事件。

调查性能问题

与 Systrace 报告交互时,您可以检查设备在记录期间的 CPU 使用情况。有关 HTML 报告导航的帮助,请参阅键盘快捷键部分,或点击报告右上角的 ? 按钮。

以下部分解释了如何检查报告中的信息以查找和修复性能问题。

识别性能问题

在 Systrace 报告中导航时,您可以通过执行以下一项或多项操作,更轻松地识别性能问题

  • 通过在时间间隔周围绘制矩形来选择感兴趣的时间间隔。
  • 使用标尺工具标记或突出显示问题区域。
  • 点击 View Options > Highlight VSync,显示每个显示刷新操作。

检查 UI 帧和警报

如图 4 所示,Systrace 报告列出了每个渲染 UI 帧的进程,并沿时间线指示每个已渲染的帧。在保持稳定每秒 60 帧所需的 16.6 毫秒内渲染的帧以绿色帧圆圈表示。渲染时间超过 16.6 毫秒的帧以黄色或红色帧圆圈表示。

Zoomed in
  view of a frame
图 4. 放大长时间运行帧后的 Systrace 显示

点击帧圆圈会突出显示它,并提供有关系统为渲染该帧所做工作的附加信息,包括警报。报告还会向您显示系统在渲染该帧时正在执行的方法。您可以调查这些方法以确定 UI 卡顿的潜在原因。

Problematic
  frame selected
图 5. 选择有问题帧后,跟踪报告下方会显示一个警报,指出问题所在

选择慢帧后,您可能会在报告的底部窗格中看到警报。图 5 中显示的警报指出,该帧的主要问题是 ListView 回收和重新绑定花费了太多时间。报告中包含相关事件的链接,这些链接详细解释了系统在此期间正在执行的操作。

要查看工具在您的跟踪中发现的所有警报,以及设备触发每个警报的次数,请点击窗口最右侧的 Alerts 标签页,如图 6 所示。Alerts 面板可帮助您查看跟踪中出现的问题以及它们对卡顿的影响频率。您可以将此面板视为要修复的错误列表。通常,一个领域的小小改变或改进可以消除一整套警报。

Alert tab shown
图 6. 点击Alert按钮会显示警报标签页

如果您发现 UI 线程上执行了过多的工作,请使用以下方法之一来帮助确定哪些方法占用了过多的 CPU 时间

  • 如果您知道哪些方法可能导致瓶颈,请在这些方法中添加跟踪标记。要了解更多信息,请参阅有关如何在代码中定义自定义事件的指南。
  • 如果您不确定 UI 瓶颈的来源,请使用 Android Studio 中提供的 CPU 性能分析器。您可以生成跟踪日志,然后使用 CPU 性能分析器导入和检查它们。