Jeck - GameStateMenu releases background image from cache, minor cache fixes.

This commit is contained in:
wagic.jeck
2009-09-20 23:56:08 +00:00
parent 31cf4ac884
commit 8c9374fe1f
5 changed files with 19 additions and 21 deletions
-1
View File
@@ -86,7 +86,6 @@ public:
bool ReleaseQuad(JQuad* quad); //We're done with this quad, so delete and stop tracking. True if existed. bool ReleaseQuad(JQuad* quad); //We're done with this quad, so delete and stop tracking. True if existed.
protected: protected:
JTexture * texture; JTexture * texture;
bool bVRAM;
vector<WTrackedQuad*> trackedQuads; vector<WTrackedQuad*> trackedQuads;
static vector<WTrackedQuad*> garbageTQs; static vector<WTrackedQuad*> garbageTQs;
}; };
+2 -3
View File
@@ -14,7 +14,7 @@
#define LARGE_CACHE_LIMIT 5000000 #define LARGE_CACHE_LIMIT 5000000
#define LARGE_CACHE_ITEMS 200 #define LARGE_CACHE_ITEMS 200
#define SMALL_CACHE_LIMIT 2000000 #define SMALL_CACHE_LIMIT 1000000
#define SMALL_CACHE_ITEMS 100 #define SMALL_CACHE_ITEMS 100
@@ -22,7 +22,7 @@
#define MAX_CACHE_OBJECTS HUGE_CACHE_ITEMS #define MAX_CACHE_OBJECTS HUGE_CACHE_ITEMS
#define MAX_CACHE_ATTEMPTS 10 #define MAX_CACHE_ATTEMPTS 10
#define MAX_CACHE_MISSES 200 #define MAX_CACHE_MISSES 200
#define MAX_CACHED_SAMPLES 0 #define MAX_CACHED_SAMPLES 4
#define MAX_CACHE_GARBAGE 10 #define MAX_CACHE_GARBAGE 10
enum ENUM_WRES_INFO{ enum ENUM_WRES_INFO{
@@ -137,7 +137,6 @@ public:
void Release(JTexture * tex); void Release(JTexture * tex);
void Release(JQuad * quad); void Release(JQuad * quad);
void Release(JSample * sample); void Release(JSample * sample);
bool RemoveOldest(); bool RemoveOldest();
bool Cleanup(); //Force a cleanup. Return false if nothing removed. bool Cleanup(); //Force a cleanup. Return false if nothing removed.
+6 -2
View File
@@ -163,7 +163,7 @@ void GameStateMenu::Start(){
SAFE_DELETE(playerdata); SAFE_DELETE(playerdata);
#if defined DEBUG_CACHE #if defined DEBUG_CACHE
resources.ClearUnlocked(); //So we can tell if we've any extra locks. /*resources.ClearUnlocked(); //So we can tell if we've any extra locks.
if(!resources.menuCached) if(!resources.menuCached)
resources.menuCached = resources.CountCached(); resources.menuCached = resources.CountCached();
@@ -174,7 +174,7 @@ void GameStateMenu::Start(){
sprintf(buf,"Warning: %u leftover locked items.",i); sprintf(buf,"Warning: %u leftover locked items.",i);
resources.debugMessage = buf; resources.debugMessage = buf;
} }
*/
#endif #endif
} }
@@ -292,6 +292,10 @@ void GameStateMenu::End()
resources.Release(bgTexture); resources.Release(bgTexture);
resources.Release(movingWTexture); resources.Release(movingWTexture);
resources.Release(mBg);
resources.Release(mMovingW);
} }
+1 -1
View File
@@ -317,7 +317,7 @@ void WCachedTexture::Nullify(){
texture = NULL; texture = NULL;
} }
void WCachedTexture::Trash(){ void WCachedTexture::Trash(){
SAFE_DELETE(texture); SAFE_DELETE(texture);
vector<WTrackedQuad*>::iterator it; vector<WTrackedQuad*>::iterator it;
WTrackedQuad * tq = NULL; WTrackedQuad * tq = NULL;
+10 -14
View File
@@ -29,6 +29,7 @@ bool WResourceManager::RemoveOldest(){
void WResourceManager::DebugRender(){ void WResourceManager::DebugRender(){
JRenderer* renderer = JRenderer::GetInstance(); JRenderer* renderer = JRenderer::GetInstance();
JLBFont * font = resources.GetJLBFont(Constants::MAIN_FONT); JLBFont * font = resources.GetJLBFont(Constants::MAIN_FONT);
font->SetColor(ARGB(255,255,255,255));
if(!font || !renderer) if(!font || !renderer)
return; return;
@@ -274,7 +275,7 @@ JQuad * WResourceManager::GetQuad(int id){
} }
JQuad * WResourceManager::RetrieveTempQuad(string filename){ JQuad * WResourceManager::RetrieveTempQuad(string filename){
return RetrieveQuad(filename,0,0,0,0,"",RETRIEVE_NORMAL); return RetrieveQuad(filename,0,0,0,0,"temporary",RETRIEVE_NORMAL);
} }
JQuad * WResourceManager::RetrieveQuad(string filename, float offX, float offY, float width, float height, string resname, int style, int submode){ JQuad * WResourceManager::RetrieveQuad(string filename, float offX, float offY, float width, float height, string resname, int style, int submode){
@@ -501,18 +502,12 @@ JSample * WResourceManager::RetrieveSample(string filename, int style, int submo
//Check cache. This just tracks misses. //Check cache. This just tracks misses.
return NULL; return NULL;
WCachedSample * tc = NULL; WCachedSample * tc = NULL;
tc = sampleWCache.Get(filename,submode); tc = sampleWCache.Retrieve(filename,style,submode);
lastError = sampleWCache.mError; lastError = sampleWCache.mError;
//Sample exists! Get it. //Sample exists! Get it.
if(tc && tc->isGood()){ if(tc && tc->isGood()){
JSample * js = tc->Actual(); JSample * js = tc->Actual();
//Samples are freed when played, so remove this. Because maxCached is 0, this will Nullify() first.
sampleWCache.RemoveItem(tc,true);
//Adjust sizes accordingly.
sampleWCache.cacheSize = 0;
sampleWCache.totalSize = 0;
return js; return js;
} }
@@ -1167,7 +1162,7 @@ cacheItem * WCache<cacheItem, cacheActual>::Retrieve(string filename, int style,
} }
else{ else{
//Something went wrong. //Something went wrong.
Delete(tc); RemoveItem(tc);
} }
} }
@@ -1359,11 +1354,11 @@ template <class cacheItem, class cacheActual>
WCache<cacheItem, cacheActual>::~WCache(){ WCache<cacheItem, cacheActual>::~WCache(){
typename map<string,cacheItem*>::iterator it; typename map<string,cacheItem*>::iterator it;
//Delete from cache & managed
for(it=cache.begin();it!=cache.end();it++){ for(it=cache.begin();it!=cache.end();it++){
if(!it->second) if(!it->second)
continue; continue;
//Delete(it->second);
SAFE_DELETE(it->second); SAFE_DELETE(it->second);
} }
@@ -1371,10 +1366,10 @@ WCache<cacheItem, cacheActual>::~WCache(){
if(!it->second) if(!it->second)
continue; continue;
//Delete(it->second);
SAFE_DELETE(it->second); SAFE_DELETE(it->second);
} }
//Clean up all the garbage
typename vector<cacheItem*>::iterator g; typename vector<cacheItem*>::iterator g;
for(g=garbage.begin();g!=garbage.end();g++){ for(g=garbage.begin();g!=garbage.end();g++){
SAFE_DELETE(*g); SAFE_DELETE(*g);
@@ -1497,6 +1492,8 @@ bool WCache<cacheItem, cacheActual>::Delete(cacheItem * item){
SAFE_DELETE(item); SAFE_DELETE(item);
else{ else{
item->Trash(); item->Trash();
item->lastTime = 0;
item->loadedMode = 0;
garbage.push_back(item); garbage.push_back(item);
} }
return true; return true;
@@ -1520,11 +1517,10 @@ bool WCache<cacheItem, cacheActual>::Release(cacheActual* actual){
it->second->unlock(); //Release one lock. it->second->unlock(); //Release one lock.
if(it->second->isLocked()) if(it->second->isLocked())
return true; //Still locked, won't delete, not technically a failure. return true; //Still locked, won't delete, not technically a failure.
Delete(it->second);
} }
//Released! //Released!
Delete(it->second);
cache.erase(it); cache.erase(it);
return true; return true;
} }