- added the ability to track pixmap memory usage at start and end of a game

This commit is contained in:
Mark Vejvoda 2010-10-28 21:06:20 +00:00
parent 5cf0313c5a
commit 01c26b4224
6 changed files with 29 additions and 4 deletions

View File

@ -135,7 +135,7 @@ Game::~Game() {
Unit::setGame(NULL);
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] ==== END GAME ==== getCurrentPixelByteCount() = %llu\n",__FILE__,__FUNCTION__,__LINE__,(long long unsigned int)renderer.getCurrentPixelByteCount());
}
bool Game::quitTriggered() {
@ -640,7 +640,7 @@ void Game::init(bool initForPreviewOnly)
SystemFlags::OutputDebug(SystemFlags::debugPathFinder,"================ STARTING GAME ================\n");
SystemFlags::OutputDebug(SystemFlags::debugPathFinder,"PathFinderType: %s\n", (getGameSettings()->getPathFinderType() ? "RoutePlanner" : "PathFinder"));
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d]\n",__FILE__,__FUNCTION__,__LINE__);
SystemFlags::OutputDebug(SystemFlags::debugSystem,"In [%s::%s Line: %d] ==== START GAME ==== getCurrentPixelByteCount() = %llu\n",__FILE__,__FUNCTION__,__LINE__,(long long unsigned int)renderer.getCurrentPixelByteCount());
}
// ==================== update ====================

View File

@ -4214,5 +4214,20 @@ void Renderer::setLastRenderFps(int value) {
}
}
uint64 Renderer::getCurrentPixelByteCount(ResourceScope rs) const {
uint64 result = 0;
for(int i = (rs == rsCount ? 0 : rs); i < rsCount; ++i) {
const Shared::Graphics::TextureContainer &textures = textureManager[i]->getTextures();
for(int j = 0; j < textures.size(); ++j) {
const Texture *texture = textures[j];
result += texture->getPixelByteCount();
}
if(rs != rsCount) {
break;
}
}
return result;
}
}}//end namespace

View File

@ -385,6 +385,8 @@ public:
void removeObjectFromQuadCache(const Object *o);
void removeUnitFromQuadCache(const Unit *unit);
uint64 getCurrentPixelByteCount(ResourceScope rs=rsGame) const;
private:
//private misc
float computeSunAngle(float time);

View File

@ -19,6 +19,7 @@
using std::string;
using Shared::Platform::uint8;
using Shared::Platform::uint64;
namespace Shared{ namespace Graphics{
@ -81,6 +82,7 @@ public:
virtual void end()=0;
virtual string getPath() const = 0;
virtual void deletePixels() = 0;
virtual uint64 getPixelByteCount() const = 0;
virtual void reseInitState() { inited = false; }
@ -104,6 +106,7 @@ public:
const Pixmap1D *getPixmap() const {return &pixmap;}
virtual string getPath() const;
virtual void deletePixels();
virtual uint64 getPixelByteCount() const {return pixmap.getPixelByteCount();}
};
// =====================================================
@ -121,6 +124,7 @@ public:
const Pixmap2D *getPixmap() const {return &pixmap;}
virtual string getPath() const;
virtual void deletePixels();
virtual uint64 getPixelByteCount() const {return pixmap.getPixelByteCount();}
};
// =====================================================
@ -138,6 +142,7 @@ public:
const Pixmap3D *getPixmap() const {return &pixmap;}
virtual string getPath() const;
virtual void deletePixels();
virtual uint64 getPixelByteCount() const {return pixmap.getPixelByteCount();}
};
// =====================================================
@ -155,6 +160,7 @@ public:
const PixmapCube *getPixmap() const {return &pixmap;}
virtual string getPath() const;
virtual void deletePixels();
virtual uint64 getPixelByteCount() const {return pixmap.getPixelByteCount();}
};
}}//end namespace

View File

@ -23,11 +23,10 @@ namespace Shared{ namespace Graphics{
// =====================================================
// class TextureManager
// =====================================================
typedef vector<Texture*> TextureContainer;
//manages textures, creation on request and deletion on destruction
class TextureManager{
protected:
typedef vector<Texture*> TextureContainer;
protected:
TextureContainer textures;
@ -56,6 +55,8 @@ public:
Texture2D *newTexture2D();
Texture3D *newTexture3D();
TextureCube *newTextureCube();
const TextureContainer &getTextures() const {return textures;}
};

View File

@ -81,6 +81,7 @@ void Mesh::end() {
if(texturesOwned[i] == true && textures[i] != NULL) {
//printf("Deleting Texture [%s] i = %d\n",textures[i]->getPath().c_str(),i);
textureManager->endTexture(textures[i]);
textures[i] = NULL;
}
}
}