diff --git a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp index dad584d3e8..ad0be24661 100644 --- a/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp +++ b/Gems/Multiplayer/Code/Source/MultiplayerSystemComponent.cpp @@ -39,6 +39,9 @@ #include #include +#include + +AZ_DEFINE_BUDGET(MULTIPLAYER); namespace AZ::ConsoleTypeHelpers { @@ -347,6 +350,8 @@ namespace Multiplayer void MultiplayerSystemComponent::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) { + AZ_PROFILE_SCOPE(MULTIPLAYER, "MultiplayerTick"); + if (bg_multiplayerDebugDraw) { m_networkEntityManager.DebugDraw(); @@ -388,7 +393,9 @@ namespace Multiplayer stats.m_clientConnectionCount = 0; // Send out the game state update to all connections - { + { + AZ_PROFILE_SCOPE(MULTIPLAYER, "SendOutGameStateUpdateToAllConnections"); + auto sendNetworkUpdates = [&stats](IConnection& connection) { if (connection.GetUserData() != nullptr) @@ -434,6 +441,7 @@ namespace Multiplayer if (!packet.GetCommandSet().empty()) { + AZ_PROFILE_SCOPE(MULTIPLAYER, "SendReliablePackets"); m_networkInterface->GetConnectionSet().VisitConnections(visitor); } } @@ -1012,6 +1020,8 @@ namespace Multiplayer void MultiplayerSystemComponent::TickVisibleNetworkEntities(float deltaTime, float serverRateSeconds) { + AZ_PROFILE_SCOPE(MULTIPLAYER, "TickVisibleNetworkEntities"); + m_tickFactor += deltaTime / serverRateSeconds; // Linear close to the origin, but asymptote at y = 1 m_renderBlendFactor = AZStd::clamp(1.0f - (std::pow(cl_renderTickBlendBase, m_tickFactor)), 0.0f, m_tickFactor); diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp index 893799a296..a9f1a33e31 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/EntityReplication/EntityReplicationManager.cpp @@ -26,8 +26,11 @@ #include #include #include +#include #include +AZ_DECLARE_BUDGET(MULTIPLAYER); + namespace Multiplayer { // Current max size for a UdpPacketHeader is 11 bytes @@ -78,6 +81,8 @@ namespace Multiplayer void EntityReplicationManager::ActivatePendingEntities() { + AZ_PROFILE_SCOPE(MULTIPLAYER, "ActivatePendingEntities"); + AZStd::vector notReadyEntities; const AZ::TimeMs endTimeMs = AZ::GetElapsedTimeMs() + m_entityActivationTimeSliceMs; @@ -126,17 +131,23 @@ namespace Multiplayer GetRemoteHostId().GetString().c_str() ); - // Prep a replication record for send, at this point, everything needs to be sent - for (EntityReplicator* replicator : toSendList) { - replicator->GetPropertyPublisher()->PrepareSerialization(); + AZ_PROFILE_SCOPE(MULTIPLAYER, "PrepareSerialization"); + // Prep a replication record for send, at this point, everything needs to be sent + for (EntityReplicator* replicator : toSendList) + { + replicator->GetPropertyPublisher()->PrepareSerialization(); + } } - // While our to send list is not empty, build up another packet to send - do { - SendEntityUpdateMessages(toSendList); - } while (!toSendList.empty()); + AZ_PROFILE_SCOPE(MULTIPLAYER, "SendEntityUpdateMessages"); + // While our to send list is not empty, build up another packet to send + do + { + SendEntityUpdateMessages(toSendList); + } while (!toSendList.empty()); + } } SendEntityRpcs(m_deferredRpcMessagesReliable, true); @@ -163,6 +174,8 @@ namespace Multiplayer { return EntityReplicatorList(); } + + AZ_PROFILE_SCOPE(MULTIPLAYER, "GenerateEntityUpdateList"); // Generate a list of all our entities that need updates EntityReplicatorList toSendList; diff --git a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp index 0a6aeea8a8..a3d1988e66 100644 --- a/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp +++ b/Gems/Multiplayer/Code/Source/NetworkEntity/NetworkEntityManager.cpp @@ -25,6 +25,8 @@ #include #include +AZ_DECLARE_BUDGET(MULTIPLAYER); + namespace Multiplayer { AZ_CVAR(bool, net_DebugCheckNetworkEntityManager, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enables extra debug checks inside the NetworkEntityManager"); @@ -203,11 +205,13 @@ namespace Multiplayer void NetworkEntityManager::NotifyEntitiesDirtied() { + AZ_PROFILE_SCOPE(MULTIPLAYER, "NotifyEntitiesDirtied"); m_onEntityMarkedDirty.Signal(); } void NetworkEntityManager::NotifyEntitiesChanged() { + AZ_PROFILE_SCOPE(MULTIPLAYER, "NotifyEntitiesChanged"); m_onEntityNotifyChanges.Signal(); }