Android NDK开发详解之调试和性能分析的系统跟踪概览

Android NDK开发详解之调试和性能分析的系统跟踪概览

"系统跟踪"就是记录短时间内的设备活动。系统跟踪会生成跟踪文件,该文件可用于生成系统报告。此报告有助于您了解如何最有效地提升应用或游戏的性能。

有关进行跟踪和性能分析的全面介绍,请参阅 Perfetto 文档中的跟踪 101 页面。

Android 平台提供了多种不同的跟踪记录获取途径:

Android Studio CPU 和内存分析器

系统跟踪实用程序

Perfetto 命令行工具(Android 10 及更高版本)

Systrace 命令行工具

在您与应用互动时,Android Studio CPU 性能分析器可实时检查应用的 CPU 使用情况和线程活动。您还可以检查方法跟踪记录、函数跟踪记录和系统跟踪记录中的详细信息。内存分析器可让您大致了解与触摸事件、activity 更改和垃圾回收事件相关的内存用量。

系统跟踪实用程序是一款 Android 工具,用于将设备活动保存到跟踪文件中。在搭载 Android 10(API 级别 29)或更高版本的设备上,跟踪文件会以 Perfetto 格式保存,如本文档后面部分所示。在搭载较低版本 Android 系统的设备上,跟踪文件会以 Systrace 格式保存。

Perfetto 是 Android 10 中引入的平台级跟踪工具。这是适用于 Android、Linux 和 Chrome 的成熟开源跟踪项目。与 Systrace 不同,它提供数据源超集,可让您以协议缓冲区二进制流形式记录任意长度的跟踪记录。您可以在 Perfetto 界面中打开这些跟踪记录。

Systrace 是平台提供的旧版命令行工具,可记录短时间内的设备活动,并保存在压缩的文本文件中。该工具会生成一份报告,其中汇总了 Android 内核中的数据,例如 CPU 调度程序、磁盘活动和应用线程。Systrace 适用于 Android 4.3(API 级别 18)及更高版本的所有平台版本,但建议将 Perfetto 用于运行 Android 10 及更高版本的设备。

图 1. Perfetto 跟踪记录视图示例,其中显示了与某个应用之间大约 20 秒的互动情况。

图 2. Systrace HTML 报告示例,其中显示了与某个应用之间时长为 5 秒的交互情况。

这两份报告都提供在给定时间段内,Android 设备的系统进程总体情况。该报告还检查了捕获到的跟踪信息,以突出显示发现的问题(例如界面卡顿或耗电量高)。

Perfetto 和 Systrace 可交互使用:

在 Perfetto 界面中打开 Perfetto 文件和 Systrace 文件。在 Perfetto 界面中使用旧版 Systrace 查看器打开 Systrace 文件(使用 Open with legacy UI 链接)。

使用 traceconv 工具将 Perfetto 跟踪记录转换为旧版 Systrace 文本格式。

注意:Systrace 和 Perfetto 不会收集有关应用进程中代码执行情况的详细信息。如需详细了解您的应用正在执行哪些方法及其占用了多少 CPU 资源,请使用 Android Studio 中的 CPU 性能分析器。

系统跟踪指南

如需详细了解系统跟踪工具,请参阅以下指南:

使用 CPU 性能分析器检查 CPU 活动

展示如何在 Android Studio 中分析应用的 CPU 使用情况和线程活动。

System Tracing 系统应用

介绍如何在任何搭载 Android 9(API 级别 28)或更高版本的设备上直接捕获系统跟踪记录。

Systrace 命令行参考文档

定义可传递到 Systrace 命令行界面的不同选项和标志。

使用 ADB 运行 Perfetto

介绍如何运行 perfetto 命令行工具来捕获跟踪记录。

运行 Perfetto

外部文档,介绍如何构建和运行 perfetto 命令行工具来捕获跟踪记录。

Perfetto 界面

Perfetto 网页版跟踪记录查看器可打开 Perfetto 跟踪记录并显示完整报告。您还可以使用旧版界面选项在此查看器中打开 Systrace 跟踪记录。

浏览 Systrace 报告

列出典型报告的各个元素,提供用于浏览报告的键盘快捷键,并介绍如何识别性能问题的类型。

定义自定义事件

介绍如何对代码的特定部分应用自定义标签,以便更轻松地在 Systrace 或 Perfetto 中分析根本原因。

相关推荐
seasugar1 分钟前
Maven怎么会出现一个dependency-reduced-pom.xml的文件
xml·java·maven
一只淡水鱼665 分钟前
【mybatis】基本操作:详解Spring通过注解和XML的方式来操作mybatis
java·数据库·spring·mybatis
pianmian19 分钟前
完全平方数
数据结构·算法
唐叔在学习22 分钟前
【唐叔学算法】第19天:交换排序-冒泡排序与快速排序的深度解析及Java实现
java·算法·排序算法
Moweiii26 分钟前
SDL3 GPU编程探索
c++·游戏引擎·图形渲染·sdl·vulkan
music0ant26 分钟前
Idea 配置环境 更改Maven设置
java·maven·intellij-idea
XWXnb626 分钟前
数据结构:栈
数据结构
唐叔在学习30 分钟前
【唐叔学算法】第18天:解密选择排序的双重魅力-直接选择排序与堆排序的Java实现及性能剖析
数据结构·算法·排序算法
记得开心一点嘛41 分钟前
Nginx与Tomcat之间的关系
java·nginx·tomcat
界面开发小八哥1 小时前
「Java EE开发指南」如何用MyEclipse构建一个Web项目?(一)
java·前端·ide·java-ee·myeclipse