feat: overhaul editor console panel and diagnostics

This commit is contained in:
2026-03-31 21:28:16 +08:00
parent 6d3a90ef74
commit ad237cb81e
9 changed files with 1176 additions and 20 deletions

View File

@@ -21,13 +21,18 @@ EditorConsoleSink::~EditorConsoleSink() {
}
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());
std::function<void()> callback;
{
std::lock_guard<std::mutex> lock(m_mutex);
if (m_logs.size() >= MAX_LOGS) {
m_logs.erase(m_logs.begin());
}
m_logs.push_back(EditorConsoleRecord{ m_nextSerial++, entry });
++m_revision;
callback = m_callback;
}
m_logs.push_back(entry);
if (m_callback) {
m_callback();
if (callback) {
callback();
}
}
@@ -35,16 +40,43 @@ void EditorConsoleSink::Flush() {
}
std::vector<LogEntry> EditorConsoleSink::GetLogs() const {
std::lock_guard<std::mutex> lock(m_mutex);
std::vector<LogEntry> logs;
logs.reserve(m_logs.size());
for (const EditorConsoleRecord& record : m_logs) {
logs.push_back(record.entry);
}
return logs;
}
std::vector<EditorConsoleRecord> EditorConsoleSink::GetRecords() const {
std::lock_guard<std::mutex> lock(m_mutex);
return m_logs;
}
void EditorConsoleSink::Clear() {
uint64_t EditorConsoleSink::GetRevision() const {
std::lock_guard<std::mutex> lock(m_mutex);
m_logs.clear();
return m_revision;
}
void EditorConsoleSink::Clear() {
std::function<void()> callback;
{
std::lock_guard<std::mutex> lock(m_mutex);
if (m_logs.empty()) {
return;
}
m_logs.clear();
++m_revision;
callback = m_callback;
}
if (callback) {
callback();
}
}
void EditorConsoleSink::SetCallback(std::function<void()> callback) {
std::lock_guard<std::mutex> lock(m_mutex);
m_callback = std::move(callback);
}