Sophie

Sophie

distrib > Mageia > 1 > i586 > media > core-updates-src > by-pkgid > 05cc51920a41c76f49292e57bcb95121 > files > 3

manaplus-1.1.5.1-5.mga1.src.rpm

From 73067138141ed121a4004538fd654e30e164c43c Mon Sep 17 00:00:00 2001
From: Andrei Karas <akaras@inbox.ru>
Date: Sun, 8 May 2011 05:04:05 +0300
Subject: [PATCH 3/3] Improved algorithm for cleaning sdltext cache.

Now cache using less memory, but possible some times working bit slower.
---
 src/gui/sdlfont.cpp |   43 +++++++++++++++++++++++++++++++++----------
 src/main.h          |    1 +
 2 files changed, 34 insertions(+), 10 deletions(-)

diff --git a/src/gui/sdlfont.cpp b/src/gui/sdlfont.cpp
index 862ec84..655a00f 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
+}
diff --git a/src/main.h b/src/main.h
index 883c7a9..0dd9374 100644
--- a/src/main.h
+++ b/src/main.h
@@ -88,6 +88,7 @@
 //define DEBUG_FONT 1
 //define DEBUG_FONT_COUNTERS 1
 //define DEBUG_ALPHA_CACHE 1
+//define DEBUG_OPENGL_LEAKS 1
 
 #define SMALL_VERSION "1.1.5.1"
 #define CHECK_VERSION "01.01.05.01"
-- 
1.7.1