Android Studio 中 System Trace 的新增功能

3,615 阅读6分钟

在 Android Studio 4.0 中,我们已经对 CPU Profiler 的 UI 做了大量调整来提供更加直观的工作流记录,而在 Android Studio 4.1 中,我们基于开发者们的反馈对此功能进行了持续改进,并且新增了更多特性。

我们将会在本文重点介绍 Android Studio 中 System Trace 的新增功能,System Trace 也就是 "系统跟踪" 的意思,用来记录短时间内的设备活动,它会生成一个 .trace 跟踪文件,该文件可用于生成系统报告,此报告可帮助您了解如何最有效地提升应用或游戏的性能。System Trace 虽然使用率不高,但它是一款功能强大的 CPU 记录配置。不同于函数跟踪,如 Java Method 或 C/C++ Func Trace,System Trace 跟踪的是系统级的内容,如设备活动 (例如 CPU 核心调度) 和 Android 系统进程 (例如 SurfaceFlinger)。此外,您还可以通过在应用中调用 Trace API,使用 自定义事件 检测您的代码,这样您的自定义事件便会与系统事件一起被收集。当您在排查性能问题时 (例如 UI 卡顿或功耗过高),这些组合数据就会显得十分有用。

一次搞定所有线程

为了便于进行分析,我们将 CPU 的记录从主分析器的时间线中分离了出来。在这个专用视图中,跟踪数据被整理到了 Profiler 窗口的左侧区域中。

Android Studio 4.1 Beta 1 中的 System Trace 界面

Android Studio 4.1 Beta 1 中的 System Trace 界面

您可以通过简单拖拽将某一区域或者区域内的某个元素进行向上或向下移动来重新组织列表。

我们从开发者们的反馈得知,选择每个线程来查看它的调用图 (或 System Trace 的跟踪事件) 是一件很麻烦的事,所以我们将所有线程活动整合到了同一个视图中,从而可以在显示线程状态的同时显示调用图。默认情况下,我们根据线程的繁忙程度对其进行排序,但是您也可以拖放任意一个线程以对其重新排序。

拖放线程来改变列表顺序

拖放线程来改变列表顺序

您也可以通过单击三角形图标或双击线程名称来折叠或展开每个线程。注意,对于 Java Method Trace 和 C/C++ Function Trace,由于调用栈很深,我们默认情况下会折叠所有线程视图,以便您可以一目了然地查看所有线程数据。

C/C++ Function Trace 默认以折叠状态展示线程数据

C/C++ Function Trace 默认以折叠状态展示线程数据

为了便于区分,现在每个 System Trace 的跟踪事件都有一个独立的颜色。

System Trace 事件按命名添加了对应颜色

System Trace 事件按命名添加了对应颜色

更加直观的导航

新的 Trace UI 使用了改进的时间轴导航方案,我们用主要 - 细节视图替换了以前的水平滚动条。

在顶部,您可以看到一个时间轴,它仅仅映射了跟踪过程而不是整个分析过程。您可以使用范围选择器快速缩小范围到特定的时间段,而下面的部分则会显示对应的详细数据。

使用范围选择器来专注于时间轴的一小部分

使用范围选择器来专注于时间轴的一小部分

在这里您可以进行更加精细的导航操作:

  • 使用 Ctrl (在 Mac 上为 Cmd) + 鼠标滚轮进行缩放;
  • 按住空格键的同时左右拖动鼠标可平移视图;
  • 使用 "WASD" 键缩放和平移视图,就像 Chrome 中的旧版 SysTrace UI 一样 (chrome://tracing)。

从 Android Studio 4.1 Canary 9 开始,您可以通过拖动鼠标在  Thread  部分进行框选。这一操作使您可以精确地选择一个矩形区域,并且只要点击右上角的  Zoom to Selection  (或 "M" 键) 便可以放大该区域。您甚至可以跨越多个线程执行选择操作,这个特性在您把相似线程拖放到一起进行检视时十分有用。举例来说,您也许会想对多个辅助线程进行分析,而这种场景在游戏开发中很常见。

框选、拖放与缩放

框选、拖放与缩放

分析面板

说到分析,我们想着重聊一聊 Android Studio 4.0 中引入的新  Analysis Panel ,它位于  Profiler 窗口的右边一列。

基于您所选择的跟踪记录,在这里可以找到相应的分析数据。当您在左边栏中选择一个线程、堆栈帧或者跟踪事件时,Analysis Panel 将会显示对应的特定信息。举例来说,当您选择了一个线程时,该线程的状态与其他一些有用的信息就会被显示出来。

我们希望 Analysis Panel 能对您有所帮助,所以我们一直在探索使用各种形式来展示这些有用的分析数据。在 CPU Profiler 中,我们已经有了 Top Down、Flame Chart 和 Bottom Up。作为补充,我们在 Android Studio 4.1 Canary 10 中添加了  Summary  选项卡,用于展示线程状态分布、跟踪事件统计等信息。举例来说,我们经常需要深入了解一个反复出现的跟踪事件。Summary 选项卡会显示基本的统计信息 (如计数,最小值,最大值等) 以及所选跟踪事件中运行时间最长的一次事件。您也可以通过从表中选择一行来导航到另一个事件。

统计信息以及跟踪事件中运行时间最长的事件

统计信息以及跟踪事件中运行时间最长的事件

稳定性与性能改进

最后但也同样重要的是,我们还改进了 CPU 记录的性能和稳定性:

  • 我们修复了一些可能导致记录失败的 Bug;
  • 我们从 Android API level 28 开始使用 Perfetto 作为 System Trace 的后台,从而可以从 Android 平台的最新检测技术中获益;
  • 我们还优化了 profiler 的代码,从而显著减少了解析跟踪记录时的内存消耗 (最多达 80%)。这样您便可以开启和解析更长的跟踪信息。请记住,您可以增加 Android Studio 的 最大堆容量 来支持更长时间的追踪。

下载最新的 Android Studio 4.1 预览版 可以尝鲜本文介绍的新特性。也同样欢迎大家 反馈