diff options
author | Andrei Karas <akaras@inbox.ru> | 2011-05-08 05:04:05 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2011-05-08 05:04:05 +0300 |
commit | efef5c2b07c1b51ec67d59bbbd177afc2f7f1724 (patch) | |
tree | ffa425c6811fc708b2a35da984c742a39dfd34ae /src/gui | |
parent | 3a31b41edcbac0f06f5f4a784071130b30cf4728 (diff) | |
download | mv-efef5c2b07c1b51ec67d59bbbd177afc2f7f1724.tar.gz mv-efef5c2b07c1b51ec67d59bbbd177afc2f7f1724.tar.bz2 mv-efef5c2b07c1b51ec67d59bbbd177afc2f7f1724.tar.xz mv-efef5c2b07c1b51ec67d59bbbd177afc2f7f1724.zip |
Improved algorithm for cleaning sdltext cache.
Now cache using less memory, but possible some times working bit slower.
Diffstat (limited to 'src/gui')
-rw-r--r-- | src/gui/sdlfont.cpp | 43 |
1 files changed, 33 insertions, 10 deletions
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 <guichan/exception.hpp> 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<SDLTextChunk> *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 +} |