From a7a65613595b8e9b239168217f5a0193185e5c9f Mon Sep 17 00:00:00 2001 From: Rain Date: Tue, 27 Jan 2026 17:50:56 +0200 Subject: [PATCH 1/2] Pre-allocate CollectPlayers out vector Avoid heap reallocations when iterating the player list --- src/game/server/player.h | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/game/server/player.h b/src/game/server/player.h index 49f41169ca..7bb7b87568 100644 --- a/src/game/server/player.h +++ b/src/game/server/player.h @@ -24,6 +24,10 @@ #include "econ_item_view.h" #endif +#ifdef NEO +#include "team.h" +#endif + // For queuing and processing usercmds class CCommandContext { @@ -1533,6 +1537,26 @@ int CollectPlayers( CUtlVector< T * > *playerVector, int team = TEAM_ANY, bool i playerVector->RemoveAll(); } +#ifdef NEO + int estimatedCount = playerVector->Size(); + if (team == TEAM_ANY) + { + const int nTeams = GetNumberOfTeams(); + for (int i = 0; i < nTeams; ++i) + { + const auto* pTeam = GetGlobalTeam(i); + Assert(pTeam); + if (pTeam) + estimatedCount += (isAlive ? pTeam->GetAliveMembers() : pTeam->GetNumPlayers()); + } + } + else if (const auto* pTeam = GetGlobalTeam(team)) + estimatedCount += (isAlive ? pTeam->GetAliveMembers() : pTeam->GetNumPlayers()); + else + Assert(false); + playerVector->EnsureCapacity(estimatedCount); +#endif + for( int i=1; i<=gpGlobals->maxClients; ++i ) { CBasePlayer *player = UTIL_PlayerByIndex( i ); From e8df1e25401916c5b200558b12d619e4e8151864 Mon Sep 17 00:00:00 2001 From: Rain Date: Wed, 28 Jan 2026 09:25:01 +0200 Subject: [PATCH 2/2] refactor --- src/game/server/player.h | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/src/game/server/player.h b/src/game/server/player.h index 7bb7b87568..31380df8aa 100644 --- a/src/game/server/player.h +++ b/src/game/server/player.h @@ -1539,21 +1539,20 @@ int CollectPlayers( CUtlVector< T * > *playerVector, int team = TEAM_ANY, bool i #ifdef NEO int estimatedCount = playerVector->Size(); + + const auto incrementEstimate = [&estimatedCount, isAlive](int team) { + const auto* pTeam = GetGlobalTeam(team); + Assert(pTeam); + if (pTeam) + estimatedCount += (isAlive ? pTeam->GetAliveMembers() : pTeam->GetNumPlayers()); + }; + if (team == TEAM_ANY) { const int nTeams = GetNumberOfTeams(); - for (int i = 0; i < nTeams; ++i) - { - const auto* pTeam = GetGlobalTeam(i); - Assert(pTeam); - if (pTeam) - estimatedCount += (isAlive ? pTeam->GetAliveMembers() : pTeam->GetNumPlayers()); - } + for (int i = 0; i < nTeams; ++i) incrementEstimate(i); } - else if (const auto* pTeam = GetGlobalTeam(team)) - estimatedCount += (isAlive ? pTeam->GetAliveMembers() : pTeam->GetNumPlayers()); - else - Assert(false); + else incrementEstimate(team); playerVector->EnsureCapacity(estimatedCount); #endif