[Net] Make debugger peer less CPU intensive.

Make sure that RemoteDebuggerPeer wait at least 100us between polls
(effectively forcing a min tick of 100 microseconds).

This greatly improve performances (the call to poll was useless since
during low traffic, writes would always be available, and during high
traffic, reads would always be available, effectively making it a
busy-waiting loop). We could further improve this, by separating the two
polls, and adjust the min tick based on load, but this is most likely
more than enough already without sacrificing too much on high loads.
This commit is contained in:
Fabio Alessandrelli 2021-03-16 21:05:06 +01:00
parent 4c56fcd6cd
commit 87353c90fa

View file

@ -190,13 +190,18 @@ Error RemoteDebuggerPeerTCP::connect_to_host(const String &p_host, uint16_t p_po
} }
void RemoteDebuggerPeerTCP::_thread_func(void *p_ud) { void RemoteDebuggerPeerTCP::_thread_func(void *p_ud) {
const uint64_t min_tick = 100;
RemoteDebuggerPeerTCP *peer = (RemoteDebuggerPeerTCP *)p_ud; RemoteDebuggerPeerTCP *peer = (RemoteDebuggerPeerTCP *)p_ud;
while (peer->running && peer->is_peer_connected()) { while (peer->running && peer->is_peer_connected()) {
uint64_t ticks_usec = OS::get_singleton()->get_ticks_usec();
peer->_poll(); peer->_poll();
if (!peer->is_peer_connected()) { if (!peer->is_peer_connected()) {
break; break;
} }
peer->tcp_client->poll(NetSocket::POLL_TYPE_IN_OUT, 1); ticks_usec = OS::get_singleton()->get_ticks_usec() - ticks_usec;
if (ticks_usec < min_tick) {
OS::get_singleton()->delay_usec(min_tick - ticks_usec);
}
} }
} }