Files
XCEngine/engine/include/XCEngine/Debug/Profiler.h
ssdfasd 83fd517974 feat: 实现日志与调试系统(Debug模块)
- LogLevel: 日志级别枚举 (Verbose, Debug, Info, Warning, Error, Fatal)
- LogCategory: 日志分类 (General, Rendering, Physics, Memory, Threading等)
- ILogSink: 日志输出接口
- ConsoleLogSink: 控制台输出, 支持Windows颜色
- FileLogSink: 文件日志输出
- FileWriter: 文件写入器
- Logger: 日志管理器, 支持多sink, 分类控制
- Profiler: 性能分析器
- 单元测试覆盖
2026-03-13 20:53:57 +08:00

57 lines
1.2 KiB
C++

#pragma once
#include "LogLevel.h"
#include "../Containers/String.h"
#include <vector>
#include <chrono>
#include <unordered_map>
namespace XCEngine {
namespace Debug {
class Profiler {
public:
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);
private:
struct ProfileNode {
const char* name;
uint64_t startTime;
uint64_t endTime;
uint32_t threadId;
};
struct ProfileSample {
const char* name;
uint64_t duration;
uint32_t threadId;
};
std::vector<ProfileNode> m_profileStack;
std::vector<ProfileSample> m_samples;
uint64_t m_frameStartTime = 0;
bool m_initialized = false;
};
#define XE_PROFILE_BEGIN(name) XCEngine::Debug::Profiler::Get().BeginProfile(name)
#define XE_PROFILE_END() XCEngine::Debug::Profiler::Get().EndProfile()
#define XE_PROFILE_FUNCTION() XE_PROFILE_BEGIN(__FUNCTION__)
} // namespace Debug
} // namespace XCEngine