From b6a9fe5299fcfb520eab4e53b56df2a9a1de8df5 Mon Sep 17 00:00:00 2001 From: metalgearsloth Date: Mon, 20 Nov 2023 00:05:01 +1100 Subject: [PATCH] Re-use RobustTree pool --- Robust.Server/GameStates/PvsSystem.cs | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/Robust.Server/GameStates/PvsSystem.cs b/Robust.Server/GameStates/PvsSystem.cs index e20912762f3..8fd5895b672 100644 --- a/Robust.Server/GameStates/PvsSystem.cs +++ b/Robust.Server/GameStates/PvsSystem.cs @@ -84,6 +84,9 @@ private readonly ObjectPool> _visSetP private readonly ObjectPool> _uidSetPool = new DefaultObjectPool>(new SetPolicy(), MaxVisPoolSize); + private readonly ObjectPool> _nentPool = + new DefaultObjectPool>(new SetPolicy(), MaxVisPoolSize * 8); + private readonly ObjectPool> _stackPool = new DefaultObjectPool>( new StackPolicy(), MaxVisPoolSize); @@ -95,8 +98,7 @@ private readonly ObjectPool> _stackPool private readonly ObjectPool> _playerChunkPool = new DefaultObjectPool>(new SetPolicy(), MaxVisPoolSize); - private readonly ObjectPool> _treePool = - new DefaultObjectPool>(new TreePolicy(), MaxVisPoolSize); + private ObjectPool> _treePool = default!; private readonly ObjectPool> _mapChunkPool = new DefaultObjectPool>( @@ -130,6 +132,8 @@ public override void Initialize() { base.Initialize(); + _treePool = new DefaultObjectPool>(new TreePolicy(_nentPool), MaxVisPoolSize); + _eyeQuery = GetEntityQuery(); _metaQuery = GetEntityQuery(); _xformQuery = GetEntityQuery(); @@ -1371,10 +1375,16 @@ private EntityUid[] GetSessionViewers(ICommonSession session) public sealed class TreePolicy : PooledObjectPolicy> where T : notnull { + private readonly ObjectPool> _pool; + + public TreePolicy(ObjectPool> pool) + { + _pool = pool; + } + public override RobustTree Create() { - var pool = new DefaultObjectPool>(new SetPolicy(), MaxVisPoolSize); - return new RobustTree(pool); + return new RobustTree(_pool); } public override bool Return(RobustTree obj)