Files
XCEngine/docs/api/debug/profiler/profiler.md
ssdfasd dae1a63a90 Fix debug module documentation discrepancies
- Fix XE_LOG macro parameter order in debug.md (category, level) was reversed
- Add 'Implementation Status' section to profiler.md listing stub methods
  (MarkEvent, SetMarker, ExportChromeTracing) that are not yet implemented
2026-03-19 00:47:29 +08:00

2.9 KiB
Raw Blame History

Profiler

命名空间: XCEngine::Debug

类型: class (singleton)

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

概述

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

单例访问

方法 描述
static Profiler& Get() 获取单例实例

公共方法

生命周期

方法 描述
void Initialize() 初始化性能分析器
void Shutdown() 关闭性能分析器

性能测量

方法 描述
void BeginProfile(const char* name) 开始一个性能分析块
void EndProfile() 结束当前性能分析块

帧管理

方法 描述
void BeginFrame() 开始一帧的分析
void EndFrame() 结束一帧的分析

事件标记

方法 描述
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) 导出为 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__)

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

实现状态

以下方法目前为存根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();

相关文档