(svn r26449) -Add: Allow more sound sleep for dedicated servers when there's nothing to do and nobody paying attention

This commit is contained in:
planetmaker 2014-04-08 20:19:41 +00:00
parent bef953a32c
commit 3e9c10f9e1
3 changed files with 23 additions and 1 deletions

View File

@ -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.
*/

View File

@ -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

View File

@ -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);
}
}
}
}