Game thread stalled waiting on VirtualTextureSytem

Hi,

it’s my understanding that level instances can use level streaming without using World Partition, but you will need to manually manage the streaming of the runtime-created level instances, as they will not be automatically handled by level streaming systems such as World Partition. So even if the sublevel can be streamed, the contained level instances will not automatically be streamed in the background when not using World Partition and may cause a hitch when the level becomes visible, which can block the game thread for many milliseconds depending on the number of level instances and actors that become visible at once (as mentioned here).

This article provides some in-depth information on level streaming, including optimization strategies (such as using soft object references to delay the loading of objects that are not immediately required) and some relevant CVars.

There are no specific CVars to log resources or textures being loaded on the game thread, but you might try

LogGameThreadMallocChurn.Enable (If > 0, then collect sample game thread malloc, re-alloc and free, periodically print a report of the worst offenders.)

r.VT.Verbose (Be pedantic about certain things that shouldn’t occur unless something is wrong. This may cause a lot of log spam 100’s of lines per frame.)

If you’re comfortable with C++, you can hook into asset loading functions like LoadPackage() or FStreamableManager::RequestAsyncLoad() and log when they’re called from the game thread. Combine this with IsInGameThread() to filter relevant calls.

Please let me know if the above helps.

Sam