跳转至

dfx_frame_trace

dfx_frame_trace 模块提供帧追踪功能,用于调试时记录和统计帧渲染性能数据。

Class Summary

OHOS::DfxFrameTrace

帧绘制追踪单例类,用于记录和展示图形渲染管线的帧级绘制耗时与事件追踪信息

  • 构造:无
  • 成员函数

    接口名称 功能简述
    GetInstance 获取 DfxFrameTrace 单例引用
    EnableFrameTrace 设置帧追踪使能计数
    BeginTrace 开始一次帧追踪采集
    SetDrawRect 设置当前帧的绘制区域
    SetFlushMemType 设置刷新内存类型
    EndTrace 结束一次帧追踪采集
    SetPathType 设置路径绘制类型与属性
    FrameTraceStart 记录一个绘制命令的起始时间
    FrameTraceEnd 记录一个绘制命令的结束时间与区域
    ShowFrameTrace 将当前帧追踪记录写入事件任务链
    EventTraceStart 开始一次事件追踪
    EventTraceEnd 结束一次事件追踪
    TaskTraceStart 开始一次任务追踪
    TaskTraceEnd 结束一次任务追踪
  • 使用包含头文件#include "dfx/dfx_frame_trace.h"

  • 声明头文件middleware/services/gui/uikit/proprietary/include/dfx/dfx_frame_trace.h
  • 公有运算符:无
  • 继承关系:HeapBase
  • 嵌套类型:无
  • 模板形参:无

Functions

OHOS::DfxFrameTrace

GetInstance

static DfxFrameTrace& GetInstance()

功能说明

  • 核心用途:获取 DfxFrameTrace 全局单例引用
  • 设计目的:通过静态局部变量实现线程安全的懒加载单例模式
  • 使用场景:所有帧追踪接口均需通过此单例调用

EnableFrameTrace

void EnableFrameTrace(int enable)

功能说明

  • 核心用途:设置帧追踪的使能计数,控制追踪采集的启停
  • 设计目的:通过计数器机制控制采集次数,计数归零后自动停止追踪
  • 使用场景:需要采集指定帧数的绘制性能数据时调用

入参

名称 参数类型 详细说明 约束取值范围
enable int 追踪使能计数,决定可采集的帧数 正整数

BeginTrace

void BeginTrace()

功能说明

  • 核心用途:标记一帧追踪采集的开始,初始化采集状态
  • 设计目的:在追踪计数大于 0 时激活采集,同步获取系统运行状态与频率信息
  • 使用场景:每帧渲染开始前调用,与 EndTrace 配对使用

SetDrawRect

void SetDrawRect(const Rect &rect)

功能说明

  • 核心用途:设置当前帧的绘制脏区域矩形
  • 设计目的:记录帧级绘制区域信息,用于性能分析时定位绘制范围
  • 使用场景:在 BeginTrace 之后、EndTrace 之前设置绘制区域

入参

名称 参数类型 详细说明 约束取值范围
rect const Rect & 入参只读引用,绘制区域矩形 Rect 有效坐标范围

SetFlushMemType

void SetFlushMemType(bool isSram)

功能说明

  • 核心用途:设置刷新操作的内存类型标识
  • 设计目的:区分 SRAM 与 PSRAM 刷新类型,用于性能分析时标记刷新来源
  • 使用场景:在刷新操作前设置内存类型

入参

名称 参数类型 详细说明 约束取值范围
isSram bool 入参,内存类型标识 true: SRAM; false: PSRAM

EndTrace

void EndTrace()

功能说明

  • 核心用途:标记一帧追踪采集的结束,递减追踪计数
  • 设计目的:在存在绘制记录时递减计数,并清除当前帧采集状态
  • 使用场景:每帧渲染结束后调用,与 BeginTrace 配对使用

SetPathType

void SetPathType(FrameTraceType type, FrameTracePathAttr attr)

功能说明

  • 核心用途:设置路径绘制操作的追踪类型与路径属性
  • 设计目的:将 HW_DRAW_PATH 类型的通用路径绘制细化为具体的绘制类型与属性,用于更精确的性能分析
  • 使用场景:在调用 FrameTraceStart 前设置路径绘制的具体类型和属性

入参

名称 参数类型 详细说明 约束取值范围
type FrameTraceType 路径绘制的具体类型 FrameTraceType 枚举值
attr FrameTracePathAttr 路径属性标识 FrameTracePathAttr 枚举值

FrameTraceStart

void FrameTraceStart(FrameTraceType type)

功能说明

  • 核心用途:记录一个绘制命令的起始时间点
  • 设计目的:通过栈式管理支持嵌套绘制命令的追踪,最外层命令记录实际采集数据
  • 使用场景:每个绘制操作开始时调用,与 FrameTraceEnd 配对使用

入参

名称 参数类型 详细说明 约束取值范围
type FrameTraceType 绘制命令类型 FrameTraceType 枚举值

FrameTraceEnd

void FrameTraceEnd(FrameTraceType type, const Rect *rect = nullptr)

功能说明

  • 核心用途:记录一个绘制命令的结束时间点与关联绘制区域
  • 设计目的:在最外层绘制命令退出时记录耗时与区域信息,支持 HW_DRAW_PATH 类型的自动替换
  • 使用场景:每个绘制操作结束时调用,与 FrameTraceStart 配对使用

入参

名称 参数类型 详细说明 约束取值范围
type FrameTraceType 绘制命令类型 FrameTraceType 枚举值
rect const Rect * 入参只读指针,绘制区域矩形,可为 nullptr nullptr 或指向有效 Rect 对象

ShowFrameTrace

void ShowFrameTrace()

功能说明

  • 核心用途:将当前帧的追踪记录写入事件任务链中的 FrameRecord
  • 设计目的:在事件和任务追踪均处于记录状态时,将帧绘制数据持久化到 TaskRecord 中
  • 使用场景:一帧绘制完成后、EndTrace 之前调用

EventTraceStart

void EventTraceStart()

功能说明

  • 核心用途:开始一次事件追踪,创建 EventRecord 并记录起始时间
  • 设计目的:在追踪计数大于 0 时创建事件记录节点,追加到事件链表尾部
  • 使用场景:事件处理开始时调用,与 EventTraceEnd 配对使用

EventTraceEnd

void EventTraceEnd()

功能说明

  • 核心用途:结束一次事件追踪,记录结束时间
  • 设计目的:在追踪计数归零时触发事件记录的展示与清理
  • 使用场景:事件处理结束时调用,与 EventTraceStart 配对使用

TaskTraceStart

void TaskTraceStart()

功能说明

  • 核心用途:在当前事件下开始一次任务追踪,创建 TaskRecord 并记录起始时间
  • 设计目的:在事件追踪处于记录状态时创建任务记录节点,追加到当前事件的任务链表尾部
  • 使用场景:任务执行开始时调用,与 TaskTraceEnd 配对使用

前置条件

  • 事件追踪已通过 EventTraceStart 启动且处于记录状态(eventRecording_ == true)
  • 事件链表非空(events_ != nullptr)

TaskTraceEnd

void TaskTraceEnd()

功能说明

  • 核心用途:结束当前任务追踪,记录任务结束时间
  • 设计目的:在事件和任务追踪均处于记录状态时,记录任务耗时
  • 使用场景:任务执行结束时调用,与 TaskTraceStart 配对使用

前置条件

  • 事件追踪已启动且处于记录状态(eventRecording_ == true)
  • 任务追踪已启动且处于记录状态(taskRecording_ == true)
  • 事件链表非空(events_ != nullptr)
  • 当前事件的任务链表非空(curEvt.tasks != nullptr)

Enumerations

FrameTraceType

enum class FrameTraceType {
    SW_DRAW_TRANSFORM = 0,
    SW_DRAW_IMGBLIT,
    HW_DRAW_IMGBLIT,
    HW_DRAW_PATH,
    HW_CLIP_IMGBYPATH,
    SW_DRAW_CUBICBEZIER,
    SW_DRAW_RECT,
    HW_DRAW_RECT,
    HW_DRAW_BLUR,
    SW_DRAW_LETTER,
    SW_DRAW_ARC,
    SW_DRAW_LINE,
    HW_DRAW_SUBMIT,
    HW_DRAW_FLUSH,
    HW_DRAW_WAIT,
    HW_DRAW_ARC_RECT,
    HW_DRAW_LINE,
    HW_DRAW_ARC,
    HW_DRAW_CUBICBEZIER,
    HW_DRAW_ELLIPSE,
    HW_DRAW_LIGHT,
    HW_DRAW_3D_CYLINDER,
    HW_DRAW_3D_MESH,
    HW_DRAW_3D_SPHERE,
    HW_DRAW_RAIN,
    DRAW_MAX
};
枚举成员 取值 描述
SW_DRAW_TRANSFORM 0 软件绘制变换
SW_DRAW_IMGBLIT 1 软件图像位块传送
HW_DRAW_IMGBLIT 2 硬件图像位块传送
HW_DRAW_PATH 3 硬件路径绘制
HW_CLIP_IMGBYPATH 4 硬件路径裁剪图像
SW_DRAW_CUBICBEZIER 5 软件三次贝塞尔曲线绘制
SW_DRAW_RECT 6 软件矩形绘制
HW_DRAW_RECT 7 硬件矩形绘制
HW_DRAW_BLUR 8 硬件模糊绘制
SW_DRAW_LETTER 9 软件文字绘制
SW_DRAW_ARC 10 软件圆弧绘制
SW_DRAW_LINE 11 软件线段绘制
HW_DRAW_SUBMIT 12 硬件提交
HW_DRAW_FLUSH 13 硬件刷新
HW_DRAW_WAIT 14 硬件等待
HW_DRAW_ARC_RECT 15 硬件圆角矩形绘制
HW_DRAW_LINE 16 硬件线段绘制
HW_DRAW_ARC 17 硬件圆弧绘制
HW_DRAW_CUBICBEZIER 18 硬件三次贝塞尔曲线绘制
HW_DRAW_ELLIPSE 19 硬件椭圆绘制
HW_DRAW_LIGHT 20 硬件光照绘制
HW_DRAW_3D_CYLINDER 21 硬件3D圆柱体绘制
HW_DRAW_3D_MESH 22 硬件3D网格绘制
HW_DRAW_3D_SPHERE 23 硬件3D球体绘制
HW_DRAW_RAIN 24 硬件雨滴效果绘制
DRAW_MAX 25 枚举边界值

FrameTracePathAttr

enum class FrameTracePathAttr : uint8_t {
    NONE = 0,
    FILL = 1,
    STROKE = 1 << 1,
    BOTH = (1 << 1) | 1,
};
枚举成员 取值 描述
NONE 0 无属性
FILL 1 填充属性
STROKE 2 描边属性
BOTH 3 填充与描边属性