mirror of
https://github.com/Relintai/pandemonium_engine.git
synced 2025-01-03 01:19:38 +01:00
Prefix messages with their thread id if they aren't coming from the main thread in the editor log.
This commit is contained in:
parent
deb5c49700
commit
e7fe643ce5
@ -96,22 +96,17 @@ void EditorLog::_error_handler(void *p_self, const char *p_func, const char *p_f
|
|||||||
EditorLog *self = (EditorLog *)p_self;
|
EditorLog *self = (EditorLog *)p_self;
|
||||||
|
|
||||||
String err_str;
|
String err_str;
|
||||||
|
|
||||||
if (p_errorexp && p_errorexp[0]) {
|
if (p_errorexp && p_errorexp[0]) {
|
||||||
err_str = String::utf8(p_errorexp);
|
err_str = String::utf8(p_errorexp);
|
||||||
} else {
|
} else {
|
||||||
err_str = String::utf8(p_file) + ":" + itos(p_line) + " - " + String::utf8(p_error);
|
err_str = String::utf8(p_file) + ":" + itos(p_line) + " - " + String::utf8(p_error);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (p_type == ERR_HANDLER_WARNING) {
|
|
||||||
self->add_message(err_str, MSG_TYPE_WARNING);
|
|
||||||
} else {
|
|
||||||
self->add_message(err_str, MSG_TYPE_ERROR);
|
|
||||||
}
|
|
||||||
|
|
||||||
MessageType message_type = p_type == ERR_HANDLER_WARNING ? MSG_TYPE_WARNING : MSG_TYPE_ERROR;
|
MessageType message_type = p_type == ERR_HANDLER_WARNING ? MSG_TYPE_WARNING : MSG_TYPE_ERROR;
|
||||||
|
|
||||||
if (self->current != Thread::get_caller_id()) {
|
if (self->current != Thread::get_caller_id()) {
|
||||||
self->call_deferred("add_message", err_str, message_type);
|
self->call_deferred("add_thread_message", Thread::get_caller_id(), err_str, message_type);
|
||||||
} else {
|
} else {
|
||||||
self->add_message(err_str, message_type);
|
self->add_message(err_str, message_type);
|
||||||
}
|
}
|
||||||
@ -260,39 +255,6 @@ void EditorLog::_process_message(const String &p_msg, MessageType p_type, bool p
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EditorLog::add_message(const String &p_msg, MessageType p_type) {
|
void EditorLog::add_message(const String &p_msg, MessageType p_type) {
|
||||||
/* TODO
|
|
||||||
bool restore = p_type != MSG_TYPE_STD;
|
|
||||||
switch (p_type) {
|
|
||||||
case MSG_TYPE_STD: {
|
|
||||||
} break;
|
|
||||||
case MSG_TYPE_ERROR: {
|
|
||||||
log->push_color(get_theme_color("error_color", "Editor"));
|
|
||||||
Ref<Texture> icon = get_theme_icon("Error", "EditorIcons");
|
|
||||||
log->add_image(icon);
|
|
||||||
log->add_text(" ");
|
|
||||||
tool_button->set_icon(icon);
|
|
||||||
} break;
|
|
||||||
case MSG_TYPE_WARNING: {
|
|
||||||
log->push_color(get_theme_color("warning_color", "Editor"));
|
|
||||||
Ref<Texture> icon = get_theme_icon("Warning", "EditorIcons");
|
|
||||||
log->add_image(icon);
|
|
||||||
log->add_text(" ");
|
|
||||||
tool_button->set_icon(icon);
|
|
||||||
} break;
|
|
||||||
case MSG_TYPE_EDITOR: {
|
|
||||||
// Distinguish editor messages from messages printed by the project
|
|
||||||
log->push_color(get_theme_color("font_color", "Editor") * Color(1, 1, 1, 0.6));
|
|
||||||
} break;
|
|
||||||
}
|
|
||||||
|
|
||||||
log->add_text(p_msg);
|
|
||||||
log->add_newline();
|
|
||||||
|
|
||||||
if (restore) {
|
|
||||||
log->pop();
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
// Make text split by new lines their own message.
|
// Make text split by new lines their own message.
|
||||||
// See #41321 for reasoning. At time of writing, multiple print()'s in running projects
|
// See #41321 for reasoning. At time of writing, multiple print()'s in running projects
|
||||||
// get grouped together and sent to the editor log as one message. This can mess with the
|
// get grouped together and sent to the editor log as one message. This can mess with the
|
||||||
@ -306,6 +268,22 @@ void EditorLog::add_message(const String &p_msg, MessageType p_type) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void EditorLog::add_thread_message(Thread::ID thread_id, const String &p_msg, MessageType p_type) {
|
||||||
|
// Make text split by new lines their own message.
|
||||||
|
// See #41321 for reasoning. At time of writing, multiple print()'s in running projects
|
||||||
|
// get grouped together and sent to the editor log as one message. This can mess with the
|
||||||
|
// search functionality (see the comments on the PR above for more details). This behavior
|
||||||
|
// also matches that of other IDE's.
|
||||||
|
Vector<String> lines = p_msg.split("\n", true);
|
||||||
|
int line_count = lines.size();
|
||||||
|
|
||||||
|
String thread_str = "(T: " + String::num(thread_id) + ") ";
|
||||||
|
|
||||||
|
for (int i = 0; i < line_count; i++) {
|
||||||
|
_process_message(thread_str + lines[i], p_type, i == line_count - 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void EditorLog::set_tool_button(ToolButton *p_tool_button) {
|
void EditorLog::set_tool_button(ToolButton *p_tool_button) {
|
||||||
tool_button = p_tool_button;
|
tool_button = p_tool_button;
|
||||||
}
|
}
|
||||||
@ -412,6 +390,9 @@ void EditorLog::_reset_message_counts() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void EditorLog::_bind_methods() {
|
void EditorLog::_bind_methods() {
|
||||||
|
ClassDB::bind_method(D_METHOD("add_message"), &EditorLog::add_message);
|
||||||
|
ClassDB::bind_method(D_METHOD("add_thread_message"), &EditorLog::add_thread_message);
|
||||||
|
|
||||||
ClassDB::bind_method(D_METHOD("_clear_request"), &EditorLog::_clear_request);
|
ClassDB::bind_method(D_METHOD("_clear_request"), &EditorLog::_clear_request);
|
||||||
ClassDB::bind_method(D_METHOD("_copy_request"), &EditorLog::_copy_request);
|
ClassDB::bind_method(D_METHOD("_copy_request"), &EditorLog::_copy_request);
|
||||||
|
|
||||||
|
@ -153,6 +153,8 @@ protected:
|
|||||||
|
|
||||||
public:
|
public:
|
||||||
void add_message(const String &p_msg, MessageType p_type = MSG_TYPE_STD);
|
void add_message(const String &p_msg, MessageType p_type = MSG_TYPE_STD);
|
||||||
|
//not thread safe!
|
||||||
|
void add_thread_message(Thread::ID thread_id, const String &p_msg, MessageType p_type = MSG_TYPE_STD);
|
||||||
void set_tool_button(ToolButton *p_tool_button);
|
void set_tool_button(ToolButton *p_tool_button);
|
||||||
void deinit();
|
void deinit();
|
||||||
|
|
||||||
|
@ -961,10 +961,11 @@ void EditorScriptEditorDebugger::_parse_message(const String &p_msg, uint64_t p_
|
|||||||
//OUT
|
//OUT
|
||||||
for (int i = 0; i < p_data.size(); i++) {
|
for (int i = 0; i < p_data.size(); i++) {
|
||||||
Array output = p_data[i];
|
Array output = p_data[i];
|
||||||
ERR_FAIL_COND_MSG(output.size() < 2, "Malformed output message from script debugger.");
|
ERR_FAIL_COND_MSG(output.size() < 3, "Malformed output message from script debugger.");
|
||||||
|
|
||||||
String str = output[0];
|
String str = output[0];
|
||||||
ScriptDebuggerRemote::MessageType type = (ScriptDebuggerRemote::MessageType)(int)(output[1]);
|
ScriptDebuggerRemote::MessageType type = (ScriptDebuggerRemote::MessageType)(int)(output[1]);
|
||||||
|
Thread::ID logger_thread_id = (Thread::ID)(output[2]);
|
||||||
|
|
||||||
EditorLog::MessageType msg_type;
|
EditorLog::MessageType msg_type;
|
||||||
switch (type) {
|
switch (type) {
|
||||||
@ -990,7 +991,11 @@ void EditorScriptEditorDebugger::_parse_message(const String &p_msg, uint64_t p_
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
EditorNode::get_log()->add_message(str, msg_type);
|
if (process_main_thread_id == 0 || process_main_thread_id == logger_thread_id) {
|
||||||
|
EditorNode::get_log()->add_message(str, msg_type);
|
||||||
|
} else {
|
||||||
|
EditorNode::get_log()->add_thread_message(logger_thread_id, str, msg_type);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else if (p_msg == "performance") {
|
} else if (p_msg == "performance") {
|
||||||
Array arr = p_data[0];
|
Array arr = p_data[0];
|
||||||
|
@ -496,6 +496,7 @@ void ScriptDebuggerRemote::_get_output() {
|
|||||||
Array msg_data;
|
Array msg_data;
|
||||||
msg_data.push_back(output_string.message);
|
msg_data.push_back(output_string.message);
|
||||||
msg_data.push_back(output_string.type);
|
msg_data.push_back(output_string.type);
|
||||||
|
msg_data.push_back(output_string.thread);
|
||||||
|
|
||||||
packet_peer_stream->put_var(msg_data);
|
packet_peer_stream->put_var(msg_data);
|
||||||
|
|
||||||
@ -1250,11 +1251,13 @@ void ScriptDebuggerRemote::_print_handler(void *p_this, const String &p_string,
|
|||||||
OutputString output_string;
|
OutputString output_string;
|
||||||
output_string.message = s;
|
output_string.message = s;
|
||||||
output_string.type = p_error ? MESSAGE_TYPE_ERROR : MESSAGE_TYPE_LOG;
|
output_string.type = p_error ? MESSAGE_TYPE_ERROR : MESSAGE_TYPE_LOG;
|
||||||
|
output_string.thread = Thread::get_caller_id();
|
||||||
sdr->output_strings.push_back(output_string);
|
sdr->output_strings.push_back(output_string);
|
||||||
|
|
||||||
if (overflowed) {
|
if (overflowed) {
|
||||||
output_string.message = "[output overflow, print less text!]";
|
output_string.message = "[output overflow, print less text!]";
|
||||||
output_string.type = MESSAGE_TYPE_ERROR;
|
output_string.type = MESSAGE_TYPE_ERROR;
|
||||||
|
output_string.thread = Thread::get_caller_id();
|
||||||
sdr->output_strings.push_back(output_string);
|
sdr->output_strings.push_back(output_string);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -91,6 +91,7 @@ class ScriptDebuggerRemote : public ScriptDebugger {
|
|||||||
struct OutputString {
|
struct OutputString {
|
||||||
String message;
|
String message;
|
||||||
int type;
|
int type;
|
||||||
|
Thread::ID thread;
|
||||||
};
|
};
|
||||||
|
|
||||||
List<OutputString> output_strings;
|
List<OutputString> output_strings;
|
||||||
|
Loading…
Reference in New Issue
Block a user