From 25fa4363180f1ecaf3ee855eee77adc516f84190 Mon Sep 17 00:00:00 2001 From: Mark Vejvoda Date: Fri, 28 Dec 2012 01:02:09 +0000 Subject: [PATCH] - added a cache and thread for loading of native language names to improve speed --- source/glest_game/global/lang.cpp | 23 +++++++++++++++++------ source/glest_game/main/main.cpp | 19 +++++++++++++++++++ 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/source/glest_game/global/lang.cpp b/source/glest_game/global/lang.cpp index 9e78716f..fc0ea0f2 100644 --- a/source/glest_game/global/lang.cpp +++ b/source/glest_game/global/lang.cpp @@ -564,14 +564,25 @@ string Lang::getLanguageFile(string uselanguage) { string Lang::getNativeLanguageName(string uselanguage, string testLanguageFile) { string result = uselanguage; - Properties stringsTest; - stringsTest.load(testLanguageFile); - try { - result = stringsTest.getString("NativeLanguageName"); + static map cachedNativeLanguageNames; + if(cachedNativeLanguageNames.find(testLanguageFile) != cachedNativeLanguageNames.end()) { + result = cachedNativeLanguageNames[testLanguageFile]; } - //catch(const exception &ex) { - catch(...) { + else { + Properties stringsTest; + stringsTest.load(testLanguageFile); + + try { + result = stringsTest.getString("NativeLanguageName"); + cachedNativeLanguageNames[testLanguageFile] = result; + + //if(SystemFlags::VERBOSE_MODE_ENABLED) printf("Caching native language name for [%s] = [%s]\n",testLanguageFile.c_str(),result.c_str()); + printf("Caching native language name for [%s] = [%s]\n",testLanguageFile.c_str(),result.c_str()); + } + //catch(const exception &ex) { + catch(...) { + } } return result; diff --git a/source/glest_game/main/main.cpp b/source/glest_game/main/main.cpp index 27b8130a..a6a201d0 100644 --- a/source/glest_game/main/main.cpp +++ b/source/glest_game/main/main.cpp @@ -111,6 +111,13 @@ static FileCRCPreCacheThread *preCacheThread = NULL; static string runtimeErrorMsg = ""; #endif +class NavtiveLanguageNameListCacheGenerator : public SimpleTaskCallbackInterface { + virtual void simpleTask(BaseThread *callingThread) { + Lang &lang = Lang::getInstance(); + lang.getDiscoveredLanguageList(true); + } +}; + void cleanupCRCThread() { if(preCacheThread != NULL) { if(SystemFlags::VERBOSE_MODE_ENABLED) printf("In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__); @@ -4662,6 +4669,18 @@ int glestMain(int argc, char** argv) { preCacheThread->start(); } + std::auto_ptr lngCacheGen; + std::auto_ptr languageCacheGen; + + bool startNativeLanguageNamesPrecacheThread = config.getBool("PreCacheNativeLanguageNamesThread","true"); + if(startNativeLanguageNamesPrecacheThread == true && + GlobalStaticFlags::getIsNonGraphicalModeEnabled() == false) { + lngCacheGen.reset(new NavtiveLanguageNameListCacheGenerator()); + languageCacheGen.reset(new SimpleTaskThread(lngCacheGen.get(),1)); + + languageCacheGen->start(); + } + // test //Shared::Platform::MessageBox(NULL,"Mark's test.","Test",0); //throw megaglest_runtime_error("test!");