- Changed include path in debug.md from Logger.h to Debug.h (umbrella header) - Added XE_ASSERT example in debug.md usage section - Added documentation for Profiler private types (ProfileNode, ProfileSample) - Added documentation for Profiler member variables (m_profileStack, m_samples, m_frameStartTime, m_initialized) - Verified MarkEvent, SetMarker, ExportChromeTracing are correctly marked as stubs
3.7 KiB
3.7 KiB
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__)
自动使用当前函数名进行分析。
私有成员
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();
相关文档
- Debug 模块总览 - 返回模块总览
- Logger - 日志记录器