Added MULTIPLAYER budget. Added profiler markers, visible in PIX.

Signed-off-by: AMZN-Olex <5432499+AMZN-Olex@users.noreply.github.com>
development
AMZN-Olex 4 years ago
parent a3ebe61edd
commit 4ca71fd96a

@ -39,6 +39,9 @@
#include <AzNetworking/Framework/INetworking.h> #include <AzNetworking/Framework/INetworking.h>
#include <cmath> #include <cmath>
#include <AzCore/Debug/Profiler.h>
AZ_DEFINE_BUDGET(MULTIPLAYER);
namespace AZ::ConsoleTypeHelpers namespace AZ::ConsoleTypeHelpers
{ {
@ -347,6 +350,8 @@ namespace Multiplayer
void MultiplayerSystemComponent::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time) void MultiplayerSystemComponent::OnTick(float deltaTime, [[maybe_unused]] AZ::ScriptTimePoint time)
{ {
AZ_PROFILE_SCOPE(MULTIPLAYER, "MultiplayerTick");
if (bg_multiplayerDebugDraw) if (bg_multiplayerDebugDraw)
{ {
m_networkEntityManager.DebugDraw(); m_networkEntityManager.DebugDraw();
@ -388,7 +393,9 @@ namespace Multiplayer
stats.m_clientConnectionCount = 0; stats.m_clientConnectionCount = 0;
// Send out the game state update to all connections // Send out the game state update to all connections
{ {
AZ_PROFILE_SCOPE(MULTIPLAYER, "SendOutGameStateUpdateToAllConnections");
auto sendNetworkUpdates = [&stats](IConnection& connection) auto sendNetworkUpdates = [&stats](IConnection& connection)
{ {
if (connection.GetUserData() != nullptr) if (connection.GetUserData() != nullptr)
@ -434,6 +441,7 @@ namespace Multiplayer
if (!packet.GetCommandSet().empty()) if (!packet.GetCommandSet().empty())
{ {
AZ_PROFILE_SCOPE(MULTIPLAYER, "SendReliablePackets");
m_networkInterface->GetConnectionSet().VisitConnections(visitor); m_networkInterface->GetConnectionSet().VisitConnections(visitor);
} }
} }
@ -1012,6 +1020,8 @@ namespace Multiplayer
void MultiplayerSystemComponent::TickVisibleNetworkEntities(float deltaTime, float serverRateSeconds) void MultiplayerSystemComponent::TickVisibleNetworkEntities(float deltaTime, float serverRateSeconds)
{ {
AZ_PROFILE_SCOPE(MULTIPLAYER, "TickVisibleNetworkEntities");
m_tickFactor += deltaTime / serverRateSeconds; m_tickFactor += deltaTime / serverRateSeconds;
// Linear close to the origin, but asymptote at y = 1 // 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); m_renderBlendFactor = AZStd::clamp(1.0f - (std::pow(cl_renderTickBlendBase, m_tickFactor)), 0.0f, m_tickFactor);

@ -26,8 +26,11 @@
#include <AzCore/Component/ComponentApplicationBus.h> #include <AzCore/Component/ComponentApplicationBus.h>
#include <AzCore/Console/IConsole.h> #include <AzCore/Console/IConsole.h>
#include <AzCore/Console/ILogger.h> #include <AzCore/Console/ILogger.h>
#include <AzCore/Debug/Profiler.h>
#include <AzCore/Math/Transform.h> #include <AzCore/Math/Transform.h>
AZ_DECLARE_BUDGET(MULTIPLAYER);
namespace Multiplayer namespace Multiplayer
{ {
// Current max size for a UdpPacketHeader is 11 bytes // Current max size for a UdpPacketHeader is 11 bytes
@ -78,6 +81,8 @@ namespace Multiplayer
void EntityReplicationManager::ActivatePendingEntities() void EntityReplicationManager::ActivatePendingEntities()
{ {
AZ_PROFILE_SCOPE(MULTIPLAYER, "ActivatePendingEntities");
AZStd::vector<NetEntityId> notReadyEntities; AZStd::vector<NetEntityId> notReadyEntities;
const AZ::TimeMs endTimeMs = AZ::GetElapsedTimeMs() + m_entityActivationTimeSliceMs; const AZ::TimeMs endTimeMs = AZ::GetElapsedTimeMs() + m_entityActivationTimeSliceMs;
@ -126,17 +131,23 @@ namespace Multiplayer
GetRemoteHostId().GetString().c_str() 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); AZ_PROFILE_SCOPE(MULTIPLAYER, "SendEntityUpdateMessages");
} while (!toSendList.empty()); // While our to send list is not empty, build up another packet to send
do
{
SendEntityUpdateMessages(toSendList);
} while (!toSendList.empty());
}
} }
SendEntityRpcs(m_deferredRpcMessagesReliable, true); SendEntityRpcs(m_deferredRpcMessagesReliable, true);
@ -163,6 +174,8 @@ namespace Multiplayer
{ {
return EntityReplicatorList(); return EntityReplicatorList();
} }
AZ_PROFILE_SCOPE(MULTIPLAYER, "GenerateEntityUpdateList");
// Generate a list of all our entities that need updates // Generate a list of all our entities that need updates
EntityReplicatorList toSendList; EntityReplicatorList toSendList;

@ -25,6 +25,8 @@
#include <Multiplayer/Components/NetworkHierarchyRootComponent.h> #include <Multiplayer/Components/NetworkHierarchyRootComponent.h>
#include <Pipeline/NetworkSpawnableHolderComponent.h> #include <Pipeline/NetworkSpawnableHolderComponent.h>
AZ_DECLARE_BUDGET(MULTIPLAYER);
namespace Multiplayer namespace Multiplayer
{ {
AZ_CVAR(bool, net_DebugCheckNetworkEntityManager, false, nullptr, AZ::ConsoleFunctorFlags::Null, "Enables extra debug checks inside the NetworkEntityManager"); 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() void NetworkEntityManager::NotifyEntitiesDirtied()
{ {
AZ_PROFILE_SCOPE(MULTIPLAYER, "NotifyEntitiesDirtied");
m_onEntityMarkedDirty.Signal(); m_onEntityMarkedDirty.Signal();
} }
void NetworkEntityManager::NotifyEntitiesChanged() void NetworkEntityManager::NotifyEntitiesChanged()
{ {
AZ_PROFILE_SCOPE(MULTIPLAYER, "NotifyEntitiesChanged");
m_onEntityNotifyChanges.Signal(); m_onEntityNotifyChanges.Signal();
} }

Loading…
Cancel
Save