Files
XCEngine/docs/api/debug/profiler/profiler.md

3.3 KiB
Raw Blame History

Profiler

命名空间: XCEngine::Debug

类型: class (singleton)

头文件: XCEngine/Debug/Profiler.h

描述: 性能分析器单例,用于测量代码块执行时间并支持 Chrome Tracing 格式导出。

概述

Profiler 是 XCEngine 的性能分析工具。它通过栈式记录和采样方式跟踪函数执行时间,支持导出为 Chrome Tracing 格式(可通过 Chrome 的 chrome://tracing 查看)。

公共方法

方法 描述
Get 获取单例实例
Initialize 初始化性能分析器
Shutdown 关闭性能分析器
BeginProfile 开始一个性能分析块
EndProfile 结束当前性能分析块
BeginFrame 开始一帧的分析
EndFrame 结束一帧的分析
MarkEvent 标记一个事件点
SetMarker 设置帧标记
ExportChromeTracing 导出为 Chrome Tracing JSON 格式

宏定义

XE_PROFILE_BEGIN

#define XE_PROFILE_BEGIN(name) XCEngine::Debug::Profiler::Get().BeginProfile(name)

开始分析指定名称的代码块。

XE_PROFILE_END

#define XE_PROFILE_END() XCEngine::Debug::Profiler::Get().EndProfile()

结束当前分析块。

XE_PROFILE_FUNCTION

#define XE_PROFILE_FUNCTION() XE_PROFILE_BEGIN(__FUNCTION__)

自动使用当前函数名进行分析。

私有成员

ProfileNode

struct ProfileNode {
    const char* name;
    uint64_t startTime;
    uint64_t endTime;
    uint32_t threadId;
};

内部使用的性能分析节点结构,用于在栈上跟踪嵌套的分析块。

ProfileSample

struct ProfileSample {
    const char* name;
    uint64_t duration;
    uint32_t threadId;
};

记录单个性能样本的结构,包含名称、持续时间和线程 ID。

成员变量

成员 类型 描述
m_profileStack std::vector<ProfileNode> 分析块栈,用于跟踪嵌套调用
m_samples std::vector<ProfileSample> 样本列表,记录完成的性能数据
m_frameStartTime uint64_t 当前帧开始时间戳(微秒)
m_initialized bool 初始化标志

实现状态

以下方法目前为存根stub实现尚未完成功能

方法 状态
void MarkEvent(const char* name, uint64_t timestamp, uint32_t threadId) 存根
void SetMarker(const char* name, uint32_t color) 存根
void ExportChromeTracing(const Containers::String& filePath) 存根

使用示例

Profiler::Get().Initialize();

void RenderFrame() {
    XE_PROFILE_FUNCTION();
    
    {
        XE_PROFILE_BEGIN("UpdateGeometry");
        UpdateGeometry();
        XE_PROFILE_END();
    }
    
    {
        XE_PROFILE_BEGIN("DrawCalls");
        DrawCalls();
        XE_PROFILE_END();
    }
}

Profiler::Get().BeginFrame();
// ... 渲染帧 ...
Profiler::Get().EndFrame();
Profiler::Get().ExportChromeTracing("profile.json");
Profiler::Get().Shutdown();

相关文档