From ae41ebfc836c34d61ae6fe72d389e7ec57077d4e Mon Sep 17 00:00:00 2001 From: elsid Date: Thu, 21 Dec 2023 22:38:45 +0100 Subject: [PATCH] Report CellPreloader stats --- apps/openmw/mwworld/cellpreloader.cpp | 16 +++++++++++++++- apps/openmw/mwworld/cellpreloader.hpp | 15 +++++++++++++++ apps/openmw/mwworld/scene.cpp | 5 +++++ apps/openmw/mwworld/scene.hpp | 3 +++ apps/openmw/mwworld/worldimp.cpp | 1 + components/resource/stats.cpp | 5 +++++ 6 files changed, 44 insertions(+), 1 deletion(-) diff --git a/apps/openmw/mwworld/cellpreloader.cpp b/apps/openmw/mwworld/cellpreloader.cpp index 364f3e169e..7157e67d82 100644 --- a/apps/openmw/mwworld/cellpreloader.cpp +++ b/apps/openmw/mwworld/cellpreloader.cpp @@ -4,6 +4,8 @@ #include #include +#include + #include #include #include @@ -276,6 +278,7 @@ namespace MWWorld { oldestCell->second.mWorkItem->abort(); mPreloadCells.erase(oldestCell); + ++mEvicted; } else return; @@ -285,7 +288,8 @@ namespace MWWorld mResourceSystem->getKeyframeManager(), mTerrain, mLandManager, mPreloadInstances)); mWorkQueue->addWorkItem(item); - mPreloadCells[&cell] = PreloadEntry(timestamp, item); + mPreloadCells.emplace(&cell, PreloadEntry(timestamp, item)); + ++mAdded; } void CellPreloader::notifyLoaded(CellStore* cell) @@ -300,6 +304,7 @@ namespace MWWorld } mPreloadCells.erase(found); + ++mLoaded; } } @@ -329,6 +334,7 @@ namespace MWWorld it->second.mWorkItem = nullptr; } mPreloadCells.erase(it++); + ++mExpired; } else ++it; @@ -467,4 +473,12 @@ namespace MWWorld mPreloadCells.clear(); } + void CellPreloader::reportStats(unsigned int frameNumber, osg::Stats& stats) const + { + stats.setAttribute(frameNumber, "CellPreloader Count", mPreloadCells.size()); + stats.setAttribute(frameNumber, "CellPreloader Added", mAdded); + stats.setAttribute(frameNumber, "CellPreloader Evicted", mEvicted); + stats.setAttribute(frameNumber, "CellPreloader Loaded", mLoaded); + stats.setAttribute(frameNumber, "CellPreloader Expired", mExpired); + } } diff --git a/apps/openmw/mwworld/cellpreloader.hpp b/apps/openmw/mwworld/cellpreloader.hpp index ddf13cab83..ce5d5e7a0f 100644 --- a/apps/openmw/mwworld/cellpreloader.hpp +++ b/apps/openmw/mwworld/cellpreloader.hpp @@ -2,11 +2,20 @@ #define OPENMW_MWWORLD_CELLPRELOADER_H #include + #include + #include #include #include +#include + +namespace osg +{ + class Stats; +} + namespace Resource { class ResourceSystem; @@ -76,6 +85,8 @@ namespace MWWorld bool isTerrainLoaded(const CellPreloader::PositionCellGrid& position, double referenceTime) const; void setTerrain(Terrain::World* terrain); + void reportStats(unsigned int frameNumber, osg::Stats& stats) const; + private: void clearAllTasks(); @@ -118,6 +129,10 @@ namespace MWWorld std::vector mLoadedTerrainPositions; double mLoadedTerrainTimestamp; + std::size_t mEvicted = 0; + std::size_t mAdded = 0; + std::size_t mExpired = 0; + std::size_t mLoaded = 0; }; } diff --git a/apps/openmw/mwworld/scene.cpp b/apps/openmw/mwworld/scene.cpp index a5787e301e..64a258cff8 100644 --- a/apps/openmw/mwworld/scene.cpp +++ b/apps/openmw/mwworld/scene.cpp @@ -1285,4 +1285,9 @@ namespace MWWorld } } } + + void Scene::reportStats(unsigned int frameNumber, osg::Stats& stats) const + { + mPreloader->reportStats(frameNumber, stats); + } } diff --git a/apps/openmw/mwworld/scene.hpp b/apps/openmw/mwworld/scene.hpp index fdca9bb87f..6c915d4f92 100644 --- a/apps/openmw/mwworld/scene.hpp +++ b/apps/openmw/mwworld/scene.hpp @@ -19,6 +19,7 @@ namespace osg { class Vec3f; + class Stats; } namespace ESM @@ -203,6 +204,8 @@ namespace MWWorld void testExteriorCells(); void testInteriorCells(); + + void reportStats(unsigned int frameNumber, osg::Stats& stats) const; }; } diff --git a/apps/openmw/mwworld/worldimp.cpp b/apps/openmw/mwworld/worldimp.cpp index 4fc7a21339..ec58f779d0 100644 --- a/apps/openmw/mwworld/worldimp.cpp +++ b/apps/openmw/mwworld/worldimp.cpp @@ -3786,6 +3786,7 @@ namespace MWWorld { DetourNavigator::reportStats(mNavigator->getStats(), frameNumber, stats); mPhysics->reportStats(frameNumber, stats); + mWorldScene->reportStats(frameNumber, stats); } void World::updateSkyDate() diff --git a/components/resource/stats.cpp b/components/resource/stats.cpp index 5d88a55e57..e361be36dd 100644 --- a/components/resource/stats.cpp +++ b/components/resource/stats.cpp @@ -72,6 +72,11 @@ namespace Resource "Physics Projectiles", "Physics HeightFields", "Lua UsedMemory", + "CellPreloader Count", + "CellPreloader Added", + "CellPreloader Evicted", + "CellPreloader Loaded", + "CellPreloader Expired", "NavMesh Jobs", "NavMesh Waiting", "NavMesh Pushed",