Fix Game window stops responding when debugger pauses

Fixes #73374

As of godot 4 On windows/osx the game window will be frozen and will not
be updated.

In the debugger loop it calls

OS::get_singleton()->process_and_drop_events();
which allows windows/osx to handle system events. If the window doesn't
handle these events then both systems will judge the window to be 'not
responding' (osx beachball cursor)

When the event processing code was migrated from OS to DisplayServer the
process_and_drop_events() logic was moved to DisplayServer, but the call
inside the remote debugger pause loop was not updated to call the
DisplayServer version, there are currently no implementations of
OS::process_and_drop_events() so i removed it and switched to the new
DisplayServer::force_process_and_drop_events() method.
This commit is contained in:
Jamie Pate 2024-07-10 13:36:01 -07:00
parent 26d1577f39
commit b18e1e0dcd
2 changed files with 2 additions and 3 deletions

View File

@ -39,6 +39,7 @@
#include "core/io/resource_loader.h" #include "core/io/resource_loader.h"
#include "core/object/script_language.h" #include "core/object/script_language.h"
#include "core/os/os.h" #include "core/os/os.h"
#include "servers/display_server.h"
class RemoteDebugger::PerformanceProfiler : public EngineProfiler { class RemoteDebugger::PerformanceProfiler : public EngineProfiler {
Object *performance = nullptr; Object *performance = nullptr;
@ -539,7 +540,7 @@ void RemoteDebugger::debug(bool p_can_continue, bool p_is_error_breakpoint) {
OS::get_singleton()->delay_usec(10000); OS::get_singleton()->delay_usec(10000);
if (Thread::get_caller_id() == Thread::get_main_id()) { if (Thread::get_caller_id() == Thread::get_main_id()) {
// If this is a busy loop on the main thread, events still need to be processed. // If this is a busy loop on the main thread, events still need to be processed.
OS::get_singleton()->process_and_drop_events(); DisplayServer::get_singleton()->force_process_and_drop_events();
} }
} }
} }

View File

@ -328,8 +328,6 @@ public:
virtual void benchmark_end_measure(const String &p_context, const String &p_what); virtual void benchmark_end_measure(const String &p_context, const String &p_what);
virtual void benchmark_dump(); virtual void benchmark_dump();
virtual void process_and_drop_events() {}
virtual Error setup_remote_filesystem(const String &p_server_host, int p_port, const String &p_password, String &r_project_path); virtual Error setup_remote_filesystem(const String &p_server_host, int p_port, const String &p_password, String &r_project_path);
enum PreferredTextureFormat { enum PreferredTextureFormat {