Android新一代跟踪工具Perfetto

什么是Perfetto?

Perfetto是Android 10之后推出的新一代Trace工具,它引入了新的Protobuf协议格式,同时支持Linux、Android、Chrome多平台的Trace录制、展示和分析。另外Perfetto还支持将Protobuf格式转换层其他Trace格式,例如text、json、systrace、profile等。

注:Protobuf的Google开源的一款类似JSON、XML的数据交换格式,其内部数据是纯二进制格式,不依赖于具体平台,具有简单、数据量小、速度快等有点。

相关文档

Perfetto官方文档
Perfetto设计文档

相关源码

google/perfetto

相关工具(两种使用方式)

Perfetto UI
Perfetto 命令行

注:Perfetto对Android 10以下的设备不支持,不过我们仍然可以用它来查看和分析Trace。以前的格式都是兼容的。

功能介绍

Perfetto主要提供四大核心功能,如下所示:

●System Profiling
○Perfetto集成了LInux的ftrace,可以跟踪Linux内核,包括调度活动、任务切换延迟、CPU帧率等。
○可以拉取/proc和/sys目录下的stat文件。
○与Android的HAL模块集成,可以跟踪电量的使用情况。
○Native Heap分析,hook了系统的malloc、free、new、delete等内存操作方法,并关联相关调用栈,用来分析Native Heap。
○Java Heap分析,它可以保留Heap的完整快照,包括类型、字段名称、保留的大小以及对其他对象的引用等。
●In-App Tracing
○以更高的速度和更低的开销记录C++程序相关的活动。
○支持了新的protobuf格式。
○可以将同一时间的应用和系统跟踪信息关联起来。
●Trace Viewer
○支持以前的Android systrace格式。提供了统一的UI工具读取和分析Trace文件。
●Trace Analysis

使用方法

录制Android Trace

另外从Android 9开始,提供了一个可以直接录制Trace的程序,不用再连接USB,录制完成后可以分享到我们的电脑进行查看。

以上便是进行Trace录制的方法,Perfetto在Android设备上可以采集多种来源的性能数据。

●ftrace:收集内核信息。
●atrace:收集服务和应用中的用户空间注释。
●heapprofd:手机服务和应用的本地内存使用情况。

具体信息和配置方法请参见文档

录制Chrome Trace

Perfetto设计目的之一也是为了替代Chromium的chrome://trace工具。使用USB连接一台Android 10的手机。然后进行录制即可。

查看Trace

目前Prefetto录制Trace还只限制了在Android 10的设备上,对于Android 10以下的设备我们可以通过Systrace(Android)、chrome://trace等工具录制Trace,然后导入到Prefetto上查看。

至于图形界面操作这块和chrome://trace区别不大,也支持键盘awsd放大缩小和触控板拖拽,以前的m键标记以后,可以在timeline上标记个小旗子。

架构分析

perfetto

●Linux ftrace:用来跟踪LInux内核相关的事件。
●Data Sources:数据源,包含MemoryCPUPoser、系统事件(ATrace)等。
●Trace Processer:用于导入、解析和查询Trace事件,它是一个C++11库,提供面向列的表存储,专门设计用于将数小时的Trace数据有效的保存到内存中,并基于SQLIte查询引擎提供SQL查询接口,Trace数据模型成为一组SQL表,这样可以很灵活的连接和查询这些SQL表,以方便我们分析数据。
●Trace C++ Library:这个是Perfetto的SDK,它是一个C++11的库,用来让用户空间的应用程序可以发出更多的Trace事件,并向Perfetto添加更多的特定于应用程序的上下文。

ATrace

ATrace代表了Android系统和应用相关的Trace Event。除了系统定义的Trace Event,我们也可以通过API自己定义Event。当前我们还可以继续使用这些API,后续可能会被新的Trace SDK替代。

●Java/Kotlin(SDK):android.os.Trace
●Native Process(NDK):ATrace
●Android Internal Process:ATRACE_BEGIN()/ATRACE_INT()

ATrace Event分为两大类

●系统Trace Event:例如am、pm等。
●应用Trace Event。

另外ATrace的每个Event的额外时间开销大概是1-10us,主要包含字符串化、JNI调用、用户空间和内核空间的往返,以及写入/sys/kernel/debug/tracing/trace_marker文件里。

Track Events

Track Events是应用程序运行时记录的一组时间有限的事件序列,它会被记录到Trace文件中。每个Tack都是一个独立执行的序列,类似于进程中的线程。沿着时间轴,向前排列,如下所示:

主要有三种类型的Track Event:

●切片(Slice):表示嵌套的、有事件限制的操作。例如一个函数从执行开始到执行结束,一个网络文件从下载开始到结束。
●计数器(Couter):表示随时间变化的数值的快照。例如Trace Event可以记录在执行过程中内存的使用情况。
●事件流(Flow):表示将不同track event连接到一起,例如一个图片从网络下载,到在线程池中解码,事件流可以表示整个流程的系统路径。

文章来源于互联网:https://www.yuque.com/beesx/beesandroid/fg7cs4

阅读全文
下载说明:
1、本站所有资源均从互联网上收集整理而来,仅供学习交流之用,因此不包含技术服务请大家谅解!
2、本站不提供任何实质性的付费和支付资源,所有需要积分下载的资源均为网站运营赞助费用或者线下劳务费用!
3、本站所有资源仅用于学习及研究使用,您必须在下载后的24小时内删除所下载资源,切勿用于商业用途,否则由此引发的法律纠纷及连带责任本站和发布者概不承担!
4、本站站内提供的所有可下载资源,本站保证未做任何负面改动(不包含修复bug和完善功能等正面优化或二次开发),但本站不保证资源的准确性、安全性和完整性,用户下载后自行斟酌,我们以交流学习为目的,并不是所有的源码都100%无错或无bug!如有链接无法下载、失效或广告,请联系客服处理!
5、本站资源除标明原创外均来自网络整理,版权归原作者或本站特约原创作者所有,如侵犯到您的合法权益,请立即告知本站,本站将及时予与删除并致以最深的歉意!
6、如果您也有好的资源或教程,您可以投稿发布,成功分享后有站币奖励和额外收入!
7、如果您喜欢该资源,请支持官方正版资源,以得到更好的正版服务!
8、请您认真阅读上述内容,注册本站用户或下载本站资源即您同意上述内容!
原文链接:https://www.shuli.cc/?p=18286,转载请注明出处。
0

评论0

显示验证码
没有账号?注册  忘记密码?