Cell loading causes visibly longer frame duration
When player crosess a cell border engine unloads and deactivates some cells, loads and activates other. Ideally all content should be preloaded but in practice it doesn't work good enough. With enabled OPENMW_OSG_STATS_FILE
it looks like this:
Single spike:
There are multiple reasons for it and they are not related to the physics system directly. It just happened to be that PhysicsSystem::moveActors
indirectly calls Scene::changeCellGrid
:
- Terrain preloading may not finish when cell is started to load. Here is a sample of a frame when this happens:
function | duration | calls number | duration, % (frame) |
---|---|---|---|
frame@/home/elsid/dev/openmw/apps/openmw/engine.cpp:257 | 143041 | 1 | 100.0 |
moveActors@/home/elsid/dev/openmw/apps/openmw/mwphysics/physicssystem.cpp:812 | 140914 | 1 | 98.51301375130207 |
changeCellGrid@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:598 | 140807 | 1 | 98.4382100236995 |
preloadTerrain@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:1283 | 93437 | 1 | 65.32183080375556 |
insertCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:1025 | 35777 | 8 | 25.011709929320965 |
activateCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:400 | 19451 | 3 | 13.598199117735474 |
loadInactiveCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:510 | 17426 | 5 | 12.182521095350284 |
addObject@/home/elsid/dev/openmw/apps/openmw/mwphysics/physicssystem.cpp:493 | 15131 | 824 | 10.578086003313736 |
getInstance@/home/elsid/dev/openmw/components/resource/bulletshapemanager.cpp:192 | 7925 | 824 | 5.540369544396362 |
placeObject@/home/elsid/dev/openmw/apps/openmw/mwworld/worldimp.cpp:1436 | 5074 | 4 | 3.547234708929608 |
createInstance@/home/elsid/dev/openmw/components/resource/bulletshapemanager.cpp:204 | 3909 | 413 | 2.732782908396893 |
getPagedRefnums@/home/elsid/dev/openmw/apps/openmw/mwrender/renderingmanager.cpp:1450 | 1942 | 1 | 1.3576527009738466 |
getPagedRefnums@/home/elsid/dev/openmw/apps/openmw/mwrender/objectpaging.cpp:825 | 1934 | 1 | 1.3520598989101027 |
deactivateCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:343 | 1863 | 16 | 1.302423780594375 |
objectAddedToScene@/home/elsid/dev/openmw/apps/openmw/mwlua/luamanagerimp.cpp:219 | 1681 | 450 | 1.1751875336442 |
- Not all meshes are cached.
createInstance
is slow when there is cache miss:
function | duration | calls number | duration, % (frame) |
---|---|---|---|
frame@/home/elsid/dev/openmw/apps/openmw/engine.cpp:257 | 66548 | 1 | 100.0 |
moveActors@/home/elsid/dev/openmw/apps/openmw/mwphysics/physicssystem.cpp:812 | 65223 | 1 | 98.008955941576 |
changeCellGrid@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:598 | 65156 | 1 | 97.908276732584 |
insertCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:1025 | 49924 | 8 | 75.01953477189397 |
loadInactiveCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:510 | 36194 | 5 | 54.38781030233816 |
addObject@/home/elsid/dev/openmw/apps/openmw/mwphysics/physicssystem.cpp:493 | 32667 | 776 | 49.08787642002765 |
getInstance@/home/elsid/dev/openmw/components/resource/bulletshapemanager.cpp:192 | 25500 | 776 | 38.31820640740518 |
createInstance@/home/elsid/dev/openmw/components/resource/bulletshapemanager.cpp:204 | 21262 | 557 | 31.949870769970545 |
activateCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:400 | 14600 | 3 | 21.93905151169081 |
placeObject@/home/elsid/dev/openmw/apps/openmw/mwworld/worldimp.cpp:1436 | 7274 | 4 | 10.930456212057463 |
preloadTerrain@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:1283 | 5765 | 1 | 8.66291999759572 |
getPagedRefnums@/home/elsid/dev/openmw/apps/openmw/mwrender/renderingmanager.cpp:1450 | 1761 | 1 | 2.6462102542525696 |
getPagedRefnums@/home/elsid/dev/openmw/apps/openmw/mwrender/objectpaging.cpp:825 | 1753 | 1 | 2.6341888561639717 |
objectAddedToScene@/home/elsid/dev/openmw/apps/openmw/mwlua/luamanagerimp.cpp:219 | 1276 | 379 | 1.917412995131334 |
unloadInactiveCell@/home/elsid/dev/openmw/apps/openmw/mwworld/scene.cpp:317 | 1211 | 5 | 1.8197391356614774 |
There are might be other problems but so far mentioned two are hiding them.
See #6260 (comment 898206200) for the most recent state.