restore app priority to normal when we don't have focus and give

up CPU each frame
This commit is contained in:
Glenn Maynard
2003-01-19 11:00:53 +00:00
parent 45ee7a9b1d
commit ee211f3b74
+33 -4
View File
@@ -71,6 +71,8 @@
HWND g_hWndMain = NULL; HWND g_hWndMain = NULL;
#endif #endif
static bool g_bHasFocus = true;
#include <time.h> #include <time.h>
@@ -165,17 +167,25 @@ static void SetIcon()
SDL_FreeSurface(srf); SDL_FreeSurface(srf);
} }
static void BoostAppPri() static bool ChangeAppPri()
{ {
if(PREFSMAN->m_iBoostAppPriority == 0) if(PREFSMAN->m_iBoostAppPriority == 0)
return; return false;
/* If -1 and this is a debug build, don't. It makes the debugger sluggish. */ /* If -1 and this is a debug build, don't. It makes the debugger sluggish. */
#ifdef DEBUG #ifdef DEBUG
if(PREFSMAN->m_iBoostAppPriority == -1) if(PREFSMAN->m_iBoostAppPriority == -1)
return; return false;
#endif #endif
return true;
}
static void BoostAppPri()
{
if(!ChangeAppPri())
return;
#ifdef WIN32 #ifdef WIN32
/* We just want a slight boost, so we don't skip needlessly if something happens /* We just want a slight boost, so we don't skip needlessly if something happens
* in the background. We don't really want to be high-priority--above normal should * in the background. We don't really want to be high-priority--above normal should
@@ -199,6 +209,14 @@ static void BoostAppPri()
#endif #endif
} }
static void RestoreAppPri()
{
if(!ChangeAppPri())
return;
SetPriorityClass(GetCurrentProcess(), NORMAL_PRIORITY_CLASS);
}
int main(int argc, char* argv[]) int main(int argc, char* argv[])
{ {
ChangeToDirOfExecutable(argv[0]); ChangeToDirOfExecutable(argv[0]);
@@ -451,6 +469,14 @@ static void GameLoop()
case SDL_VIDEORESIZE: case SDL_VIDEORESIZE:
DISPLAY->ResolutionChanged(event.resize.w, event.resize.h); DISPLAY->ResolutionChanged(event.resize.w, event.resize.h);
break; break;
case SDL_ACTIVEEVENT:
g_bHasFocus = !!event.active.gain;
LOG->Trace("App %s focus", g_bHasFocus? "has":"doesn't have");
if(event.active.gain)
BoostAppPri();
else
RestoreAppPri();
} }
} }
@@ -483,7 +509,10 @@ static void GameLoop()
DISPLAY->Flip(); DISPLAY->Flip();
::Sleep( 0 ); // give some time to other processes and threads if(g_bHasFocus)
::Sleep( 0 ); // give some time to other processes and threads
else
::Sleep( 2 ); // give more time to other processes and threads, but not so much that we skip sound
} }
} }