From 3e9c10f9e11935a82d33fd5c66592d795c279777 Mon Sep 17 00:00:00 2001 From: planetmaker Date: Tue, 8 Apr 2014 20:19:41 +0000 Subject: (svn r26449) -Add: Allow more sound sleep for dedicated servers when there's nothing to do and nobody paying attention --- src/network/network.cpp | 12 ++++++++++++ src/network/network.h | 2 ++ src/video/dedicated_v.cpp | 10 +++++++++- 3 files changed, 23 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/network/network.cpp b/src/network/network.cpp index 57a6412c6..a3c8fd4a9 100644 --- a/src/network/network.cpp +++ b/src/network/network.cpp @@ -96,6 +96,18 @@ byte _network_clients_connected = 0; /* Some externs / forwards */ extern void StateGameLoop(); +/** + * Return whether there is any client connected or trying to connect at all. + * @return whether we have any client activity + */ +bool HasClients() +{ + NetworkClientSocket *cs; + FOR_ALL_CLIENT_SOCKETS(cs) return true; + + return false; +} + /** * Basically a client is leaving us right now. */ diff --git a/src/network/network.h b/src/network/network.h index 3dd63d03c..26f94482e 100644 --- a/src/network/network.h +++ b/src/network/network.h @@ -18,6 +18,7 @@ void NetworkStartUp(); void NetworkShutDown(); void NetworkDrawChatMessage(); +bool HasClients(); extern bool _networking; ///< are we in networking mode? extern bool _network_server; ///< network-server is active @@ -31,6 +32,7 @@ extern bool _is_network_server; ///< Does this client wants to be a network-ser static inline void NetworkStartUp() {} static inline void NetworkShutDown() {} static inline void NetworkDrawChatMessage() {} +static inline bool HasClients() { return false; } #define _networking 0 #define _network_server 0 diff --git a/src/video/dedicated_v.cpp b/src/video/dedicated_v.cpp index 8e5b9ea91..9be1b2d3c 100644 --- a/src/video/dedicated_v.cpp +++ b/src/video/dedicated_v.cpp @@ -316,7 +316,15 @@ void VideoDriver_Dedicated::MainLoop() } /* Don't sleep when fast forwarding (for desync debugging) */ - if (!_ddc_fastforward) CSleep(1); + if (!_ddc_fastforward) { + /* Sleep longer on a dedicated server, if the game is paused and no clients connected. + * That can allow the CPU to better use deep sleep states. */ + if (_pause_mode != 0 && !HasClients()) { + CSleep(100); + } else { + CSleep(1); + } + } } } -- cgit v1.2.3-54-g00ecf