1
0
Fork 1
mirror of https://github.com/TES3MP/openmw-tes3mp.git synced 2025-07-21 05:44:06 +00:00

Count navmesh cache hit rate

This commit is contained in:
elsid 2021-02-04 00:18:25 +01:00
parent 94e8855c8c
commit 88ca4a1db6
No known key found for this signature in database
GPG key ID: B845CB9FEE18AB40
3 changed files with 14 additions and 1 deletions

View file

@ -53,13 +53,16 @@ namespace DetourNavigator
} }
NavMeshTilesCache::NavMeshTilesCache(const std::size_t maxNavMeshDataSize) NavMeshTilesCache::NavMeshTilesCache(const std::size_t maxNavMeshDataSize)
: mMaxNavMeshDataSize(maxNavMeshDataSize), mUsedNavMeshDataSize(0), mFreeNavMeshDataSize(0) {} : mMaxNavMeshDataSize(maxNavMeshDataSize), mUsedNavMeshDataSize(0), mFreeNavMeshDataSize(0),
mHitCount(0), mGetCount(0){}
NavMeshTilesCache::Value NavMeshTilesCache::get(const osg::Vec3f& agentHalfExtents, const TilePosition& changedTile, NavMeshTilesCache::Value NavMeshTilesCache::get(const osg::Vec3f& agentHalfExtents, const TilePosition& changedTile,
const RecastMesh& recastMesh, const std::vector<OffMeshConnection>& offMeshConnections) const RecastMesh& recastMesh, const std::vector<OffMeshConnection>& offMeshConnections)
{ {
const std::lock_guard<std::mutex> lock(mMutex); const std::lock_guard<std::mutex> lock(mMutex);
++mGetCount;
const auto agentValues = mValues.find(agentHalfExtents); const auto agentValues = mValues.find(agentHalfExtents);
if (agentValues == mValues.end()) if (agentValues == mValues.end())
return Value(); return Value();
@ -74,6 +77,8 @@ namespace DetourNavigator
acquireItemUnsafe(tile->second); acquireItemUnsafe(tile->second);
++mHitCount;
return Value(*this, tile->second); return Value(*this, tile->second);
} }
@ -123,17 +128,22 @@ namespace DetourNavigator
std::size_t navMeshCacheSize = 0; std::size_t navMeshCacheSize = 0;
std::size_t usedNavMeshTiles = 0; std::size_t usedNavMeshTiles = 0;
std::size_t cachedNavMeshTiles = 0; std::size_t cachedNavMeshTiles = 0;
std::size_t hitCount = 0;
std::size_t getCount = 0;
{ {
const std::lock_guard<std::mutex> lock(mMutex); const std::lock_guard<std::mutex> lock(mMutex);
navMeshCacheSize = mUsedNavMeshDataSize; navMeshCacheSize = mUsedNavMeshDataSize;
usedNavMeshTiles = mBusyItems.size(); usedNavMeshTiles = mBusyItems.size();
cachedNavMeshTiles = mFreeItems.size(); cachedNavMeshTiles = mFreeItems.size();
hitCount = mHitCount;
getCount = mGetCount;
} }
stats.setAttribute(frameNumber, "NavMesh CacheSize", navMeshCacheSize); stats.setAttribute(frameNumber, "NavMesh CacheSize", navMeshCacheSize);
stats.setAttribute(frameNumber, "NavMesh UsedTiles", usedNavMeshTiles); stats.setAttribute(frameNumber, "NavMesh UsedTiles", usedNavMeshTiles);
stats.setAttribute(frameNumber, "NavMesh CachedTiles", cachedNavMeshTiles); stats.setAttribute(frameNumber, "NavMesh CachedTiles", cachedNavMeshTiles);
stats.setAttribute(frameNumber, "NavMesh CacheHitRate", static_cast<double>(hitCount) / getCount * 100.0);
} }
void NavMeshTilesCache::removeLeastRecentlyUsed() void NavMeshTilesCache::removeLeastRecentlyUsed()

View file

@ -194,6 +194,8 @@ namespace DetourNavigator
std::size_t mMaxNavMeshDataSize; std::size_t mMaxNavMeshDataSize;
std::size_t mUsedNavMeshDataSize; std::size_t mUsedNavMeshDataSize;
std::size_t mFreeNavMeshDataSize; std::size_t mFreeNavMeshDataSize;
std::size_t mHitCount;
std::size_t mGetCount;
std::list<Item> mBusyItems; std::list<Item> mBusyItems;
std::list<Item> mFreeItems; std::list<Item> mFreeItems;
std::map<osg::Vec3f, std::map<TilePosition, TileMap>> mValues; std::map<osg::Vec3f, std::map<TilePosition, TileMap>> mValues;

View file

@ -394,6 +394,7 @@ void StatsHandler::setUpScene(osgViewer::ViewerBase *viewer)
"NavMesh CacheSize", "NavMesh CacheSize",
"NavMesh UsedTiles", "NavMesh UsedTiles",
"NavMesh CachedTiles", "NavMesh CachedTiles",
"NavMesh CacheHitRate",
"", "",
"Mechanics Actors", "Mechanics Actors",
"Mechanics Objects", "Mechanics Objects",