summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabio Alessandrelli <fabio.alessandrelli@gmail.com>2022-02-06 17:18:44 +0100
committerFabio Alessandrelli <fabio.alessandrelli@gmail.com>2022-02-06 17:36:48 +0100
commit65837973051e2aea43019fb5c20ec4a1debf0bcb (patch)
treed648156c1e697e46ef6d7a7957e0bea8d8a1c8f7
parent87f4bbd6685fd6e2e43b05a6255ab360bd17dcf3 (diff)
[Debugger] Move servers-related behaviours to ServersDebugger.
Forcing draw during debug break is now handled by ServersDebugger, and only happens when the proper message is sent from the EditorDebugger ("servers:draw"). In a similar way, briging the window in foreground is now also handled by ServersDebugger upon receiving "servers:foreground" which is sent by the EditorDebugger when resuming from a break ("continue").
-rw-r--r--core/debugger/debugger_marshalls.h1
-rw-r--r--core/debugger/remote_debugger.cpp12
-rw-r--r--editor/debugger/script_editor_debugger.cpp4
-rw-r--r--servers/debugger/servers_debugger.cpp16
-rw-r--r--servers/debugger/servers_debugger.h3
5 files changed, 23 insertions, 13 deletions
diff --git a/core/debugger/debugger_marshalls.h b/core/debugger/debugger_marshalls.h
index 1cf8daeac0..378c3af8aa 100644
--- a/core/debugger/debugger_marshalls.h
+++ b/core/debugger/debugger_marshalls.h
@@ -32,7 +32,6 @@
#define DEBUGGER_MARSHARLLS_H
#include "core/object/script_language.h"
-#include "servers/rendering_server.h"
struct DebuggerMarshalls {
struct ScriptStackVariable {
diff --git a/core/debugger/remote_debugger.cpp b/core/debugger/remote_debugger.cpp
index b9c494aaca..2fce23d003 100644
--- a/core/debugger/remote_debugger.cpp
+++ b/core/debugger/remote_debugger.cpp
@@ -444,11 +444,7 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
Input::get_singleton()->set_mouse_mode(Input::MOUSE_MODE_VISIBLE);
}
- uint64_t loop_begin_usec = 0;
- uint64_t loop_time_sec = 0;
while (is_peer_connected()) {
- loop_begin_usec = OS::get_singleton()->get_ticks_usec();
-
flush_output();
peer->poll();
@@ -475,7 +471,6 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
} else if (command == "continue") {
script_debugger->set_depth(-1);
script_debugger->set_lines_left(-1);
- DisplayServer::get_singleton()->window_move_to_foreground();
break;
} else if (command == "break") {
@@ -551,13 +546,6 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
OS::get_singleton()->delay_usec(10000);
OS::get_singleton()->process_and_drop_events();
}
-
- // This is for the camera override to stay live even when the game is paused from the editor
- loop_time_sec = (OS::get_singleton()->get_ticks_usec() - loop_begin_usec) / 1000000.0f;
- RenderingServer::get_singleton()->sync();
- if (RenderingServer::get_singleton()->has_changed()) {
- RenderingServer::get_singleton()->draw(true, loop_time_sec * Engine::get_singleton()->get_time_scale());
- }
}
send_message("debug_exit", Array());
diff --git a/editor/debugger/script_editor_debugger.cpp b/editor/debugger/script_editor_debugger.cpp
index 378ba5d7c8..cf5d8ca4ff 100644
--- a/editor/debugger/script_editor_debugger.cpp
+++ b/editor/debugger/script_editor_debugger.cpp
@@ -129,6 +129,7 @@ void ScriptEditorDebugger::debug_continue() {
_clear_execution();
_put_msg("continue", Array());
+ _put_msg("servers:foreground", Array());
}
void ScriptEditorDebugger::update_tabs() {
@@ -834,6 +835,9 @@ void ScriptEditorDebugger::_notification(int p_what) {
msg.push_back(cam->get_far());
_put_msg("scene:override_camera_3D:transform", msg);
}
+ if (breaked) {
+ _put_msg("servers:draw", Array());
+ }
}
const uint64_t until = OS::get_singleton()->get_ticks_msec() + 20;
diff --git a/servers/debugger/servers_debugger.cpp b/servers/debugger/servers_debugger.cpp
index a0f415eb94..d1391937d9 100644
--- a/servers/debugger/servers_debugger.cpp
+++ b/servers/debugger/servers_debugger.cpp
@@ -395,8 +395,24 @@ void ServersDebugger::deinitialize() {
Error ServersDebugger::_capture(void *p_user, const String &p_cmd, const Array &p_data, bool &r_captured) {
ERR_FAIL_COND_V(!singleton, ERR_BUG);
+ r_captured = true;
if (p_cmd == "memory") {
singleton->_send_resource_usage();
+ } else if (p_cmd == "draw") { // Forced redraw.
+ // For camera override to stay live when the game is paused from the editor.
+ double delta = 0.0;
+ if (singleton->last_draw_time) {
+ delta = (OS::get_singleton()->get_ticks_usec() - singleton->last_draw_time) / 1000000.0;
+ }
+ singleton->last_draw_time = OS::get_singleton()->get_ticks_usec();
+ RenderingServer::get_singleton()->sync();
+ if (RenderingServer::get_singleton()->has_changed()) {
+ RenderingServer::get_singleton()->draw(true, delta);
+ }
+ } else if (p_cmd == "foreground") {
+ singleton->last_draw_time = 0.0;
+ DisplayServer::get_singleton()->window_move_to_foreground();
+ singleton->servers_profiler->skip_frame();
} else {
r_captured = false;
}
diff --git a/servers/debugger/servers_debugger.h b/servers/debugger/servers_debugger.h
index 3a020e0633..d1c55dc690 100644
--- a/servers/debugger/servers_debugger.h
+++ b/servers/debugger/servers_debugger.h
@@ -33,6 +33,8 @@
#include "core/debugger/debugger_marshalls.h"
+#include "servers/rendering_server.h"
+
class ServersDebugger {
public:
// Memory usage
@@ -108,6 +110,7 @@ private:
class ServersProfiler;
class VisualProfiler;
+ double last_draw_time = 0.0;
Ref<ServersProfiler> servers_profiler;
Ref<VisualProfiler> visual_profiler;