本文章为官方文档译文,仅供个人日后复习使用,如有需求请移步至 https://perfetto.dev/docs/
Track events (Tracing SDK)
Custom data sources
代码中的备注:
使用此回调可基于 SetupArgs 中的 TraceConfig 将任何自定义配置应用于数据源。
此通知可用于初始化 GPU 驱动程序、启用计数器等。StartArgs 将包含可以扩展的 DataSourceDescriptor。
撤消在 OnStart 中完成的任何初始化。
数据源还可以具有每个实例的状态。
Track events
Track events 是特定应用程序的,在应用程序运行时,记录在跟踪中的时间限制事件。Track events 始终与track相关联,这是单调增加时间的时间表。Track 对应于独立的执行顺序,例如进程中的单个线程。
Track events 的主要类型有以下几种:
-
slice
代表嵌套的、有时间限制的操作的片。例如,一个片可以覆盖从函数开始执行到返回的时间段、从网络加载文件所花的时间或者完成用户旅程所花的时间。
-
Counters
计数器,它们是时变数值的快照。例如,跟踪事件可以记录进程在执行期间的内存使用情况。
-
Flows
流,用于将跨不同轨道的相关片连接在一起。例如,如果图像文件首先从网络加载,然后在线程池上解码,则可以使用流事件突出显示其通过系统的路径。(尚未完全实施)。
要开始使用跟踪事件,请首先定义您的事件将属于的类别集。每个类别都可以单独启用或禁用以进行跟踪.
-
首先,在头文件中添加类别列表 ( 如:my_app_tracing_categories.h ):
#include <perfetto.h> PERFETTO_DEFINE_CATEGORIES( perfetto::Category("rendering").SetDescription("Events from the graphics subsystem")) perfetto::Category("network").SetDescription("Network upload and download statistics"));
-
然后,在一个.cc文件中为这些类别声明静态存储 ( 如:my_app_tracing_categories.cc )
#include "my_app_tracing_categories.h" PERFETTO_TRACK_EVENT_STATIC_STORAGE();
-
最后,在启动客户端之后初始化 track events:
int main(int argc,char** argv){ ... perfetto::Tracing::Initialize(args); perfetto::TrackEvent::Register(); // Add this. }
-
现在就可以为函数添加track events了,如下:
#include "my_app_tracing_categories.h" void DrawPlayer(){ TRACE_EVENT("rendering", "DrawPlayer"); // Begin "DrawPlayer" slice. ... // End "DrawPlayer" slice. }
该事件将覆盖从遇到 TRACE _ EVENT 注释到该块结束的时间(在上面的示例中,直到函数返回)。
-
对于不遵循函数范围的事件,使用 TRACE _ EVENT _ BEGIN 和 TRACE _ EVENT _ END:
void LoadGame(){ DisplayLoadingScreen(); TRACE_EVENT_BEGIN("io", "Loading"); // Begin "Loading" slice. LoadCollectibles(); LoadVehicles(); LoadPlayers(); TRACE_EVENT_END("io"); // End "Loading" slice. StartGame(); }
注意,不需要为 TRACE _ EVENT _ END 指定名称,因为它会自动关闭在同一线程上开始的最新事件。换句话说,给定线程上的所有事件共享相同的堆栈。这意味着不建议在单独的函数中使用一对匹配的