如何使用Perfetto通过trace分析性能问题(四)——Trace Processor

本文章为官方文档译文,仅供个人日后复习使用,如有需求请移步至 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 指定名称,因为它会自动关闭在同一线程上开始的最新事件。换句话说,给定线程上的所有事件共享相同的堆栈。这意味着不建议在单独的函数中使用一对匹配的

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值