Profile核心点使用

483 阅读7分钟

参考网址:developer.android.com/studio/prof…

profile性能查看器

CPU 时间轴上的任意位置以打开 CPU 性能剖析器

  1. CPU 时间轴:显示应用的实时 CPU 使用率(以占总可用 CPU 时间的百分比表示)以及应用当前使用的线程总数。此时间轴还会显示其他进程(如系统进程或其他应用)的 CPU 使用率,以便您可以将其与您应用的 CPU 使用率进行对比。您可以通过沿时间轴的横轴方向移动鼠标来检查历史 CPU 使用率数据。

  2. 线程活动时间轴:列出属于应用进程的每个线程,并使用下面列出的颜色在时间轴上指示它们的活动。记录跟踪数据后,您可以从此时间轴上选择一个线程,以在跟踪数据窗格中检查其数据。

    • 绿色:表示线程处于活动状态或准备使用 CPU。也就是说,线程处于正在运行或可运行状态。
    • 黄色:表示线程处于活动状态,但它正在等待一项 I/O 操作(如磁盘或网络 I/O),然后才能完成它的工作。
    • 灰色:表示线程正在休眠且没有消耗任何 CPU 时间。 当线程需要访问尚不可用的资源时,就会出现这种情况。在这种情况下,要么线程主动进入休眠状态,要么内核将线程置于休眠状态,直到所需的资源可用。

    CPU 性能剖析器还会报告 Android Studio 和 Android 平台添加到应用进程的线程的 CPU 使用率,这些线程包括 JDWPProfile SaverStudio:VMStatsStudio:PerfaStudio:Heartbeat 等(不过,它们在线程活动时间轴上显示的确切名称可能有所不同)。Android Studio 报告此数据是为了方便您确定线程活动和 CPU 使用率什么时候是由您的应用的代码实际引发的。

选择记录配置

在开始记录跟踪信息之前,请为需捕获的分析信息选择适当的记录配置:

  • 对 Java 方法采样

    :在应用的 Java 代码执行期间,频繁捕获应用的调用堆栈。分析器会比较捕获的数据集,以推导与应用的 Java 代码执行有关的时间和资源使用信息。

    基于采样的跟踪存在一个固有的问题,那就是如果应用在捕获调用堆栈后进入一个方法并在下次捕获前退出该方法,分析器将不会记录该方法调用。如果您想要跟踪生命周期如此短的方法,应使用插桩跟踪。

  • 跟踪 Java 方法

    :在运行时检测应用,从而在每个方法调用开始和结束时记录一个时间戳。系统会收集并比较这些时间戳,以生成方法跟踪数据,包括时间信息和 CPU 使用率。

    请注意,与检测每个方法相关的开销会影响运行时性能,并且可能会影响分析数据;对于生命周期相对较短的方法,这一点更为明显。此外,如果应用在短时间内执行大量方法,则分析器可能很快就会超出其文件大小限制,因而不能再记录更多跟踪数据。

  • 对 C/C++ 函数采样

    :捕获应用的原生线程的采样跟踪数据。如需使用此配置,您必须将应用部署到搭载 Android 8.0(API 级别 26)或更高版本的设备上。

    在内部,此配置使用 simpleperf 跟踪应用的原生代码。如果需为 simpleperf 指定其他选项,如对特定设备 CPU 采样或指定高精度采样持续时间,您可以从命令行使用 simpleperf

  • 跟踪系统调用

    :捕获非常翔实的细节,以便您检查应用与系统资源的交互情况。您可以检查线程状态的确切时间和持续时间、直观地查看所有内核的 CPU 瓶颈在何处,并添加需分析的自定义跟踪事件。当您排查性能问题时,此类信息至关重要。如需使用此配置,您必须将应用部署到搭载 Android 7.0(API 级别 24)或更高版本的设备上。

    使用此跟踪配置时,您可以通过检测代码,直观地标记性能剖析器时间轴上的重要代码例程。如需检测 C/C++ 代码,请使用由 trace.h 提供的原生跟踪 API。如需检测 Java 代码,请使用 Trace 类。如需了解详情,请参阅检测您的应用代码

    此跟踪配置建立在 systrace 的基础之上。您可以使用 systrace 命令行实用程序指定除 CPU 性能剖析器提供的选项之外的其他选项。systrace 提供的其他系统级数据可帮助您检查原生系统进程并排查丢帧或帧延迟问题。

记录跟踪数据

如需开始记录跟踪数据,请从 CPU 性能剖析器上方或下方的下拉菜单中选择记录配置,然后点击 Record

img

图 2. CPU 性能剖析器显示正在进行的记录的状态、持续时间和类型。

与您的应用交互,然后在完成时点击 Stop。性能剖析器会自动在跟踪数据窗格中显示其跟踪信息,如图 3 所示:

img

图 3. 记录方法跟踪数据后的 CPU 性能剖析器。

  1. 选定范围:确定需在跟踪数据窗格中检查所记录时间的哪一部分。当您首次记录跟踪数据时,CPU 性能剖析器会自动在 CPU 时间轴上选择记录的完整长度。如需仅检查已记录的时间范围中的一部分的跟踪数据,请拖动突出显示区域的边缘。

  2. “Interaction”部分:沿着时间轴显示用户互动和应用生命周期事件。

  3. “Threads”部分

    :沿时间轴针对每一个线程显示线程状态活动(例如运行、休眠等)和

    调用图表

    (在 System Trace 中则为跟踪事件图表)。

    • 使用鼠标和键盘快捷键在时间轴上导航。
    • 双击线程名称,或在选中线程时按 Enter 键以展开或折叠线程。
    • 选择某个线程即可在“Analysis”窗格中查看更多信息。 按住 Shift 或 Ctrl(Mac 上为 Command)可选择多个线程。
    • 选择方法调用(或 System Trace 中的跟踪事件),以在“Analysis”窗格中查看更多信息。
  4. “Analysis”窗格:显示您选择的时间范围和线程/方法调用的跟踪数据。在此窗格中,您可以选择如何查看每个堆栈轨迹(使用“Analysis”标签页),以及如何测量执行时间(使用“Time reference”下拉菜单)。

  5. “Analysis”窗格标签页:选择如何显示跟踪数据详细信息。如需详细了解各个选项,请参阅检查跟踪数据

  6. "Time reference"菜单

    :选择以下选项之一,以确定如何测量每次调用的时间信息(仅在

    示例/跟踪 Java 方法

    中受支持):

    • Wall clock time:该时间信息表示实际经过的时间。
    • Thread time:该时间信息表示实际经过的时间减去线程没有占用 CPU 资源的那部分时间。对于任何给定的调用,其线程时间始终小于或等于其挂钟时间。使用线程时间可以让您更好地了解线程的实际 CPU 使用率中有多少是给定方法或函数占用的。
  7. Filter

    :按函数、方法、类或软件包名称过滤跟踪数据。例如,如果您需快速识别与特定调用相关的跟踪记录数据,请在搜索字段中输入名称。在

    Flame chart

    标签页中,会突出显示包含符合搜索查询条件的调用、软件包或类的调用堆栈。在

    Top down

    Bottom up

    标签页中,这些调用堆栈优先于其他跟踪结果。您还可以通过勾选搜索字段旁边的相应方框来启用以下选项:

    • Regex:如需在您的搜索中包含正则表达式,请使用此选项。

    • Match case:如果您的搜索区分大小写,请使用此选项。