From efef5c2b07c1b51ec67d59bbbd177afc2f7f1724 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Sun, 8 May 2011 05:04:05 +0300 Subject: Improved algorithm for cleaning sdltext cache. Now cache using less memory, but possible some times working bit slower. --- src/gui/sdlfont.cpp | 43 +++++++++++++++++++++++++++++++++---------- 1 file changed, 33 insertions(+), 10 deletions(-) (limited to 'src/gui/sdlfont.cpp') diff --git a/src/gui/sdlfont.cpp b/src/gui/sdlfont.cpp index 862ec8434..655a00f05 100644 --- a/src/gui/sdlfont.cpp +++ b/src/gui/sdlfont.cpp @@ -36,8 +36,10 @@ #include const unsigned int CACHE_SIZE = 256; -const unsigned int CACHE_SIZE_SMALL1 = 90; -const unsigned int CACHE_SIZE_SMALL2 = 150; +const unsigned int CACHE_SIZE_SMALL1 = 2; +const unsigned int CACHE_SIZE_SMALL2 = 50; +const unsigned int CACHE_SIZE_SMALL3 = 170; +const unsigned int CLEAN_TIME = 5; char *strBuf; @@ -127,7 +129,7 @@ SDLFont::SDLFont(const std::string &filename, int size, int style) : } TTF_SetFontStyle(mFont, style); - mCleanTime = cur_time + 120; + mCleanTime = cur_time + CLEAN_TIME; } SDLFont::~SDLFont() @@ -243,12 +245,12 @@ void SDLFont::drawString(gcn::Graphics *graphics, if (!mCleanTime) { - mCleanTime = cur_time + 120; + mCleanTime = cur_time + CLEAN_TIME; } else if (mCleanTime < cur_time) { doClean(); - mCleanTime = cur_time + 120; + mCleanTime = cur_time + CLEAN_TIME; } } @@ -321,20 +323,41 @@ void SDLFont::doClean() for (int f = 0; f < CACHES_NUMBER; f ++) { std::list *cache = &mCache[f]; - if (cache->size() > CACHE_SIZE_SMALL2) + const unsigned size = cache->size(); +#ifdef DEBUG_FONT_COUNTERS + logger->log("ptr: %d, size: %d", f, size); +#endif + if (size > CACHE_SIZE_SMALL3) + { +#ifdef DEBUG_FONT_COUNTERS + mDeleteCounter += 100; +#endif + for (int d = 0; d < 100; d ++) + cache->pop_back(); +#ifdef DEBUG_FONT_COUNTERS + logger->log("delete3"); +#endif + } + else if (size > CACHE_SIZE_SMALL2) { #ifdef DEBUG_FONT_COUNTERS - mDeleteCounter += 10; + mDeleteCounter += 20; #endif - for (int d = 0; d < 10; d ++) + for (int d = 0; d < 20; d ++) cache->pop_back(); +#ifdef DEBUG_FONT_COUNTERS + logger->log("delete2"); +#endif } - else if (cache->size() > CACHE_SIZE_SMALL1) + else if (size > CACHE_SIZE_SMALL1) { #ifdef DEBUG_FONT_COUNTERS mDeleteCounter ++; #endif cache->pop_back(); +#ifdef DEBUG_FONT_COUNTERS + logger->log("delete1"); +#endif } } -} \ No newline at end of file +} -- cgit v1.2.3-70-g09d2