- LogLevel: 日志级别枚举 (Verbose, Debug, Info, Warning, Error, Fatal) - LogCategory: 日志分类 (General, Rendering, Physics, Memory, Threading等) - ILogSink: 日志输出接口 - ConsoleLogSink: 控制台输出, 支持Windows颜色 - FileLogSink: 文件日志输出 - FileWriter: 文件写入器 - Logger: 日志管理器, 支持多sink, 分类控制 - Profiler: 性能分析器 - 单元测试覆盖
57 lines
1.2 KiB
C++
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
|