#include "Debug/Profiler.h" #include "Debug/Logger.h" namespace XCEngine { namespace Debug { Profiler& Profiler::Get() { static Profiler instance; return instance; } void Profiler::Initialize() { if (m_initialized) { return; } m_initialized = true; } void Profiler::Shutdown() { m_samples.clear(); m_profileStack.clear(); m_initialized = false; } void Profiler::BeginProfile(const char* name) { ProfileNode node; node.name = name; node.startTime = std::chrono::duration_cast( std::chrono::high_resolution_clock::now().time_since_epoch()).count(); node.threadId = static_cast(std::hash{}(std::this_thread::get_id())); m_profileStack.push_back(node); } void Profiler::EndProfile() { if (m_profileStack.empty()) { return; } uint64_t endTime = std::chrono::duration_cast( std::chrono::high_resolution_clock::now().time_since_epoch()).count(); ProfileNode node = m_profileStack.back(); m_profileStack.pop_back(); node.endTime = endTime; ProfileSample sample; sample.name = node.name; sample.duration = node.endTime - node.startTime; sample.threadId = node.threadId; m_samples.push_back(sample); } void Profiler::BeginFrame() { m_frameStartTime = std::chrono::duration_cast( std::chrono::high_resolution_clock::now().time_since_epoch()).count(); } void Profiler::EndFrame() { m_samples.clear(); } void Profiler::MarkEvent(const char* name, uint64_t timestamp, uint32_t threadId) { } void Profiler::SetMarker(const char* name, uint32_t color) { } void Profiler::ExportChromeTracing(const Containers::String& filePath) { } } // namespace Debug } // namespace XCEngine