2026-03-25 16:13:02 +08:00
|
|
|
#include "Core/EditorConsoleSink.h"
|
|
|
|
|
|
|
|
|
|
namespace XCEngine {
|
|
|
|
|
namespace Debug {
|
|
|
|
|
|
2026-03-26 01:26:26 +08:00
|
|
|
EditorConsoleSink* EditorConsoleSink::s_instance = nullptr;
|
|
|
|
|
|
2026-03-25 16:13:02 +08:00
|
|
|
EditorConsoleSink* EditorConsoleSink::GetInstance() {
|
2026-03-26 01:26:26 +08:00
|
|
|
static EditorConsoleSink fallbackInstance;
|
|
|
|
|
return s_instance ? s_instance : &fallbackInstance;
|
2026-03-25 16:13:02 +08:00
|
|
|
}
|
|
|
|
|
|
2026-03-26 01:26:26 +08:00
|
|
|
EditorConsoleSink::EditorConsoleSink() {
|
|
|
|
|
s_instance = this;
|
|
|
|
|
}
|
2026-03-25 16:13:02 +08:00
|
|
|
|
2026-03-26 01:26:26 +08:00
|
|
|
EditorConsoleSink::~EditorConsoleSink() {
|
|
|
|
|
if (s_instance == this) {
|
|
|
|
|
s_instance = nullptr;
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-03-25 16:13:02 +08:00
|
|
|
|
|
|
|
|
void EditorConsoleSink::Log(const LogEntry& entry) {
|
|
|
|
|
std::lock_guard<std::mutex> lock(m_mutex);
|
|
|
|
|
if (m_logs.size() >= MAX_LOGS) {
|
|
|
|
|
m_logs.erase(m_logs.begin());
|
|
|
|
|
}
|
|
|
|
|
m_logs.push_back(entry);
|
|
|
|
|
if (m_callback) {
|
|
|
|
|
m_callback();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EditorConsoleSink::Flush() {
|
|
|
|
|
}
|
|
|
|
|
|
2026-03-26 01:26:26 +08:00
|
|
|
std::vector<LogEntry> EditorConsoleSink::GetLogs() const {
|
|
|
|
|
std::lock_guard<std::mutex> lock(m_mutex);
|
2026-03-25 16:13:02 +08:00
|
|
|
return m_logs;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EditorConsoleSink::Clear() {
|
|
|
|
|
std::lock_guard<std::mutex> lock(m_mutex);
|
|
|
|
|
m_logs.clear();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void EditorConsoleSink::SetCallback(std::function<void()> callback) {
|
|
|
|
|
m_callback = std::move(callback);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
} // namespace Debug
|
2026-03-26 01:26:26 +08:00
|
|
|
} // namespace XCEngine
|