From d138a880bf8498ac6facc66ac4dbc9cddbd33891 Mon Sep 17 00:00:00 2001 From: Max Horn <max@quendi.de> Date: Mon, 27 Dec 2004 21:54:20 +0000 Subject: [PATCH] Fix for bug #1091748 (DIG: Starting new games takes a long time); turns out querying the debuglevel from the config-manager very often is too slow svn-id: r16345 --- base/engine.cpp | 44 ------------------------------------- base/gameDetector.cpp | 7 +++--- base/gameDetector.h | 2 ++ base/main.cpp | 51 ++++++++++++++++++++++++++++++++++++++++++- scumm/debugger.cpp | 3 ++- simon/debugger.cpp | 1 + 6 files changed, 59 insertions(+), 49 deletions(-) diff --git a/base/engine.cpp b/base/engine.cpp index adf4546d318..b69e6c6a2ae 100644 --- a/base/engine.cpp +++ b/base/engine.cpp @@ -158,50 +158,6 @@ void CDECL warning(const char *s, ...) { #endif } -static void debugHelper(char *buf) { -#ifndef _WIN32_WCE - printf("%s\n", buf); -#endif - -#if defined( USE_WINDBG ) - strcat(buf, "\n"); -#if defined( _WIN32_WCE ) - TCHAR buf_unicode[1024]; - MultiByteToWideChar(CP_ACP, 0, buf, strlen(buf) + 1, buf_unicode, sizeof(buf_unicode)); - OutputDebugString(buf_unicode); -#else - OutputDebugString(buf); -#endif -#endif - - fflush(stdout); -} - -void CDECL debug(int level, const char *s, ...) { - char buf[STRINGBUFLEN]; - va_list va; - - if (level > ConfMan.getInt("debuglevel")) - return; - - va_start(va, s); - vsprintf(buf, s, va); - va_end(va); - - debugHelper(buf); -} - -void CDECL debug(const char *s, ...) { - char buf[STRINGBUFLEN]; - va_list va; - - va_start(va, s); - vsprintf(buf, s, va); - va_end(va); - - debugHelper(buf); -} - void checkHeap() { #if defined(_MSC_VER) if (_heapchk() != _HEAPOK) { diff --git a/base/gameDetector.cpp b/base/gameDetector.cpp index bbee79d7f26..31b619fa557 100644 --- a/base/gameDetector.cpp +++ b/base/gameDetector.cpp @@ -333,9 +333,9 @@ void GameDetector::parseCommandLine(int argc, char **argv) { DO_OPTION_OPT('d', "debuglevel") if (option != NULL) ConfMan.set("debuglevel", (int)strtol(option, 0, 10), kTransientDomain); - int debuglevel = ConfMan.getInt("debuglevel"); - if (debuglevel) - printf("Debuglevel (from command line): %d\n", debuglevel); + gDebugLevel = ConfMan.getInt("debuglevel"); + if (gDebugLevel) + printf("Debuglevel (from command line): %d\n", gDebugLevel); else printf("Debuglevel (from command line): 0 - Game only\n"); END_OPTION @@ -510,6 +510,7 @@ ShowHelpAndExit: void GameDetector::setTarget(const String &name) { _targetName = name; ConfMan.setActiveDomain(name); + gDebugLevel = ConfMan.getInt("debuglevel"); } bool GameDetector::detectGame() { diff --git a/base/gameDetector.h b/base/gameDetector.h index e74176d5a42..fc45afd6132 100644 --- a/base/gameDetector.h +++ b/base/gameDetector.h @@ -38,6 +38,8 @@ enum { GF_DEFAULT_TO_1X_SCALER = 1 << 30 }; +extern int gDebugLevel; + struct GameSettings { const char *name; const char *description; diff --git a/base/main.cpp b/base/main.cpp index 432e967c97e..1fbe8262cb5 100644 --- a/base/main.cpp +++ b/base/main.cpp @@ -119,7 +119,7 @@ const char *gScummVMFeatures = "" #ifdef USE_MPEG2 "MPEG2 " #endif - ; + ; #if defined(WIN32) && defined(NO_CONSOLE) #include <cstdio> @@ -184,6 +184,9 @@ static void do_memory_test(void) { #endif + +int gDebugLevel = 0; + static bool launcherDialog(GameDetector &detector, OSystem *system) { system->beginGFXTransaction(); @@ -349,6 +352,8 @@ extern "C" int scummvm_main(GameDetector &detector, int argc, char *argv[]) { else ConfMan.loadDefaultConfigFile(); + gDebugLevel = ConfMan.getInt("debuglevel"); + // Update the config file ConfMan.set("versioninfo", gScummVMVersion, Common::ConfigManager::kApplicationDomain); @@ -417,6 +422,50 @@ extern "C" int scummvm_main(GameDetector &detector, int argc, char *argv[]) { END_OF_MAIN(); #endif +static void debugHelper(char *buf) { +#ifndef _WIN32_WCE + printf("%s\n", buf); +#endif + +#if defined( USE_WINDBG ) + strcat(buf, "\n"); +#if defined( _WIN32_WCE ) + TCHAR buf_unicode[1024]; + MultiByteToWideChar(CP_ACP, 0, buf, strlen(buf) + 1, buf_unicode, sizeof(buf_unicode)); + OutputDebugString(buf_unicode); +#else + OutputDebugString(buf); +#endif +#endif + + fflush(stdout); +} + +void CDECL debug(int level, const char *s, ...) { + char buf[STRINGBUFLEN]; + va_list va; + + if (level > gDebugLevel) + return; + + va_start(va, s); + vsprintf(buf, s, va); + va_end(va); + + debugHelper(buf); +} + +void CDECL debug(const char *s, ...) { + char buf[STRINGBUFLEN]; + va_list va; + + va_start(va, s); + vsprintf(buf, s, va); + va_end(va); + + debugHelper(buf); +} + /* #if !defined(__PALM_OS__) && !defined(_WIN32_WCE) void *operator new(size_t size) { diff --git a/scumm/debugger.cpp b/scumm/debugger.cpp index d99d20d81d9..2a94c96b933 100644 --- a/scumm/debugger.cpp +++ b/scumm/debugger.cpp @@ -44,7 +44,7 @@ void CDECL debugC(int channel, const char *s, ...) { // FIXME: Still spew all debug at -d9, for crashes in startup etc. // Add setting from commandline ( / abstract channel interface) - if (!(g_scumm->_debugFlags & channel) && (ConfMan.getInt("debuglevel") < 9)) + if (!(g_scumm->_debugFlags & channel) && (gDebugLevel < 9)) return; va_start(va, s); @@ -596,6 +596,7 @@ bool ScummDebugger::Cmd_DebugLevel(int argc, const char **argv) { } else { // set level int level = atoi(argv[1]); ConfMan.set("debuglevel", level, Common::ConfigManager::kTransientDomain); + gDebugLevel = ConfMan.getInt("debuglevel"); if (level > 0) { _vm->_debugMode = true; DebugPrintf("Debug level set to level %d\n", level); diff --git a/simon/debugger.cpp b/simon/debugger.cpp index d498daf1710..e0c35e991cf 100644 --- a/simon/debugger.cpp +++ b/simon/debugger.cpp @@ -91,6 +91,7 @@ bool Debugger::Cmd_DebugLevel(int argc, const char **argv) { } else { // set level int level = atoi(argv[1]); ConfMan.set("debuglevel", level, Common::ConfigManager::kTransientDomain); + gDebugLevel = ConfMan.getInt("debuglevel"); if (level > 0 && level < 10) { _vm->_debugMode = true; DebugPrintf("Debug level set to level %d\n", level);