diff options
author | Andrei Karas <akaras@inbox.ru> | 2016-04-29 20:26:10 +0300 |
---|---|---|
committer | Andrei Karas <akaras@inbox.ru> | 2016-04-29 20:26:10 +0300 |
commit | 3fca67011281a84d04b0b07dfea1206e964e42e9 (patch) | |
tree | 34ec295e5ad99f25596a4b19a4a158f3dc96b82c /src/resources/map | |
parent | da8550ca0017883f20fcefb6dc47f082d30b4b86 (diff) | |
download | manaplus-3fca67011281a84d04b0b07dfea1206e964e42e9.tar.gz manaplus-3fca67011281a84d04b0b07dfea1206e964e42e9.tar.bz2 manaplus-3fca67011281a84d04b0b07dfea1206e964e42e9.tar.xz manaplus-3fca67011281a84d04b0b07dfea1206e964e42e9.zip |
Add partial support for memory counting in Map.
Diffstat (limited to 'src/resources/map')
-rw-r--r-- | src/resources/map/map.cpp | 51 | ||||
-rw-r--r-- | src/resources/map/map.h | 21 |
2 files changed, 67 insertions, 5 deletions
diff --git a/src/resources/map/map.cpp b/src/resources/map/map.cpp index 43ed91daf..e958068f2 100644 --- a/src/resources/map/map.cpp +++ b/src/resources/map/map.cpp @@ -82,8 +82,11 @@ class ActorFunctuator final } } actorCompare; -Map::Map(const int width, const int height, - const int tileWidth, const int tileHeight) : +Map::Map(const std::string &name, + const int width, + const int height, + const int tileWidth, + const int tileHeight) : Properties(), mWidth(width), mHeight(height), mTileWidth(tileWidth), mTileHeight(tileHeight), @@ -106,6 +109,7 @@ Map::Map(const int width, const int height, mParticleEffects(), mMapPortals(), mTileAnimations(), + mName(name), mOverlayDetail(config.getIntValue("OverlayDetail")), mOpacity(config.getFloatValue("guialpha")), #ifdef USE_OPENGL @@ -1690,3 +1694,46 @@ void Map::updateConditionLayers() restrict2 mWidth, mHeight); } } + +int Map::calcMemoryLocal() const +{ + return sizeof(Map) + + mName.capacity() + + sizeof(MetaTile) * mWidth * mHeight + + sizeof(MapLayer*) * (mLayers.capacity() + + mDrawUnderLayers.capacity() + + mDrawOverLayers.capacity()) + + sizeof(Tileset*) * mTilesets.capacity() + + sizeof(Actor*) * mActors.size() + + sizeof(AmbientLayer*) * (mBackgrounds.capacity() + + mForegrounds.capacity()) + + sizeof(ParticleEffectData) * mParticleEffects.capacity() + + sizeof(MapItem) * mMapPortals.capacity() + + (sizeof(TileAnimation) + sizeof(int)) * mTileAnimations.size() + + sizeof(Tileset*) * mIndexedTilesetsSize; +} + +int Map::calcMemoryChilds(const int level) const +{ + int sz = 0; + + if (mWalkLayer) + sz += mWalkLayer->calcMemory(level + 1); + FOR_EACH (LayersCIter, it, mLayers) + { + sz += (*it)->calcMemory(level + 1); + } + FOR_EACH (Tilesets::const_iterator, it, mTilesets) + { + sz += (*it)->calcMemory(level + 1); + } + // +++ need calc mBackgrounds + // +++ need calc mForegrounds + if (mSpecialLayer) + mSpecialLayer->calcMemory(level + 1); + if (mTempLayer) + mTempLayer->calcMemory(level + 1); + // +++ need calc mObjects + // +++ need calc mHeights + return sz; +} diff --git a/src/resources/map/map.h b/src/resources/map/map.h index 4a0f71e82..7320bb8d5 100644 --- a/src/resources/map/map.h +++ b/src/resources/map/map.h @@ -33,6 +33,8 @@ #include "enums/resources/map/blocktype.h" #include "enums/resources/map/maptype.h" +#include "resources/memorycounter.h" + #include "resources/map/properties.h" #include "listeners/configlistener.h" @@ -63,7 +65,9 @@ typedef AmbientLayerVector::iterator AmbientLayerVectorIter; /** * A tile map. */ -class Map final : public Properties, public ConfigListener +class Map final : public Properties, + public ConfigListener, + public MemoryCounter { public: enum CollisionTypes @@ -79,8 +83,11 @@ class Map final : public Properties, public ConfigListener /** * Constructor, taking map and tile size as parameters. */ - Map(const int width, const int height, - const int tileWidth, const int tileHeight); + Map(const std::string &name, + const int width, + const int height, + const int tileWidth, + const int tileHeight); A_DELETE_COPY(Map) @@ -361,6 +368,13 @@ class Map final : public Properties, public ConfigListener void updateConditionLayers() restrict2; + int calcMemoryLocal() const override final; + + int calcMemoryChilds(const int level) const override final; + + std::string getCounterName() const override final + { return mName; } + protected: friend class Actor; friend class Minimap; @@ -456,6 +470,7 @@ class Map final : public Properties, public ConfigListener std::map<int, TileAnimation*> mTileAnimations; + std::string mName; int mOverlayDetail; float mOpacity; const RenderType mOpenGL; |